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

炸!業(yè)界難題,跨庫分頁的幾種常見方案

開發(fā) 開發(fā)工具 前端
互聯(lián)網(wǎng)很多業(yè)務(wù)都有分頁拉取數(shù)據(jù)的需求,這些業(yè)務(wù)場(chǎng)景對(duì)應(yīng)的消息表,訂單表,帖子表分頁拉取需求,都有這樣一些共同的特點(diǎn)。

為什么需要研究跨庫分頁?

互聯(lián)網(wǎng)很多業(yè)務(wù)都有分頁拉取數(shù)據(jù)的需求,例如:

  • 微信消息過多時(shí),拉取第N頁消息;
  • 京東下單過多時(shí),拉取第N頁訂單;
  • 瀏覽58同城,查看第N頁帖子。

[[265204]]

這些業(yè)務(wù)場(chǎng)景對(duì)應(yīng)的消息表,訂單表,帖子表分頁拉取需求,都有這樣一些共同的特點(diǎn):

  • 有個(gè)業(yè)務(wù)主鍵id, msg_id, order_id, tiezi_id;
  • 分頁按照非業(yè)務(wù)主鍵id來排序,業(yè)務(wù)中經(jīng)常按照時(shí)間time來排序order by。

在數(shù)據(jù)量不大時(shí),如何來實(shí)現(xiàn)跨庫分頁的需求呢?

  • 在排序字段time上建立索引;
  • 利用SQL提供的offset/limit就能實(shí)現(xiàn)。

例如:

  1. select * from t_msg order by time offset 200 limit 100; 
  2. select * from t_order order by time offset 200 limit 100;  
  3. select * from t_tiezi order by time offset 200 limit 100; 

畫外音:此處假設(shè)一頁數(shù)據(jù)為100條,均拉取第3頁數(shù)據(jù)。

為什么會(huì)有分庫的需求?

高并發(fā)大流量的互聯(lián)網(wǎng)架構(gòu),一般通過服務(wù)層來訪問數(shù)據(jù)庫,隨著數(shù)據(jù)量的增大,數(shù)據(jù)庫需要進(jìn)行水平切分,分庫后將數(shù)據(jù)分布到不同的數(shù)據(jù)庫實(shí)例(甚至物理機(jī)器)上,以達(dá)到降低數(shù)據(jù)量,增加實(shí)例數(shù)的擴(kuò)容目的。

一旦涉及分庫,逃不開“分庫依據(jù)” patition key,要使用哪一個(gè)字段來水平切分?jǐn)?shù)據(jù)庫呢?

大部分的業(yè)務(wù)場(chǎng)景,會(huì)使用業(yè)務(wù)主鍵id。

確定了分庫依據(jù) patition key 后,接下來怎么確定分庫算法呢?

大部分的業(yè)務(wù)場(chǎng)景,會(huì)使用業(yè)務(wù)主鍵id取模的算法來分庫,這樣的好處是:

  • 即能夠保證每個(gè)庫的數(shù)據(jù)分布是均勻的;
  • 又能夠保證每個(gè)庫的請(qǐng)求分布是均勻的。

實(shí)在是簡單實(shí)現(xiàn)負(fù)載均衡的好方法,此法在互聯(lián)網(wǎng)架構(gòu)中應(yīng)用頗多。

一個(gè)更具體的例子:

用戶庫user,水平切分后變?yōu)閮蓚€(gè)庫:

  • 分庫依據(jù)patition key是uid;
  • 分庫算法是uid取模:uid%2余0的數(shù)據(jù)會(huì)落到db0,uid%2余1的數(shù)據(jù)會(huì)落到db1。

數(shù)據(jù)庫進(jìn)行了水平切分之后,如果業(yè)務(wù)要查詢“最近注冊(cè)的第3頁用戶”,即跨庫分頁查詢,該如何實(shí)現(xiàn)呢?

單庫上,可以:

  1. select * from t_user order by time offset 200 limit 100; 

變成兩個(gè)庫后,分庫依據(jù)是uid,排序依據(jù)是time,數(shù)據(jù)庫層失去了time排序的全局視野,數(shù)據(jù)分布在兩個(gè)庫上,此時(shí)該怎么辦呢?

如何滿足“跨越多個(gè)水平切分?jǐn)?shù)據(jù)庫,且分庫依據(jù)與排序依據(jù)為不同屬性,并需要進(jìn)行分頁”的查詢需求,實(shí)現(xiàn):

  1. select * from T order by time offset X limit Y; 

