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

從分庫分表后遺癥,總結數據庫表拆分策略

數據庫
本文將主要從背景、分庫分表帶來的后遺癥、分表策略以及一些注意事項等方面對數據庫分表來進行小結。

從分庫分表后遺癥,總結數據庫表拆分策略

本文將主要從背景、分庫分表帶來的后遺癥、分表策略以及一些注意事項等方面對數據庫分表來進行小結。

一、背景

最近一段時間內結束了數據庫表拆分項目,本次拆分主要包括訂單和優惠券兩大塊,這兩塊都是覆蓋全集團所有分子公司所有業務線。隨著公司的業務飛速發展,不管是存儲的要求,還是寫入、讀取的性能都基本上到了警戒水位。

訂單是交易的核心,優惠券是營銷的核心,這兩塊基本上是整個平臺的正向最核心部分。為了支持未來三到五年的快速發展,我們需要對數據進行拆分。

數據庫表拆分業內已經有很多成熟方案,已經不是什么高深的技術,基本上是純工程化的流程,但是能有機會進行實際的操刀一把,機會還是難得,所以非常有必要做個總結。

由于分庫分表包含的技術選型和方式方法多種多樣,這篇文章不是羅列和匯總介紹各種方法,而是總結我們在實施分庫分表過程中的一些經驗。

根據業務場景判斷,我們主要是做水平拆分,做邏輯DB拆分,考慮到未來數據庫寫入瓶頸可以將一組Sharding表直接遷移進分庫中。

二、分庫、分表帶來的后遺癥

分庫、分表會帶來很多的后遺癥,會使整個系統架構變的復雜。分的好與不好最關鍵就是如何尋找那個Sharding key,如果這個Sharding key剛好是業務維度上的分界線就會直接提升性能和改善復雜度,否則就會有各種腳手架來支撐,系統也就會變得復雜。

比如訂單系統中的用戶__ID__、訂單__type__、商家__ID__、渠道__ID__,優惠券系統中的批次__ID__、渠道__ID__、機構__ID__ 等,這些都是潛在的Sharding key。

如果剛好有這么一個Sharding key存在后面處理路由(routing)就會很方便,否則就需要一些大而全的索引表來處理OLAP的查詢。

一旦Sharding之后首先要面對的問題就是查詢時排序分頁問題。

1、歸并排序

原來在一個數據庫表中處理排序分頁是比較方便的,Sharding之后就會存在多個數據源,這里我們將多個數據源統稱為分片。

想要實現多分片排序分頁就需要將各個片的數據都匯集起來進行排序,就需要用到歸并排序算法。這些數據在各個分片中可以做到有序的(輸出有序),但是整體上是無序的。

我們看個簡單的例子:

 

  1. shard node 1: {1、3、5、7、9}  
  2. shard node 2: {2、4、6、8、10} 

 

這是做奇偶Sharding 的兩個分片,我們假設分頁參數設置為每頁4條,當前第1頁,參數如下:

 

  1. pageParameter:pageSize:4、currentPage:1 

最樂觀情況下我們需要分別讀取兩個分片節點中的前兩條:

 

  1. shard node 1: {1、3}  
  2. shard node 2: {2、4} 

 

排序完剛好是{1、2、3、4},但是這種場景基本上不太可能出現,假設如下分片節點數據:

 

  1. shard node 1: {7、9、11、13、15}  
  2. shard node 2: {2、4、6、8、10、12、14} 

 

我們還是按照讀取每個節點前兩條肯定是錯誤的,因為最悲觀情況下(也是最真實的情況)就是排序完后所有的數據都來自一個分片。所以我們需要讀取每個節點的pageSize大小的數據出來才有可能保證數據的正確性。

這個例子只是假設我們的查詢條件輸出的數據剛好是均等的,真實的情況一定是各種各樣的查詢條件篩選出來的數據集合,此時這個數據一定不是這樣的排列方式,最真實的就是***者這種結構。

我們以此類推,如果我們的currentPage:1000,那么會出現什么問題?我們需要每個Sharding node讀取 __4000(1000*4=4000)__ 條數據出來排序,因為最悲觀情況下有可能所有的數據均來自一個Sharding node 。

