精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

慢SQL,壓垮團隊的最后一根稻草

開發 開發工具
今天只討論一種應用模式,就是最普遍的,前端實時調用后端web服務,服務端經過DB的增刪改查作出響應的應用。至于離線數據分析,在線規則引擎模板執行,流式計算等不在本次討論范疇。

先說結論,我支持將邏輯寫在 Java 等應用系統中。

[[225954]]

背景:

今天只討論一種應用模式,就是最普遍的,前端實時調用后端web服務,服務端經過DB的增刪改查作出響應的應用。至于離線數據分析,在線規則引擎模板執行,流式計算等不在本次討論范疇。

重SQL開發的場景

先看一個例子吧。用經典的 Controller Service DAO 開發模式描述。

需求:

查詢出每個學生所在的城市名以及分數展示到前端。

重SQL模式

  1. class Controller{ 
  2.   Service service; 
  3.   Map<String,String> get(Map<String,Object> param){ 
  4.     return service.get(param); 
  5.   } 
  6.  
  7. class Service{ 
  8.   DAO dao; 
  9.   Map<String,String> get(Map<String,Object> param){ 
  10.     return dao.get(param); 
  11.   } 
  12. class DAO{ 
  13.   SQLTemplate template; 
  14.   Map<String,String> get(Map<String,Object> param){ 
  15.     String sql = "select city_name,student_name,score from student,score,city where city.city_code=student.city_code and score.student_id=student.student_id" ; 
  16.     return template.execute(sql,param); 
  17.   } 

重Java模式

  1. class View
  2.   String studentName; 
  3.   String cityName; 
  4.   String score; 
  5.  
  6. class Requent{ 
  7.  
  8. class Controller{ 
  9.   Service service; 
  10.   List<View> get(Requent request){ 
  11.     return service.get(param); 
  12.   } 
  13.  
  14. class Service{ 
  15.   StudentDAO studentDAO; 
  16.   ScoreDAO scoreDAO; 
  17.   CityDAO cityDAO; 
  18.   List<View> get(Requent param){ 
  19.     Student studentRequest = new Student(); 
  20.     //查詢學生 
  21.     List<Student> students = studentDAO.select(studentRequest); 
  22.     List<View> result = new ArrayList(students.size()); 
  23.      
  24.     for(Student student : students){ 
  25.       View view = new View(); 
  26.       view.setStudentName(student.getStudentName()); 
  27.      
  28.        //拼接城市名 
  29.       City cityRequest  = new City(); 
  30.       cityRequest.setStudentId(student.getStudentId()); 
  31.       City city = cityDAO.select(cityRequest); 
  32.       view.setCityName(city); 
  33.        
  34.       //拼接分數 
  35.       Score scoreRequest = new Score(); 
  36.         scoreRequest.setStudentId(student.getStudentId()); 
  37.       Score score = scoreDAO.select(scoreRequest); 
  38.       view.setScode(score.getScore()); 
  39.        
  40.       result.add(view); 
  41.     } 
  42.     return result; 
  43.   } 
  44.  
  45. class StudentDAO{ 
  46.   SQLTemplate template; 
  47.   Student select(Student param){ 
  48.     String sql = "select * from Student where param = ..."
  49.     template.select(sql,param); 
  50.   }  
  51.  
  52. class ScoreDAO{ 
  53.   SQLTemplate template; 
  54.    Score select(Score param){ 
  55.     String sql = "select * from Score where param = ..."
  56.     template.select(sql,param); 
  57.   } 
  58.  
  59. class CityDAO{ 
  60.   SQLTemplate template; 
  61.   City select(City param){ 
  62.   String sql = "select * from City where param = ..."
  63.     template.select(sql,param); 
  64.   } 

可以看到,使用重SQL的模式來進行開發確實很快很快,只需要把SQL開發出來基本就完事了,但是看著用重 Java 的模式開發,需要寫一堆的代碼,這么看來好像是 SQL 勝利一籌。

好,PD突然說了,我要把城市名為 “大蕉” 的,分數乘于2展示出來。握草,這個怎么搞??

重SQL模式

  1. class DAO{ 
  2.   SQLTemplate template; 
  3.   Map<String,String> get(Map<String,Object> param){ 
  4.     String sql = "select city_name,student_name,CASE WHEN city.city_name='大蕉' THEN 2*score.score ELSE score END score from student,score,city where city.city_code=student.city_code and score.student_id=student.student_id " ; 
  5.     return template.execute(sql,param); 
  6.   } 

好了。。這個SQL已經變得很復雜了基本沒法看了。。

重 Java 模式

  1. Service.class    
  2.  
  3.      //拼接分數 
  4.       Score scoreRequest = new Score(); 
  5.         scoreRequest.setStudentId(student.getStudentId()); 
  6.       Score score = scoreDAO.select(scoreRequest); 
  7.        
  8.       if("大蕉".equals(city.getCityName()){ 
  9.         view.setScode(score.getScore() * 2); 
  10.       }else
  11.             view.setScode(score.getScore()); 
  12.       } 
  13.        

咦好像改動也不多嘛。

這時候PD又來了我要把城市名為 “大蕉” ,并且城市Code小于10086的,分數乘于2展示出來。握草,完蛋了,之前全是SQL,這個需求要怎么搞??繼續疊加上去繼續 CASE WHEN?

還沒想清楚呢,突然 DBA 電話飛過來了,兄dei你的SQL太慢了,現在把整個庫拖垮了,你是不是沒有加索引?

我:索引加了啊。。。難道是沒走到?那是先解決慢SQL還是先開發需求呢?拆庫是不可能了,邏輯這么死鬼復雜拆庫完全沒法跑啊,加CPU加內存啊 DBA大佬!!!

[DBA日報] 慢SQL 180+,已解決10。

又上了一個版本

[DBA日報] 慢SQL 200+,已解決15。

又上了一個版本

[DBA日報] 慢SQL 250+,已解決30。

慢慢的,開發和運營和DBA每天都疲勞于監控這些SQL。。。。

前言

觀察了一下,傳統企業以及絕大部分轉型中的企業的 Java 應用中,很神奇的是,他們的開發人員包括我自己以前,大家都非常非常希望使用一個 SQL 來完成所有的邏輯的編寫,非常多企業更是把數據庫的存儲過程和數據庫自定義函數來完成。

這些關于邏輯應該寫在哪里的爭論從來沒有停止過,不僅僅發生在后端和數據庫端,連前后端都經常會發生這種爭論,現在只討論后端和數據庫端的糾結。

我將從這五個方面分別對比一下兩種模式的異同。

  • 出現場景
  • 開發效率
  • 缺陷排查
  • 架構升級
  • 系統維護

出現場景

SQL

我們絕大多數的歷史代碼都是用存儲過程來實現的啊,如果有新需求不往上面做的話,很難兼容原來的邏輯啊啊。

前面的人呢是這樣寫的,我來了看大家都這樣寫就這樣寫了。

Java

新應用嘛,我想怎么樣寫就怎樣寫。

監控和埋點寫起來簡單吖,排查問題可方便了。

前面的人呢是這樣寫的,我來了看大家都這樣寫就這樣寫了。

開發效率

SQL

這樣寫起來很快啊,而且寫 Java 代碼多難受啊,寫 SQL 我自己在數據庫開發環境跑一下結果正確我就直接丟到代碼中提交了,多爽啊。

老實說,這樣子確實會提高開發的效率,因為不用寫那么多查庫聚合的操作,一切都在 SQL 中搞定了。另一方面來看,這確實會讓 Java 代碼看起來很雞肋,好像只是把數據從 web 層到數據層的一個管道而已,一切 if else 能寫在 SQL 中的都寫在 SQL 中了。

但是新需求來或者需求變更的時候,我經常要重新寫SQL,如果變動不多我可能要改動到原來的 SQL,但是我又不敢改,所以只好 copy 重新寫一個,改 SQL 的風險好大,一報錯又要重啟好難受。

Java

一次要寫N個類,有點煩。

新需求來或者需求變更的時候,如果邏輯比較復雜,我直接抽成方法或者改成一些設計模式,維護起來效率還是可以接受的。

缺陷排查

SQL

開發排查問題的時候,除了看日志,直接把SQL和參數丟到 PL/SQL 或者 其他工具里跑一下,基本就能知道數據問題出現在哪了。測試同學在進行測試的時候,如果發現有不對的東西,直接跟開發同學一樣的思路,把SQL 跑一下,問題基本就定位得七七八八了。

但是呢,一旦遇到跑 SQL 無法一眼看出問題的 bug 或者 SQL 實在是太長太長了的的時候,就蒙圈了。我曾經就維護了一個幾千行的存儲過程,一旦發生問題,排查問題的過程巨艱難。但是呢直接用一個數據庫一個功能搞定所有功能未嘗不是一件很爽的事情,因為關系型數據庫實在是實在是太太太穩定了,一次編寫***運行。

Java

看日志看監控。

根據報錯的代碼位置 check 一下代碼邏輯。

一些入參分支肉眼 check 不出來,只能遠程 debug 慢慢看數據流向。

測試的同學基本無法幫忙 check 缺陷,只能靠程序的表現來判斷。

架構升級

SQL

SQL 慢沒關系,它穩定啊,慢就把機器垂直擴展一下好啦,加cpu,加內存,換SSD,加加加絕對可以解決事情的。

SQL 有各種索引和優化策略,說不定跑起來比我們自己寫邏輯還快呢。

加加加,加內存加cpu垂直升級。也沒有其他招數了,除了前置緩存,但是如果查詢都很個性化SQL很復雜,前置緩存也基本沒啥亂用。。。

如果你的邏輯全部寫在 SQL 中,那完蛋了,你這個表基本就沒法分表了,因為你的業務邏輯跟數據庫的數據完整性是強耦合的,需要一切數據基本都在一個數據庫中,這是一件很難受很難受的事情,不信你去問問那些所有業務邏輯全寫在 SQL 中的小伙。

數據庫中非常復雜的表關聯會極大程度拖慢數據庫處理每條 SQL 的平均時間,極大程度拖慢數據庫 RT,降低了數據庫的 RT ,如果邏輯都寫在 SQL 中,那么只能進行垂直升級。因為一旦進行水平擴展,那么多機器的非常復雜的分布式表關聯,RT 基本不是一個高并發的業務應用的能容忍的。

Java

如果是數據庫瓶頸,加數據庫機器,分庫分表一下,應用層基本不用改,在DAO層進行路由一下。

如果是服務器cpu瓶頸,多加幾臺機器就好了。

如果還有瓶頸,增加一下查詢緩存。

在應用快速發展的過程中一般都會分庫分表的拆分或者自動水平擴展,這時候其實只需要數據庫層面做好自己的數據遷移和同步就好了,對于業務層來說是完全無感知的。即使業務非常非常復雜,需要拆應用,其實也非常簡單,只需要把對應的 DAO 層的操作拆分出去,換成 RPC 或者其他方式的調用就好了。

系統維護

SQL

舊SQL完全不敢動,來一個需求加一個 SQL。

慢SQL日益增加,應對疲乏。

Java

SQL寫完一次基本不用動,來一個需求加一個方法聚合一下數據操作即可。

應用維護比較簡單,只要監控做好了,定位到問題基本都能很快解決。

邏輯越來越復雜,沒有好的開發框架的話,代碼維護起來也是挺要命,因為完全不知道跑哪個分支去了。但是現在已經有很多優秀的開源框架來更好地維護代碼了,比如 Spring 的全家桶。

怎么破

舊的重 SQL 邏輯暫時不要動,新的邏輯都基于 Java 模式開發,先保證慢 SQL 不增加,舊的 SQL 穩定運行,畢竟業務穩定是***要素。

如果業務初期需要非常非常快速開發,那么使用重 SQL 模式也是可以理解的,但是還是要抽時間重構成 Java 模式。

結論

我支持將邏輯寫在 Java 等應用系統中。其實原因在上面基本描述完了,***就是復雜 SQL 的表關聯其實跟個人的能力有非常大的關系,如果一個 SQL 寫得不好,那是極慢極慢的非常容易把整個數據庫拖慢的。第二就是維護這些 SQL 也是一件很難受的事情,因為你完全不知道這個 SQL 背后的數據流轉是怎樣的,你只能根據自己的猜測去查看 SQL 中的 bug,Java 應用好歹還能 debug 一下還有打點看看數據不是?如果邏輯寫在 Java 中那么其實你的 DAO 層只需要編寫一次,但是可以***使用,基本不會在這一層浪費很多的時間(用過 ibatis 的都知道改了 SQL 需要重啟應用吧?)。第三就是邏輯都寫在 SQL ,中對于分庫分表和應用拆分來說是一件非常難受的事情,真的難受。

昨天寫的被吐槽了,回爐重造了,重新看看。

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2022-08-15 07:32:03

SQL語句數據庫

2014-01-10 10:53:29

移動廣告平臺進化分發

2011-07-28 09:09:23

Java

2020-05-08 09:37:32

網線網絡網速

2025-04-03 00:03:00

數據內存網絡

2011-07-22 10:40:04

思科裁員

2015-03-23 11:56:58

2017-02-07 09:15:54

光纖傳輸介質通信網絡

2009-03-12 10:03:00

雙絞線連接網絡

2016-12-01 09:30:03

運維網絡網線

2021-03-23 08:21:06

GolangPython字符

2020-07-16 11:16:57

云計算SD-WAN運營

2016-05-18 14:50:57

運維PortfastAPI

2010-09-10 16:17:27

2022-12-13 10:28:53

2021-04-06 08:20:24

二叉搜索樹數據結構算法

2017-08-14 16:36:23

ASActivity內存

2017-12-28 11:25:51

2019-09-02 10:38:30

網線攻擊MVP

2016-11-18 13:58:33

點贊
收藏

51CTO技術棧公眾號

欧美91精品| 日韩免费av片| 久久青草免费| 日韩毛片一二三区| 97国产超碰| 精品一区二区三区四| 国产精品成人自拍| 色天使色偷偷av一区二区| 色涩成人影视在线播放| 国产黄色美女视频| 亚洲色诱最新| 中文字幕欧美精品在线| 香蕉视频免费网站| 日韩在线观看不卡| 欧美激情综合网| 2022国产精品| 国产精品成人久久久| 欧美激情 亚洲a∨综合| 亚洲男子天堂网| 91精品国产三级| 二区三区不卡| 一区二区三区美女视频| 日本在线视频一区| 亚洲国产福利视频| 麻豆国产精品官网| 久久国产精品久久久久| 亚洲成人日韩在线| 天堂久久av| 欧美日韩专区在线| 日本少妇高潮喷水视频| 超碰免费公开在线| 久久亚洲免费视频| 动漫3d精品一区二区三区 | 啪啪激情综合网| 日本久久电影网| 欧美国产视频一区| 欧美极品视频| 国产日韩欧美亚洲| 狠狠久久综合婷婷不卡| 99精品在线视频观看| 日韩国产在线一| 欧美在线视频播放| 国产第一页在线播放| 伊人青青综合网| 日韩精品一二三四区| 制服下的诱惑暮生| 日本一区二区中文字幕| 色中色一区二区| 免费在线观看视频a| 怡红院红怡院欧美aⅴ怡春院| 国产亲近乱来精品视频| 六月婷婷久久| 手机在线观看免费av| 国产99久久久国产精品潘金网站| 国产精品高潮呻吟视频| 一区二区视频国产| 精品欧美一区二区精品少妇| 麻豆国产精品777777在线| 国产成人综合精品| 99热只有这里有精品| 伊人久久大香线蕉av超碰演员| 永久免费毛片在线播放不卡 | 国产一级视频在线播放| 91精品国产自产在线观看永久∴| 在线观看欧美视频| 亚洲精品午夜视频| 欧美黑人巨大videos精品| 精品国产一区二区三区久久久蜜月 | 欧美日韩一二三四五区| 国产在线精品91| 久草在线资源福利站| 亚洲r级在线视频| 无码专区aaaaaa免费视频| 24小时免费看片在线观看| 亚洲综合一区二区三区| 久久久久久免费看| 欧美aa在线| 色综合天天天天做夜夜夜夜做| 成人在线免费观看av| √8天堂资源地址中文在线| 午夜精品视频在线观看| 欧美日韩亚洲第一| 亚洲伦乱视频| 欧美精品第1页| 中文字幕av一区二区三区人妻少妇 | 色天堂在线视频| 国产拍揄自揄精品视频麻豆| 日韩精品久久一区二区三区| 欧美成人性生活视频| 亚洲男帅同性gay1069| 国产精品成人久久电影| 免费成人直播| 欧美日韩亚洲高清一区二区| 日韩a一级欧美一级| 99这里只有精品视频| 欧美成人a∨高清免费观看| xxxx黄色片| 日本一二区不卡| 九九热这里只有在线精品视| 免费看一级一片| 美女网站久久| 91精品在线一区| 天天干在线观看| 日本一二三不卡| 国产又粗又长又爽视频| 黄在线观看免费网站ktv| 欧美在线观看一二区| 永久av免费在线观看| 亚洲警察之高压线| 免费91在线视频| 黄色一级片免费在线观看| 美国毛片一区二区| 久久久久久草| huan性巨大欧美| 欧美丝袜美女中出在线| 日韩一级片播放| 日韩一二三区| 亚洲男子天堂网| 久久99久久久| 美女黄网久久| 国产精品久久精品视| av在线播放网站| 舔着乳尖日韩一区| 中文字幕色网站| 欧美**vk| 久久久久这里只有精品| 91黑人精品一区二区三区| 国产成人精品午夜视频免费| 日韩av高清在线播放| av中文字幕在线观看第一页 | 日韩精品在线免费观看视频| 丝袜 亚洲 另类 欧美 重口| 日韩一区精品字幕| 精品日韩电影| 激情影院在线| 91精品在线麻豆| 欧美福利第一页| 99国产精品久久久久久久成人热 | 7m精品国产导航在线| www.亚洲成人| 中文字幕 国产精品| 91亚洲国产成人精品一区二区三| 中文字幕制服丝袜在线| 欧美xnxx| 日韩av在线影院| 玖玖爱免费视频| 国产一区二区三区精品欧美日韩一区二区三区 | 日欧美一区二区| 久久久久久国产精品免费免费| 黄色污污视频在线观看| 337p亚洲精品色噜噜噜| 欧美xxxx精品| 奇米一区二区三区av| 日韩av一区二区三区在线观看| 女海盗2成人h版中文字幕| 日韩精品在线网站| 久久一级黄色片| 成人av在线资源网站| 激情六月天婷婷| 中文字幕久久精品一区二区| 久久天堂av综合合色| 国产精品久久久久久在线| 日韩美女视频一区二区 | 亚洲成人av中文字幕| 肉色超薄丝袜脚交69xx图片 | 欧美高清hd| 精品中文字幕在线| 亚洲第一精品网站| 亚洲成人激情综合网| 伊人五月天婷婷| 欧美一区二区三区久久精品茉莉花| 91精品视频一区| 亚洲图区一区| 亚洲精品一区二区三区精华液 | 亚洲一区电影777| www.17c.com喷水少妇| 亚洲三级国产| 免费在线观看一区二区| 日韩成人动漫| 中文字幕在线亚洲| 精品人妻伦一区二区三区久久 | 亚洲精品一区二区在线| 国模私拍一区二区| 国产精品久久久久久福利一牛影视| 天天影视色综合| 亚洲性感美女99在线| 久久久com| 精品176极品一区| 欧美老少做受xxxx高潮| 五月婷婷丁香六月| 欧美日韩在线精品一区二区三区激情| 免费成人深夜蜜桃视频| 国产精品一二三四区| 成人毛片视频网站| 欧美freesextv| 国产91视觉| 先锋欧美三级| 欧美激情精品久久久久久久变态 | 精品福利av导航| 无码任你躁久久久久久久| 自拍偷拍亚洲激情| 欧美色图校园春色| 久久性色av| 国产性生活免费视频| 国产一区国产二区国产三区| 亚洲一区二区三区毛片| 韩国精品一区| 久久久精品国产亚洲| 亚洲 小说区 图片区 都市| 欧美欧美欧美欧美| 五月婷婷色丁香| 亚洲欧美一区二区三区国产精品| 亚洲无人区码一码二码三码| 美女一区二区三区| 色婷婷综合久久久久中文字幕| 激情久久久久久久| 在线观看av的网址| 婷婷六月综合| 亚洲高清精品中出| 免费看成人吃奶视频在线| 国产精品国产精品国产专区不卡| 成人网av.com/| 国产狼人综合免费视频| 91精品影视| 欧美一级视频免费在线观看| 丁香花在线影院| 欧美国产极速在线| 青春草视频在线观看| 美女精品视频一区| 黄色网在线播放| 久久精品国产亚洲一区二区| 久做在线视频免费观看| 日韩在线观看免费av| 色大18成网站www在线观看| 一区二区三区亚洲| 久草在线青青草| 亚洲老头同性xxxxx| 男操女在线观看| 亚洲欧美成人网| 欧美日韩伦理片| 亚洲人成免费电影| 国产高清自拍视频在线观看| 亚洲一区二区黄| www.av在线| 色悠悠久久88| 黄网站在线免费看| 超碰97人人做人人爱少妇| 2021国产在线| 韩剧1988免费观看全集| 国产精品一二三产区| 欧美整片在线观看| 经典三级一区二区| 国产精品中文久久久久久久| 91成人短视频在线观看| 亚洲一区二区三区成人在线视频精品 | 亚洲一区二区三区视频播放| 亚洲2区在线| 国内成+人亚洲| 国产99久久| 一本一道久久久a久久久精品91 | 亚洲中文字幕无码专区| 天堂影院一区二区| 亚洲成人福利在线| 国产精品一二二区| aaaaaav| 国产丝袜在线精品| 国产黄色小视频网站| 一区二区三区不卡在线观看| aaa人片在线| 欧美亚州韩日在线看免费版国语版| 中文字幕你懂的| 日韩美女天天操| 青青草在线播放| 日韩一区二区三区国产| 色噜噜狠狠狠综合欧洲色8| 欧美中文字幕在线观看| 日韩专区视频| 国产综合动作在线观看| 欧美日韩在线二区| 蜜桃视频一区二区在线观看| 亚洲女人av| 手机免费看av网站| 91色九色蝌蚪| 日韩精品一区二区三区在线视频| 亚洲国产精品视频| 亚洲网站在线免费观看| 亚洲第一区第二区| 999国产在线视频| 欧美激情综合亚洲一二区| 中文字幕成在线观看| 91网免费观看| av伊人久久| 久久久久久免费看| 国产在线麻豆精品观看| 在线观看日本中文字幕| 一二三四区精品视频| 波多野结衣毛片| 欧美精品一区男女天堂| 免费网站免费进入在线| 欧洲一区二区视频| 精品久久免费| 日韩精品无码一区二区三区| 精品成人国产| 久久久久久久高清| 国产片一区二区三区| 日韩网红少妇无码视频香港| 91精品在线一区二区| www.在线播放| 日本精品视频网站| 国产一区丝袜| 粉嫩av一区二区三区天美传媒| 蜜桃av一区二区在线观看| 人妻无码一区二区三区| 亚洲综合激情另类小说区| 一本一道人人妻人人妻αv| 亚洲欧美一区二区三区四区| av美女在线观看| 91在线精品观看| 国产精品videosex性欧美| 妺妺窝人体色www在线观看| 99久久久无码国产精品| 精品99久久久久成人网站免费| 9191精品国产综合久久久久久| 国产高清自拍视频在线观看| 国产91精品久久久久| 精品深夜福利视频| 18禁裸男晨勃露j毛免费观看| 国产精品中文字幕日韩精品| 欧美视频一区二区在线| 欧美性猛交一区二区三区精品| 能在线看的av| 日本高清+成人网在线观看| 女仆av观看一区| 狠狠干 狠狠操| 91在线云播放| 国产精品100| 亚洲精品一二区| 欧美xx视频| 日本成人看片网址| 日韩精品电影在线观看| 亚洲精品国产精品国自产网站| 色视频一区二区| 2021av在线| 成人精品视频99在线观看免费 | 俄罗斯av网站| 91免费小视频| 高潮无码精品色欲av午夜福利| 伊人久久免费视频| 国产成+人+综合+亚洲欧美| 亚洲自拍的二区三区| 激情伊人五月天久久综合| 2018天天弄| 亚洲国产欧美一区二区三区久久| 嗯啊主人调教在线播放视频 | 91在线直播亚洲| 欧美三级小说| 99久久人妻无码中文字幕系列| 日韩欧美999| 91女主播在线观看| 91久久久久久久一区二区| 一区在线视频| 亚洲专区区免费| 欧美午夜电影在线播放| 嫩草在线视频| 国产91精品入口17c| 亚洲深夜av| 成人信息集中地| 日韩亚洲电影在线| 中文字幕不卡三区视频| 亚洲成人一区二区三区| 国产精品一区二区视频| 国产一区二区三区影院| 丝袜美腿亚洲一区二区| 亚洲国产欧美在线观看| 男人操女人免费软件| 中文字幕在线不卡| 少妇av一区二区| 国产精品一区二区久久国产| 国产一区清纯| 蜜臀久久99精品久久久久久| 日韩一级高清毛片| 欧美色网一区| 亚洲中文字幕无码一区二区三区 | 国内精品在线播放| 久草视频在线观| 久久久黄色av| 国产免费播放一区二区| 免费在线观看日韩av| 欧美视频一区二区在线观看| 91探花在线观看| 亚洲精品美女久久7777777| 成人av在线网站| 国产又粗又长又黄| 欧美一区视频在线| 欧美精品国产一区| 国产黄色片在线| 精品中文字幕久久久久久| 欧美一区在线观看视频| 国产视频一区二区视频| 亚洲高清免费观看|