這類跨庫分頁SQL,是后文將要討論的技術(shù)問題。

方案一:全局視野法

如上圖所述,服務(wù)層通過uid取模將數(shù)據(jù)分布到兩個(gè)庫上去之后,每個(gè)數(shù)據(jù)庫都失去了全局視野,數(shù)據(jù)按照time局部排序之后,不管哪個(gè)分庫的第3頁數(shù)據(jù),都不一定是全局排序的第3頁數(shù)據(jù)。

那到底哪些數(shù)據(jù)才是全局排序的第3頁數(shù)據(jù)呢?

需要分三種情況討論。

(1) 極端情況,兩個(gè)庫的數(shù)據(jù)完全一樣。

 

如果兩個(gè)庫的數(shù)據(jù)完全相同,只需要每個(gè)庫offset一半,再取半頁,就是最終想要的數(shù)據(jù)(如上圖中粉色部分?jǐn)?shù)據(jù))。

(2) 極端情況,結(jié)果數(shù)據(jù)來自一個(gè)庫。

也可能兩個(gè)庫的數(shù)據(jù)分布及其不均衡,例如db0的所有數(shù)據(jù)的time都大于db1的所有數(shù)據(jù)的time,則可能出現(xiàn):一個(gè)庫的第3頁數(shù)據(jù),就是全局排序后的第3頁數(shù)據(jù)(如上圖中粉色部分?jǐn)?shù)據(jù))。

(3)一般情況,每個(gè)庫數(shù)據(jù)各包含一部分。

正常情況下,全局排序的第3頁數(shù)據(jù),每個(gè)庫都會(huì)包含一部分(如上圖中粉色部分?jǐn)?shù)據(jù))。

由于不清楚到底是哪種情況,所以必須:

  • 每個(gè)庫都返回3頁數(shù)據(jù);
  • 所得到的6頁數(shù)據(jù)在服務(wù)層進(jìn)行內(nèi)存排序,得到數(shù)據(jù)全局視野;
  • 再取第3頁數(shù)據(jù),便能夠得到想要的全局分頁數(shù)據(jù)。

再總結(jié)一下這個(gè)方案的步驟:

(1) 將SQL語句改寫,即:

  1. order by time offset X limit Y; 

改寫成:

  1. order by time offset 0 limit X+Y; 

(2)服務(wù)層將改寫后的SQL語句發(fā)往各個(gè)分庫;

(3)假設(shè)共分為N個(gè)庫,服務(wù)層將得到N*(X+Y)條數(shù)據(jù);

(4)服務(wù)層對(duì)得到的N*(X+Y)條數(shù)據(jù)進(jìn)行內(nèi)存排序;

(5)內(nèi)存排序后再取偏移量X后的Y條記錄,就是全局視野所需的一頁數(shù)據(jù)。

全局視野法有什么優(yōu)點(diǎn)?

通過服務(wù)層修改SQL語句,擴(kuò)大數(shù)據(jù)召回量,能夠得到全局視野,業(yè)務(wù)無損,精準(zhǔn)返回所需數(shù)據(jù)。

全局視野法的缺點(diǎn)呢?

缺點(diǎn)顯而易見:

  • 每個(gè)分庫需要返回更多的數(shù)據(jù),增大了網(wǎng)絡(luò)傳輸量(耗網(wǎng)絡(luò));
  • 除了數(shù)據(jù)庫按照time進(jìn)行排序,服務(wù)層還需要進(jìn)行二次排序,增大了服務(wù)層的計(jì)算量(耗CPU);
  • 最致命的,這個(gè)算法隨著頁碼的增大,性能會(huì)急劇下降,這是因?yàn)镾QL改寫后每個(gè)分庫要返回X+Y行數(shù)據(jù):返回第3頁,offset中的X=200;假如要返回第100頁,offset中的X=9900,即每個(gè)分庫要返回100頁數(shù)據(jù),數(shù)據(jù)量和排序量都將大增,性能平方級(jí)下降。

“全局視野法”雖然性能較差,但其業(yè)務(wù)無損,數(shù)據(jù)精準(zhǔn),不失為一種方案,有沒有性能更優(yōu)的方案呢?

“任何脫離業(yè)務(wù)的架構(gòu)設(shè)計(jì)都是耍流氓”,技術(shù)方案需要折衷,在技術(shù)難度較大的情況下,業(yè)務(wù)需求的折衷能夠極大的簡化技術(shù)方案。