這樣***制的翻頁下去,處理排序分頁的機器肯定會內存撐爆,就算不撐爆一定會觸發性能瓶頸。

這個簡單的例子用來說明分片之后,排序分頁帶來的現實問題,這也有助于我們理解分布式系統在做多節點排序分頁時為什么有***分頁限制。

2、深分頁性能問題

面對這種問題,我們需要改變查詢條件重新分頁。一個龐大的數據集會通過多種方式進行數據拆分,按機構、按時間、按渠道等等,拆分在不同的數據源中。一般的深分頁問題我們可以通過改變查詢條件來平滑解決,但是這種方案并不能解決所有的業務場景。

比如,我們有一個訂單列表,從C端用戶來查詢自己的訂單列表數據量不會很大,但是運營后臺系統可能面對全平臺的所有訂單數據量,所以數據量會很大。

改變查詢條件有兩種:

  • ***種條件是顯示設置,盡量縮小查詢范圍,這種設置一般都會優先考慮如時間范圍、支付狀態、配送狀態等等,通過多個疊加條件就可以橫豎過濾出很小一部分數據集;
  • 第二種條件為隱式設置,比如訂單列表通常是按照訂單創建時間來排序,那么當翻頁到限制的條件時,我們可以改變這個時間。

 

  1. Sharding node 1:orderID     createDateTime  
  2. 100000      2018-01-10 10:10:10  
  3. 200000      2018-01-10 10:10:11  
  4. 300000      2018-01-10 10:10:12  
  5. 400000      2018-01-10 10:10:13  
  6. 500000      2018-01-20 10:10:10  
  7. 600000      2018-01-20 10:10:11  
  8. 700000      2018-01-20 10:10:12  
  9. Sharding node 2:orderID     createDateTime  
  10. 110000      2018-01-11 10:10:10  
  11. 220000      2018-01-11 10:10:11  
  12. 320000      2018-01-11 10:10:12  
  13. 420000      2018-01-11 10:10:13  
  14. 520000      2018-01-21 10:10:10  
  15. 620000      2018-01-21 10:10:11  
  16. 720000      2018-01-21 10:10:12 

 

我們假設上面是一個訂單列表,orderID訂單號大家就不要在意順序性了。因為Sharding之后所有的orderID都會由發號器統一發放,多個集群多個消費者同時獲取,但是創建訂單的速度是不一樣的,所以順序性已經不存在了。

上面的兩個Sharding node基本上訂單號是交叉的,如果按照時間排序node 1和node 2是要交替獲取數據。

比如我們的查詢條件和分頁參數:

 

  1. where createDateTime>'2018-01-11 00:00:00'  
  2. pageParameter:pageSize:5、currentPage:1 

 

獲取的結果集為:

 

  1. orderID     createDateTime  
  2. 100000      2018-01-10 10:10:10  
  3. 200000      2018-01-10 10:10:11  
  4. 300000      2018-01-10 10:10:12  
  5. 400000      2018-01-10 10:10:13  
  6. 110000      2018-01-11 10:10:10 

 

前面4條記錄來自node 1后面1條數據來自node 2 ,整個排序集合為:

 

  1. Sharding node 1:orderID     createDateTime  
  2. 100000      2018-01-10 10:10:10  
  3. 200000      2018-01-10 10:10:11  
  4. 300000      2018-01-10 10:10:12  
  5. 400000      2018-01-10 10:10:13  
  6. 500000      2018-01-20 10:10:10  
  7.  
  8. Sharding node 2:orderID     createDateTime  
  9. 110000      2018-01-11 10:10:10  
  10. 220000      2018-01-11 10:10:11  
  11. 320000      2018-01-11 10:10:12  
  12. 420000      2018-01-11 10:10:13  
  13. 520000      2018-01-21 10:10:10 

 

按照這樣一直翻頁下去每翻頁一次就需要在node 1 、node 2多獲取5條數據。這里我們可以通過修改查詢條件來讓整個翻頁變為重新查詢。

 

  1. where createDateTime>'2018-01-11 10:10:13' 

因為我們可以確定在‘2018-01-11 10:10:13’時間之前所有的數據都已經查詢過,但是為什么時間不是從‘2018-01-21 10:10:10’開始,因為我們要考慮并發情況,在1s內會有多個訂單進來。

這種方式是實現最簡單,不需要借助外部的計算來支撐。這種方式有一個問題就是要想重新計算分頁的時候不丟失數據就需要保留原來一條數據,這樣才能知道開始的時間在哪里,這樣就會在下次的分頁中看到這條時間。但是從真實的深分頁場景來看也可以忽略,因為很少有人會一頁一頁一直到翻到500頁,而是直接跳到***幾頁,這個時候就不存在那個問題。

如果非要精準控制這個偏差就需要記住區間,或者用其他方式來實現了,比如全量查詢表、Sharding索引表、***下單tps值之類的,用來輔助計算。(可以利用數據同步中間件建立單表多級索引、多表多維度索引來輔助計算。我們使用到的數據同步中間件有datax、yugong、otter、canal可以解決全量、增量同步問題)。

三、分表策略

分表有多種方式,mod、rang、preSharding、自定義路由,每種方式都有一定的側重。

我們主要使用mod + preSharding的方式,這種方式帶來的***的一個問題就是后期的節點變動數據遷移問題,可以通過參考一致性Hash算法的虛擬節點來解決。

數據表拆分和Cache Sharding有一些區別,cache能接受cache miss ,通過被動緩存的方式可以維護起cache數據。但是數據庫不存在select miss這種場景。

在Cache Sharding場景下一致性Hash可以用來消除減少、增加Sharding node時相鄰分片壓力問題。但是數據庫一旦出現數據遷移,一定是不能接受數據查詢不出來的。所以我們為了將來數據的平滑遷移,做了一個虛擬節點 + 真實節點mapping 。

 

  1. physics node : node 1 node 2 node 3 node 4  
  2. virtual node : node 1 node 2 node 3.....node 20  
  3. node mapping :  
  4. virtual node 1 ~ node 5 {physics node 1}  
  5. virtual node 6 ~ node 10 {physics node 2}  
  6. virtual node 11 ~ node 15 {physics node 3}  
  7. virtual node 16 ~ node 20 {physics node 4} 

 

為了減少將來遷移數據時rehash的成本和延遲的開銷,將Hash后的值保存在表里,將來遷移直接查詢出來快速導入。

Hash片2的次方問題

在我們熟悉的HashMap里,為了減少沖突和提供一定的性能將Hash桶的大小設置成2的n次方,然后采用Hash&(legnth-1)位與的方式計算,這樣主要是大師們發現2的n次方的二進制除了高位是0之外所有地位都是1,通過位與可以快速反轉二進制然后地位加1就是最終的值。

我們在做數據庫Sharding的時候不需要參考這一原則,這一原則主要是為了程序內部Hash表使用,外部我們本來就是要Hash mod確定Sharding node 。

通過mod取模的方式會出現不均勻問題,在此基礎上可以做個自定義奇偶路由,這樣可以均勻兩邊的數據。

四、一些注意事項

1、在現有項目中集成Sharding-JDBC有一些小問題,Sharding-JDBC不支持批量插入,如果項目中已經使用了大量的批量插入語句就需要改造,或者使用輔助hash計算物理表名,再批量插入。

2、原有項目數據層使用Druid + MyBatis,集成了Sharding-JDBC之后Sharding-JDBC包裝了Druid ,所以一些Sharding-JDBC不支持的SQL語句基本就過不去了。

3、使用Springboot集成Sharding-JDBC的時候,在bean加載的時候我需要設置 IncrementIdGenerator ,但是出現classloader問題。I

  1. IncrementIdGenerator incrementIdGenerator = this.getIncrementIdGenerator(dataSource); 
  2.  
  3. ShardingRule ShardingRule = ShardingRuleConfiguration.build(dataSourceMap); 
  4.  
  5. ((IdGenerator) ShardingRule.getDefaultKeyGenerator()).setIncrementIdGenerator(incrementIdGenerator); 
  6.  
  7. private IncrementIdGenerator getIncrementIdGenerator(DataSource druidDataSource) { 
  8.  
  9. ... 
  10.  
  11.     } 

 