方案二:禁止跳頁查詢法

在數(shù)據(jù)量很大,翻頁數(shù)很多的時(shí)候,很多產(chǎn)品并不提供“直接跳到指定頁面”的功能,而只提供“下一頁”的功能,這一個(gè)小小的業(yè)務(wù)折衷,就能極大的降低技術(shù)方案的復(fù)雜度。

如上圖,不能跳頁,那么只能夠查初始頁:

(1)將查詢

  1. order by time offset 0 limit 100; 

改寫成:

  1. order by time where time>0 limit 100; 

(2)上述改寫和offset 0 limit 100的效果相同,都是每個(gè)分庫返回了一頁數(shù)據(jù)(上圖中粉色部分);

(3)服務(wù)層得到2頁數(shù)據(jù),內(nèi)存排序,取出前100條數(shù)據(jù),作為最終的初始頁數(shù)據(jù),一般來說每個(gè)分庫都包含一部分?jǐn)?shù)據(jù)(如上圖粉色部分);

這個(gè)方案也需要服務(wù)器內(nèi)存排序,豈不是和“全局視野法”一樣么?初始數(shù)據(jù)的拉取確實(shí)一樣,但每一次“下一頁”拉取的方案就不一樣了。

點(diǎn)擊“下一頁”時(shí),需要拉取第二頁數(shù)據(jù),在初始頁數(shù)據(jù)的基礎(chǔ)之上,能夠找到初始頁數(shù)據(jù)time值:

這個(gè)上一頁記錄的time_max,會(huì)作為第二頁數(shù)據(jù)拉取的查詢條件:

(1)將查詢

  1. order by time offset 100 limit 100; 

改寫成

  1. order by time where time>$time_max limit 100; 

(2)這下不是返回2頁數(shù)據(jù)了(“全局視野法,會(huì)改寫成offset 0 limit 200”),每個(gè)分庫還是返回一頁數(shù)據(jù)(如上圖中粉色部分);

(3)服務(wù)層得到2頁數(shù)據(jù),內(nèi)存排序,取出前100條數(shù)據(jù),作為最終的第2頁數(shù)據(jù),這個(gè)全局的第2頁數(shù)據(jù),一般來說也是每個(gè)分庫都包含一部分?jǐn)?shù)據(jù)(如上圖粉色部分);

如此往復(fù),查詢?nèi)忠曇暗?00頁數(shù)據(jù)時(shí),不是將查詢條件改寫為:

  1. offset 0 limit 9900+100;(返回100頁數(shù)據(jù)) 

而是改寫為

  1. time>$time_max99 limit 100;(仍返回一頁數(shù)據(jù)) 

以保證數(shù)據(jù)的傳輸量和排序的數(shù)據(jù)量不會(huì)隨著不斷翻頁而導(dǎo)致性能下降。

方案三:允許數(shù)據(jù)精度損失法

“全局視野法”能夠返回業(yè)務(wù)無損的精確數(shù)據(jù),在查詢頁數(shù)較大,例如第100頁時(shí),會(huì)有性能問題,此時(shí)業(yè)務(wù)上是否能夠接受,返回的100頁不是精準(zhǔn)的數(shù)據(jù),而允許有一些數(shù)據(jù)偏差呢?

先來了解一下,數(shù)據(jù)庫分庫-數(shù)據(jù)均衡原理。

什么是,數(shù)據(jù)庫分庫-數(shù)據(jù)均衡原理?

使用patition key進(jìn)行分庫,在數(shù)據(jù)量較大,數(shù)據(jù)分布足夠隨機(jī)的情況下,各分庫所有非patition key屬性,在各個(gè)分庫上,數(shù)據(jù)分布的統(tǒng)計(jì)概率情況是一致的。

例如,在uid隨機(jī)的情況下,使用uid取模分兩庫,db0和db1:

  • 性別屬性,如果db0庫上的男性用戶占比70%,則db1上男性用戶占比也應(yīng)為70%;
  • 年齡屬性,如果db0庫上18-28歲少女用戶比例占比15%,則db1上少女用戶比例也應(yīng)為15%;
  • 時(shí)間屬性,如果db0庫上每天10:00之前登錄的用戶占比為20%,則db1上應(yīng)該是相同的統(tǒng)計(jì)規(guī)律;