后來發現Springboot的類加載器使用的是restartclassloader,所以導致轉換一直失敗。只要去掉spring-boot-devtools package即可,restartclassloader是為了熱啟動。

4、dao.xml逆向工程問題,我們使用的很多數據庫表MyBatis生成工具生成的時候都是物理表名,一旦我們使用了Sharding-JDCB之后都是用的邏輯表名,所以生成工具需要提供選項來設置邏輯表名。

5、為MyBatis提供的SqlSessionFactory需要在Druid的基礎上用Sharding-JDCB包裝下。

6、Sharding-JDBC DefaultkeyGenerator默認采用是snowflake算法,但是我們不能直接用我們需要根據datacenterid-workerid自己配合Zookeeper來設置 workerId 段。

(snowflake workId 10 bit 十進制 1023,dataCenterId 5 bit 十進制 31 、WorkId 5 bit 十進制 31)

7、由于我們使用的是mysql com.mysql.jdbc.ReplicationDriver自帶的實現讀寫分離,所以處理讀寫分離會方便很多。如果不是使用的這種就需要手動設置Datasource Hint來處理。

8、在使用MyBatis dao mapper的時候需要多份邏輯表,因為有些數據源數據表是不需要走Sharding的,自定義ShardingStragety來處理分支邏輯。

9、全局ID幾種方法:

  • 如果使用 Zookeeper來做分布式ID,就要注意session expired可能會存在重復workid問題,加鎖或者接受一定程度的并行(有序列號保證一段時間空間)。
  • 采用集中發號器服務,在主DB中采用預生成表+incrment 插件(經典取號器實現,InnoDB存儲引擎中的TRX_SYS_TRX_ID_STORE 事務號也是這種方式)。
  • 定長發號器、業務規則發號器,這種需要業務上下文的發號器實現都需要預先配置,然后每次請求帶上獲取上下文來說明獲取業務類型。

 

10、在項目中有些地方使用了自增ID排序,數據表拆分之后就需要進行改造,因為ID大小順序已經不存在了。根據數據的***排序時使用了ID排序需要改造成用時間字段排序。 

責任編輯:龐桂玉 來源: DBAplus社群
相關推薦

2024-08-02 15:47:28

數據庫分庫分表

2023-11-03 14:50:14

2019-01-16 14:00:54

數據庫分庫分表

2011-12-31 10:19:36

2009-03-05 09:28:00

VPN連接Vista系統局域網

2017-07-19 15:19:19

數據庫DB分庫實施策略

2022-06-15 07:32:24

數據庫分庫分表

2019-03-06 14:42:01

數據庫分庫分表

2021-04-01 05:40:53

分庫分表數據庫MySQL

2022-12-05 07:51:24

數據庫分庫分表讀寫分離

2018-06-01 14:00:00

數據庫MySQL分庫分表

2011-09-29 17:13:08

通信展2011通信展

2016-08-12 10:28:14

云計算混合云網絡架構

2019-01-29 15:25:11

阿里巴巴數據庫分庫分表

2024-12-04 13:02:34

數據庫分庫分表

2014-04-11 13:41:34

即刻搜索即刻合并

2013-03-11 13:08:06

戴爾私有化客戶

2023-08-11 08:59:49

分庫分表數據數據庫

2018-05-29 08:39:26

DBA數據庫案例

2019-08-16 10:19:01

NewSQL數據庫分庫分表
點贊
收藏

51CTO技術棧公眾號