利用這一原理,要查詢?nèi)?00頁數(shù)據(jù),只要將:

  1. offset 9900 limit 100; 

改寫為

  1. offset 4950 limit 50; 

即每個(gè)分庫偏移一半(4950),獲取半頁數(shù)據(jù)(50條),得到的數(shù)據(jù)集的并集,基本能夠認(rèn)為,是全局?jǐn)?shù)據(jù)的offset 9900 limit 100的數(shù)據(jù),當(dāng)然,這一頁數(shù)據(jù)并不是精準(zhǔn)的。

根據(jù)實(shí)際業(yè)務(wù)經(jīng)驗(yàn),用戶都要查詢第100頁網(wǎng)頁、帖子、郵件的數(shù)據(jù)了,這一頁數(shù)據(jù)的精準(zhǔn)性損失,業(yè)務(wù)上往往是可以接受的,但此時(shí)技術(shù)方案的復(fù)雜度大大降低了,既不需要返回更多的數(shù)據(jù),也不需要進(jìn)行服務(wù)內(nèi)存排序了。

畫外音:如果業(yè)務(wù)能夠接受,這種方案的性能不錯(cuò),強(qiáng)烈推薦。

方案四:二次查詢法

有沒有一種技術(shù)方案,即能夠滿足業(yè)務(wù)的精確需要,無需業(yè)務(wù)折衷,又高性能的方法呢?這就是接下來要介紹的武器,“二次查詢法”。

為了方便舉例,假設(shè)一頁只有5條數(shù)據(jù),查詢第200頁的SQL語句為:

  1. select * from T order by time offset 1000 limit 5; 

步驟一:查詢改寫

  1. select * from T order by time offset 1000 limit 5; 

改寫為:

  1. select * from T order by time offset 500 limit 5; 

并投遞給所有的分庫,注意,這個(gè)offset的500,來自于全局offset的總偏移量1000,除以水平切分?jǐn)?shù)據(jù)庫個(gè)數(shù)2。

畫外音:因?yàn)閿?shù)據(jù)量比較大,數(shù)據(jù)隨機(jī)性較強(qiáng),不妨設(shè)仍然符合“數(shù)據(jù)庫分庫-數(shù)據(jù)均衡定理”。

如果是3個(gè)分庫,則可以改寫為:

  1. select * from T order by time offset 333 limit 5; 

假設(shè)這三個(gè)分庫返回的數(shù)據(jù)(time, uid)如下:

可以看到,每個(gè)分庫都是返回的按照time排序的一頁數(shù)據(jù)。

步驟二:找到所返回3頁全部數(shù)據(jù)的最小值

  • 5條數(shù)據(jù)的time最小值是1487501123;
  • 第二個(gè)庫,5條數(shù)據(jù)的time最小值是1487501133;
  • 第三個(gè)庫,5條數(shù)據(jù)的time最小值是1487501143;

故,三頁數(shù)據(jù)中,time最小值來自庫一,time_min=1487501123,這個(gè)過程只需要比較各個(gè)分庫的初始數(shù)據(jù),時(shí)間復(fù)雜度很低。

畫外音:這個(gè)time_min非常重要,后文每一個(gè)步驟要都要用到time_min。

步驟三:查詢二次改寫

改寫的SQL語句是

  1. elect * from T order by time offset 333 limit 5; 

第二次要改寫成一個(gè)between語句:

  • between的起點(diǎn)是time_min
  • between的終點(diǎn)是原來每個(gè)分庫各自返回?cái)?shù)據(jù)的值

分庫,返回?cái)?shù)據(jù)的值是1487501523

所以查詢改寫為:

  1. select * from T order by time where time between time_min and 1487501523; 

第二個(gè)分庫,返回?cái)?shù)據(jù)的值是1487501323

所以查詢改寫為

  1. select * from T order by time where time between time_min and 1487501323; 

第三個(gè)分庫,返回?cái)?shù)據(jù)的值是1487501553

所以查詢改寫為

  1. select * from T order by time where time between time_min and 1487501553; 

相對(duì)初始查詢,第二次查詢條件放寬了,故第二次查詢會(huì)返回比初始查詢結(jié)果集更多的數(shù)據(jù),假設(shè)這三個(gè)分庫返回的數(shù)據(jù)(time, uid)如下:

可以看到:

  • 分庫一的結(jié)果集,由于time_min來自原來的分庫一,所以分庫一的返回結(jié)果集和初始查詢相同(所以其實(shí)這次訪問是可以省略的);
  • 分庫二的結(jié)果集,比初始多返回了1條數(shù)據(jù),頭部的1條記錄(time最小的記錄)是新的(上圖中粉色記錄);
  • 分庫三的結(jié)果集,比初始多返回了2條數(shù)據(jù),頭部的2條記錄(time最小的2條記錄)是新的(上圖中粉色記錄);

步驟四:在每個(gè)結(jié)果集中虛擬一個(gè)time_min記錄,找到time_min在全局的offset

在初始庫中,time_min在庫里的offset是333;

在第二個(gè)庫中,(1487501133, uid_aa)的offset是333(根據(jù)初始查詢條件得出的),故虛擬time_min在第二個(gè)庫的offset是331;

畫外音:從333往前推演。

在第三個(gè)庫中,(1487501143, uid_aaa)的offset是333(根據(jù)初始查詢條件得出的),故虛擬time_min在第三個(gè)庫的offset是330;

畫外音:從333往前推演。

綜上,time_min在全局的offset是333+331+330=994。

步驟五:既然得到了time_min在全局的offset,就相當(dāng)于有了全局視野,根據(jù)第二次的結(jié)果集,就能夠得到全局offset 1000 limit 5的記錄

第二次查詢?cè)诟鱾€(gè)分庫返回的結(jié)果集是有序的,又知道了time_min在全局的offset是994,一路排下來,容易知道全局offset 1000 limit 5的一頁記錄(上圖中記錄)。

這種方法的優(yōu)點(diǎn)是:可以精確的返回業(yè)務(wù)所需數(shù)據(jù),每次返回的數(shù)據(jù)量都非常小,不會(huì)隨著翻頁增加數(shù)據(jù)的返回量。

帥氣不帥氣!!!

總結(jié)

今天介紹了解決“跨N庫分頁”這一難題的四種方法:

方法一:全局視野法

(1)SQL改寫,將

  1. order by time offset X limit Y; 

改寫成

  1. order by time offset 0 limit X+Y; 

(2)服務(wù)層對(duì)得到的N*(X+Y)條數(shù)據(jù)進(jìn)行內(nèi)存排序,內(nèi)存排序后再取偏移量X后的Y條記錄;

這種方法隨著翻頁的進(jìn)行,性能越來越低。

方法二:禁止跳頁查詢法

(1)用正常的方法取得初始頁數(shù)據(jù),并得到初始記錄的time_max;

(2)每次翻頁,將

  1. order by time offset X limit Y; 

改寫成

  1. order by time where time>$time_max limit Y; 

以保證每次只返回一頁數(shù)據(jù),性能為常量。

方法三:允許模糊數(shù)據(jù)法

(1)SQL查詢改寫,將

  1. order by time offset X limit Y; 

改寫成

  1. order by time offset X/N limit Y/N; 

性能很高,但拼接的結(jié)果集不精準(zhǔn)。

方法四:二次查詢法

(1)SQL改寫,將

  1. order by time offset X limit Y; 

改寫成

  1. order by time offset X/N limit Y; 

(2)多頁返回,找到最小值time_min;

(3)between二次查詢

  1. order by time between $time_min and $time_i_max; 

(4)設(shè)置虛擬time_min,找到time_min在各個(gè)分庫的offset,從而得到time_min在全局的offset;

(5)得到了time_min在全局的offset,自然得到了全局的offset X limit Y;

文章比較長,希望大家有收獲。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-02-28 14:28:37

數(shù)據(jù)跨庫分頁架構(gòu)

2023-05-06 15:32:04

2018-11-07 09:01:13

Tomcat部署方式

2011-08-05 13:29:04

分頁

2021-02-03 12:47:09

Spring Boot應(yīng)用監(jiān)控

2010-01-12 09:37:48

VB.NET調(diào)用IE

2021-01-14 16:14:06

Python爬蟲代碼

2025-04-27 02:22:00

分頁項(xiàng)目開發(fā)

2009-12-04 12:31:24

2022-05-23 11:35:16

jiekou冪等性

2022-01-04 06:50:12

數(shù)據(jù)摘要方法

2025-05-27 03:22:00

分布式ID部署

2010-07-28 09:35:23

Flex加載圖片

2010-01-14 16:48:29

交換機(jī)故障

2018-10-10 10:23:53

數(shù)據(jù)庫RedisNoSQL

2020-08-23 11:52:10

Docker容器技術(shù)

2010-08-24 09:43:33

2010-03-31 16:28:11

Oracle數(shù)據(jù)庫

2010-09-07 09:33:20

2020-06-09 08:11:33

MESI協(xié)議MM
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

一区二区三区 日韩| 国产一区香蕉久久| 黄色正能量网站| 向日葵视频成人app网址| 国产精品日日摸夜夜摸av| 成人免费午夜电影| 日韩黄色精品视频| 国产精品密蕾丝视频下载| 欧美精品1区2区| 国产高清av在线播放| 大片免费播放在线视频| 国产成人午夜高潮毛片| 欧美性受xxxx黑人猛交| 午夜国产小视频| 欧美精品国产白浆久久久久| 欧美日韩一区二区欧美激情| www.国产在线播放| av午夜在线| 成人激情午夜影院| 国产啪精品视频| 国产一级做a爱片久久毛片a| 久久精品亚洲人成影院| 亚洲人成网站999久久久综合| 亚洲精品视频三区| 无码小电影在线观看网站免费| 中文字幕一区二区三区在线观看 | 日韩av高清在线看片| 成人性生交大片免费看午夜 | 欧美日韩卡一卡二| 男女视频网站在线观看| 黄色视屏免费在线观看| 欧美肉体xxxx裸体137大胆| 56国语精品自产拍在线观看| 国产乱子夫妻xx黑人xyx真爽| 污视频网站在线免费| 国产精品高清亚洲| 日本一区二区三区免费看| 成人午夜免费在线观看| 国产一区二区日韩精品| 国产精品三级网站| 波多野结衣爱爱| 免费日韩精品中文字幕视频在线| 久久久久久久久久久免费| 欧美激情精品久久| 亚洲最新色图| 久久亚洲精品一区| 亚洲少妇xxx| 久久中文字幕av| 中文字幕精品一区二区精品| 色噜噜日韩精品欧美一区二区| 日韩精品欧美大片| 亚洲国产精品久久久久秋霞不卡| 国产a√精品区二区三区四区| 久久视频社区| 日韩免费一区二区三区在线播放| 99日在线视频| 国产欧美88| 日韩美女主播在线视频一区二区三区| 激情小说欧美色图| 91麻豆精品国产91久久久久推荐资源| 日韩精品一区二区三区在线播放 | 中文字幕一区二区三区四区欧美| 亚洲免费高清| 欧美一二三视频| 日本天堂网在线| 久久午夜精品一区二区| 日韩美女激情视频| 波多野结衣在线电影| 免费精品视频在线| 91精品国产综合久久久久久久久| 国产精品丝袜黑色高跟鞋| 国产精品自产自拍| 懂色一区二区三区av片| 天天综合天天色| 久久精品免视看| 一区二区冒白浆视频| 国产美女在线观看| 亚洲动漫第一页| 黑人糟蹋人妻hd中文字幕| 在线成人av观看| 欧美美女网站色| wwwxxxx在线观看| 鲁大师精品99久久久| 国产午夜精品一区理论片飘花| 免费视频91蜜桃| 欧美日韩岛国| 青草青草久热精品视频在线网站| 在线观看你懂的网站| 国产在线观看一区二区| 精品国产乱码久久久久久108| 黄色的视频在线免费观看| 国产精品每日更新在线播放网址 | 青青青草视频在线| 狠狠躁夜夜躁人人躁婷婷91| 午夜免费福利在线| 欧洲精品99毛片免费高清观看| 亚洲国产三级网| 亚洲精品天堂网| 日韩视频在线一区二区三区 | 一本色道久久综合亚洲| 国产传媒一区在线| 欧洲在线视频一区| 青春草视频在线| 在线免费观看日韩欧美| 国产男女无遮挡猛进猛出| 婷婷综合一区| 久久成人在线视频| 日韩精品久久久久久免费| 国产成人午夜99999| 色狠狠久久av五月综合|| 神马午夜伦理不卡| 精品视频1区2区3区| 日本xxxx裸体xxxx| 欧美在线免费| 国产精品美女在线| 亚洲色图另类小说| 一区二区三区在线观看国产| 午夜激情在线观看视频| 噜噜噜狠狠夜夜躁精品仙踪林| 久久伊人精品视频| 中文字幕在线天堂| 不卡的电视剧免费网站有什么| 一区不卡字幕| 国产国产一区| 亚洲天堂av电影| 亚欧视频在线观看| 成人永久aaa| 色乱码一区二区三区熟女 | 亚洲精品一级| 亚洲一区二区在线| 日本在线观看| 欧美色综合天天久久综合精品| 右手影院亚洲欧美| 亚洲精选久久| 国产99在线免费| 在线看福利影| 日韩精品影音先锋| 欧美精品一级片| 国产美女娇喘av呻吟久久| 亚洲国产高清国产精品| 欧美一级大片| 亚洲美女中文字幕| 性无码专区无码| 91在线视频播放| jizzjizz国产精品喷水| 另类ts人妖一区二区三区| 久久久久久亚洲精品| 超碰人人人人人人| 一区二区久久久久| 国产无套精品一区二区三区| 中文字幕免费一区二区| 91精品视频在线看| 免费黄色在线看| 777久久久精品| 欧美国产日韩在线观看成人| 国产一区二区三区观看| 丰满人妻一区二区三区53号| 日本在线视频一区二区三区| 欧美大尺度激情区在线播放| av小说天堂网| 亚洲午夜激情av| 精品人妻一区二区三区香蕉| 国产欧美成人| 欧美日本韩国在线| 秋霞国产精品| 久久久精品国产一区二区| 日本一级片免费| 国产原创一区二区三区| 中文字幕人妻熟女人妻洋洋| 精品少妇一区| 日韩女优人人人人射在线视频| 福利片在线观看| 欧美丰满美乳xxx高潮www| 欧美成人aaa片一区国产精品| 成人免费福利片| 91传媒久久久| 欧美成人自拍| 国产精品中出一区二区三区| 小h片在线观看| 中文字幕日韩欧美在线| 国产丰满美女做爰| 精品久久久一区| 在线观看免费黄色网址| 国产盗摄一区二区三区| 成人观看免费完整观看| 香蕉精品视频在线观看| 国产欧美韩日| 成人国产在线| 久久露脸国产精品| 最新97超碰在线| 精品久久久久久亚洲综合网| 日批视频免费在线观看| 亚洲精品欧美综合四区| 国产国语性生话播放| 久久精品国产亚洲高清剧情介绍| 乱熟女高潮一区二区在线| 精品一区在线| www.av一区视频| 日韩天堂在线| 久久久久久国产三级电影| freemovies性欧美| 欧美一区二区精品| 五月婷婷激情视频| 一二三四区精品视频| 韩国女同性做爰三级| 国产乱码精品一区二区三区av | 秋霞午夜av一区二区三区| 精品久久久无码人妻字幂| 欧美美女视频| 国产激情美女久久久久久吹潮| 99欧美精品| 欧美一性一乱一交一视频| 亚洲精品白浆| 色爱精品视频一区| 欧美孕妇性xxxⅹ精品hd| 日韩视频一区在线观看| 亚洲 国产 日韩 欧美| 精品国产福利视频| 欧美日韩精品在线观看视频| 国产精品欧美久久久久无广告 | 三级在线视频观看| 国产欧美日韩亚洲一区二区三区| 黄瓜视频免费观看在线观看www | 巨大黑人极品videos精品| 97免费在线视频| 搞黄网站在线看| 久久福利视频导航| 日本天堂在线观看| 一区二区欧美激情| 黄色av免费在线看| 日韩精品视频在线观看网址| 丰满少妇被猛烈进入| 日韩午夜电影av| a天堂视频在线| 91精品啪在线观看国产60岁| 中文字幕免费播放| 日本高清不卡在线观看| 成人免费毛片视频| 欧美性猛交xxxx偷拍洗澡| 色播视频在线播放| 亚洲aaa精品| 国产精品第一页在线观看| 亚洲综合一区二区三区| 国产一级特黄毛片| 亚洲综合一区二区| 国产一二三四在线| 亚洲第一在线综合网站| 久久9999久久免费精品国产| 亚洲一区二区在线免费观看视频| 精品99在线观看| 亚洲综合色视频| 国产无遮挡aaa片爽爽| 黄色成人av网| 黄色片中文字幕| 在线观看精品一区| 91在线精品入口| 91精品国产综合久久久蜜臀粉嫩 | 在线观看精品视频| 婷婷另类小说| 今天免费高清在线观看国语| 欧美日韩一区二区国产| 黄色激情在线视频| 国产精品试看| 亚洲精品高清无码视频| 久久99精品国产91久久来源| 国产成人av免费观看| av网站一区二区三区| 国产全是老熟女太爽了| 久久久精品免费网站| 人人干人人干人人| 欧美aaaaa成人免费观看视频| 粉色视频免费看| 国产宾馆实践打屁股91| 一本色道综合久久欧美日韩精品| 久久久久久夜精品精品免费| 在线观看免费黄色网址| 亚洲伦理在线精品| 日韩女同强女同hd| 日本韩国一区二区三区| 国产三级自拍视频| 亚洲国产精品va在线观看黑人| 欧美亚洲日本| 精品国产一区av| av手机免费在线观看| 国产成人aa精品一区在线播放 | 97香蕉久久超级碰碰高清版| 日本在线啊啊| 国产在线拍揄自揄视频不卡99| 亚洲一区二区三区日本久久九| 国产区一区二区三区| 国产欧美久久一区二区三区| 久久免费一级片| 日日摸夜夜添夜夜添亚洲女人| 国产免费中文字幕| 91在线观看免费视频| 国产精品国产三级国产传播| 亚洲成人av电影在线| 无码久久精品国产亚洲av影片| 日韩欧美成人激情| av在线电影免费观看| 久久久久久午夜| 四虎精品一区二区免费| 含羞草久久爱69一区| 99视频精品视频高清免费| 欧美深夜福利视频| 精品在线播放午夜| 国产中年熟女高潮大集合| 一区二区三区四区亚洲| 中文文字幕一区二区三三| 亚洲国产精品成人一区二区| 老司机在线视频二区| 国产成人极品视频| 国产精品白浆| 伊人久久在线观看| 蜜臀久久99精品久久久久久9| 欧美无人区码suv| 亚洲欧美激情视频在线观看一区二区三区 | 天堂av在线免费| 久久视频在线免费观看| se01亚洲视频| 女同一区二区| 日韩亚洲国产精品| 亚洲一区和二区| 亚洲男人的天堂在线aⅴ视频| 中文字幕人妻精品一区| 亚洲男人第一网站| 亚洲插插视频| 国产精品久久国产精品| 中国成人一区| aaa一级黄色片| 国产精品毛片高清在线完整版 | 男人的天堂亚洲一区| 瑟瑟视频在线观看| 欧美日韩一区二区免费在线观看 | 国产一线二线三线女| 国产精品一区二区三区四区| 黑人操日本美女| 91精品国产麻豆| av中文字幕在线观看| 91在线视频一区| 欧美伊人影院| 国产精久久久久| 亚洲一区二区成人在线观看| 亚洲爱情岛论坛永久| 欧美激情在线观看视频| 中文字幕日韩在线| 日韩精品久久一区二区| 大桥未久av一区二区三区中文| 欧美精品一级片| 亚洲成人精品av| 伊人久久综合一区二区| 欧美日韩一区二区三区在线视频| 久久精品导航| 少妇av片在线观看| 777亚洲妇女| 欧美xxxx黑人又粗又长| 国产一区二区自拍| 另类图片国产| 性の欲びの女javhd| 欧美日韩国产电影| 在线观看的网站你懂的| 国产视频一区二区三区四区| 国产毛片一区| 日本欧美一区二区三区不卡视频| 欧美日韩在线免费视频| 免费黄网站在线播放| www.成人三级视频| 亚洲欧美日韩专区| 长河落日免费高清观看| 欧美一级xxx| 香蕉伊大人中文在线观看| 亚洲精品成人a8198a| 国产在线国偷精品产拍免费yy | 国产欧美一级| 久久日免费视频| 日韩一卡二卡三卡国产欧美| 欧美久久天堂| 亚洲欧美国产一区二区| 国产精品一区二区x88av| 国产一级做a爱片久久毛片a| 中日韩午夜理伦电影免费| 激情五月综合婷婷| 自慰无码一区二区三区| 国产精品蜜臀在线观看| av观看在线免费| 国产97色在线|日韩| 天天综合一区| 成人网站免费观看| 欧美久久久久中文字幕| heyzo高清在线| 亚洲欧美久久234| 不卡av在线免费观看| 一区二区视频网站| 97在线视频一区| 国产精品99视频| 日韩av在线看免费观看| 日韩欧美一级精品久久| 99亚洲伊人久久精品影院| 黄色一级视频片| 亚洲精品国产一区二区精华液|