精品久久久久久久久久久久久久久久久| 国产精品欧美一级免费| 性欧美xxxx| 白丝女仆被免费网站| 成人日韩av| 亚洲美女免费在线| 精品国产一区二区三区免费 | 91九色精品| 精品久久久久久无| 亚洲欧美另类动漫| 欧美aaaxxxx做受视频| 久久久久久久久久看片| 亚洲综合成人婷婷小说| 国产精品一区二区三区四| 激情五月综合网| 精品sm捆绑视频| jizzzz日本| 一二三四视频在线中文| 亚洲精品国产成人久久av盗摄| 久久99国产精品| 国产精品一区二区人人爽| 免费日韩av片| 久久免费视频这里只有精品| 秋霞欧美一区二区三区视频免费| 欧美顶级毛片在线播放| 欧美一级黄色片| a在线观看免费视频| 欧美sm一区| 亚洲一区二区欧美日韩| 法国空姐在线观看免费| 黄网在线观看| 91原创在线视频| 99精品国产高清在线观看| 亚洲天天综合网| 久久福利精品| 欧美亚洲激情视频| 久草精品视频在线观看| 欧美高清不卡| 美日韩精品视频免费看| 国精品人伦一区二区三区蜜桃| 免费成人网www| 日韩国产欧美精品在线 | 久久久美女毛片| 精品国产aⅴ麻豆| 国精品人妻无码一区二区三区喝尿 | 国产精品一区二区人人爽| 日韩av高清在线观看| 欧美中文在线字幕| 国产精品久免费的黄网站| 在线精品一区| 97视频免费观看| 欧美a v在线播放| 午夜小视频在线观看| 亚洲欧美日韩一区| 久久最新免费视频| 超碰在线caoporn| 亚洲三级理论片| 米仓穗香在线观看| 性欧美videos高清hd4k| 一区二区三区**美女毛片| 特级西西人体www高清大胆| √天堂8在线网| 亚洲最新视频在线播放| 国产手机免费视频| 少妇视频在线观看| 91电影在线观看| 亚洲三级视频网站| 9999在线精品视频| 精品精品欲导航| 亚洲成人av免费在线观看| 亚洲综合小说图片| 国产午夜精品视频免费不卡69堂| 呻吟揉丰满对白91乃国产区| 亚洲成人精品| 欧美精品www| 亚洲久久在线观看| 热久久免费视频| 91美女片黄在线观看游戏| 性做久久久久久久| 91免费观看国产| 亚洲国产一区二区三区在线播| 免费在线你懂的| 亚洲综合免费观看高清完整版在线 | 欧美日韩国产美女| 性高潮久久久久久| 亚洲精品无吗| 久久精品视频免费播放| 九热这里只有精品| 日韩成人一区二区三区在线观看| 成人黄色免费网站在线观看| 丰满人妻熟女aⅴ一区| 久久综合成人精品亚洲另类欧美 | 午夜激情视频在线| 亚洲一区二区三区在线| 亚洲性生活网站| 一区二区三区亚洲变态调教大结局 | 午夜一级免费视频| 嫩草国产精品入口| 色阁综合伊人av| 国产在线视频在线观看| 日韩主播视频在线| 成人综合电影| 永久av在线| 性感美女极品91精品| 三上悠亚在线一区二区| 老司机凹凸av亚洲导航| 久久久久www| 天堂网视频在线| 韩日av一区二区| 欧美中日韩免费视频| av激情在线| 欧洲av在线精品| 亚洲一级Av无码毛片久久精品| 欧洲激情综合| 97在线看福利| 精品久久久久成人码免费动漫| 久久久精品天堂| 真人抽搐一进一出视频| 国产精品一区二区精品| 亚洲三级黄色在线观看| 精品91久久久| 国产成人久久精品77777最新版本| 色一情一乱一伦一区二区三欧美 | 大桥未久av一区二区三区| 在线观看日本www| 国产精品一区2区3区| 亚州av一区二区| 可以免费观看的毛片| 亚洲欧美日韩国产另类专区| 色播五月综合网| 国产精品亚洲二区| 欧洲美女7788成人免费视频| 刘亦菲久久免费一区二区| 亚洲精品中文字幕乱码三区 | 日韩免费大片| 中文字幕一区电影| 亚洲视屏在线观看| 久久久亚洲成人| 黑人无套内谢中国美女| 日本女优一区| 国产成人精品免费视频| 天堂在线中文资源| 五月天丁香久久| 9.1在线观看免费| 综合久久综合| 亚洲在线视频福利| 黄视频网站在线看| 制服丝袜亚洲播放| 国产黄a三级三级| 久久精品国产99国产| 亚洲区一区二区三区| 台湾成人免费视频| 亚洲图片制服诱惑| 中文字幕 亚洲视频| 国产蜜臀97一区二区三区| 日本va中文字幕| 俺要去色综合狠狠| 91精品免费视频| 99热国产在线中文| 精品国精品国产尤物美女| 久久精品这里只有精品| 成人97人人超碰人人99| 每日在线更新av| 精品99在线| 91沈先生作品| xxxx另类黑人| 亚洲欧美在线第一页| 亚洲精品毛片一区二区三区| 国产精品久久久久桃色tv| 岛国av在线免费| 欧美精选在线| 美女主播视频一区| 国产亚洲精彩久久| 久久成人亚洲精品| 少妇精品高潮欲妇又嫩中文字幕| 欧美视频一区二区三区…| 精品人妻中文无码av在线| 精品一区在线看| 成人国产在线看| 亚洲精品一级二级三级| 国产精自产拍久久久久久蜜| 羞羞网站在线看| 精品在线观看国产| 一级二级三级视频| 亚洲国产va精品久久久不卡综合| wwwwxxxx国产| 国内不卡的二区三区中文字幕| 久久99中文字幕| 成人在线电影在线观看视频| 91久久极品少妇xxxxⅹ软件| 国产免费不卡| 久久91亚洲精品中文字幕| 三级理论午夜在线观看| 制服丝袜亚洲播放| 欧美一区二区三区不卡视频| 亚洲视频资源在线| 受虐m奴xxx在线观看| 国产美女久久久久| 国产精品动漫网站| 欧美黄色精品| 日韩视频在线观看国产| 91成人午夜| 国产一区私人高清影院| 人在线成免费视频| 免费不卡在线观看av| 大胆av不用播放器在线播放| 精品久久久久久久久久久久包黑料| av首页在线观看| 亚洲成人av一区| 国产小视频你懂的| 久久久久国产一区二区三区四区| 亚洲 自拍 另类 欧美 丝袜| 日本不卡一区二区三区| 奇米精品一区二区三区| 综合一区av| 一区二区在线观| 欧美日韩国产一区二区三区不卡| 久99久视频| 国产精品毛片av| 1区1区3区4区产品乱码芒果精品| av久久网站| 日本亚洲精品在线观看| 高端美女服务在线视频播放| 久久偷看各类女兵18女厕嘘嘘| eeuss影院www在线观看| 亚洲欧美国产精品专区久久| 三级网站免费观看| 日韩美女在线视频| 国产毛片毛片毛片毛片毛片| 精品视频在线视频| 懂色av蜜臀av粉嫩av分享吧最新章节| 亚洲成人av免费| 日韩伦人妻无码| 亚洲狠狠爱一区二区三区| 超碰手机在线观看| 亚洲精选免费视频| 久久免费看少妇高潮v片特黄| 国产精品久久网站| 日韩一级片在线免费观看| 国产日韩欧美综合一区| 手机看片福利视频| 国产女人18水真多18精品一级做 | a级黄色一级片| 亚洲片区在线| 日韩少妇内射免费播放| 一区二区国产在线观看| 高清在线观看免费| 国产一区二区三区成人欧美日韩在线观看| 蜜臀精品一区二区| 99国产精品| 国产精品秘入口18禁麻豆免会员| 午夜在线视频观看日韩17c| 69堂免费视频| 老司机亚洲精品| 五月天亚洲视频| 激情综合网av| 欧洲成人午夜精品无码区久久| 国产成人综合在线| 亚州av综合色区无码一区| 久久这里只精品最新地址| 久久中文字幕精品| 中文字幕中文乱码欧美一区二区| 情侣偷拍对白清晰饥渴难耐| 夜夜揉揉日日人人青青一国产精品 | 亚洲av无一区二区三区久久| 国产成人丝袜美腿| 国产视频久久久久久| 久久奇米777| 亚洲不卡的av| 亚洲综合清纯丝袜自拍| 亚洲天堂一区在线观看| 欧美色男人天堂| а√中文在线资源库| 亚洲国模精品私拍| 激情小视频在线| 超碰精品一区二区三区乱码| 国产传媒在线| 国产精品一区二区久久久| 欧美高清一级片| 久久久久久久久久久久久久一区 | 日韩中文字幕免费在线| 久久精品国产久精国产| 久久久男人的天堂| 国产日韩欧美高清| 欧美精品一区二区成人| 日韩欧美国产激情| 国产同性人妖ts口直男| 日韩av中文字幕在线播放| 国产福利片在线| 欧美激情第1页| 电影天堂国产精品| 俄罗斯精品一区二区三区| 国际精品欧美精品| 日本黄大片在线观看| 男女男精品网站| 少妇被狂c下部羞羞漫画| 国产精品天干天干在观线| 国产精品50页| 9191国产精品| 精品亚洲综合| 国模私拍视频一区| 99精品视频在线免费播放| 欧美日韩免费观看一区| 欧美色综合网| 91亚洲免费视频| 久久久久久久久97黄色工厂| 伊人365影院| 在线不卡的av| 国产粉嫩一区二区三区在线观看| 欧美国产日韩在线| 国产精品4hu.www| 久久精品国产第一区二区三区最新章节 | 日韩免费福利视频| 国产精品果冻传媒潘| 91影院成人| 国产精品天天av精麻传媒| 成人h动漫精品| www青青草原| 欧美日韩国产欧美日美国产精品| 男女视频在线观看免费| 午夜精品一区二区三区在线 | 亚洲欧洲中文| 日韩精品每日更新| 亚洲の无码国产の无码步美| 亚洲精品你懂的| 日韩精品在线一区二区三区| 亚洲精选中文字幕| а√天堂8资源中文在线| 97影院在线午夜| 欧美淫片网站| 亚洲综合123| 亚洲精品免费视频| 国产永久免费视频| 日韩一中文字幕| 国产美女久久| 亚洲一区二区三区精品在线观看 | 欧美视频在线免费看| 免费观看毛片网站| 国产+人+亚洲| 色天下一区二区三区| 日本少妇高潮喷水视频| 99re6这里只有精品视频在线观看| 久久久久久欧美精品se一二三四| 日韩精品在线网站| 色呦呦在线资源| www.久久爱.cn| 国产精品chinese| 午夜剧场免费看| 日韩欧美在线第一页| 国产最新视频在线| 国产精品看片资源| 欧美激情另类| 国产精品中文久久久久久| 一区二区三区在线视频观看| 亚洲第一大网站| 性色av一区二区三区| 香蕉精品久久| 中文字幕第36页| 最新热久久免费视频| 国产极品久久久| 午夜免费日韩视频| 蜜桃精品wwwmitaows| 9久久婷婷国产综合精品性色| 国产精品精品国产色婷婷| 国产肥老妇视频| 国内精品美女av在线播放| 神马久久一区二区三区| 久久国产这里只有精品| 亚洲精品欧美激情| 婷婷在线观看视频| 国产精品成人va在线观看| 天天久久综合| 小毛片在线观看| 欧美亚洲综合另类| av网址在线免费观看| 国产精品一码二码三码在线| 蜜桃av一区| 黄色录像免费观看| 日韩成人xxxx| 四虎视频在线精品免费网址| 97在线国产视频| 欧美激情综合在线| www.桃色av嫩草.com| 日韩**中文字幕毛片| 亚洲精品一二三区区别| 国产偷人妻精品一区| 欧美精品在线视频| 九色porny视频在线观看| 亚洲精品9999| www.亚洲精品| 91在线视频国产| 欧美亚洲另类激情另类| 牛牛国产精品| 免费网站在线高清观看| 精品人在线二区三区| 日本.亚洲电影| 狠狠97人人婷婷五月| 亚洲日本va午夜在线影院| 可以免费看污视频的网站在线| 99re6热在线精品视频播放速度|