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

分庫分表的 21 條法則,hold 住!

數據庫 其他數據庫
本文介紹了關于分庫分表架構的21個通用概念,有一定的了解之后,接下來我們將進入更深度的內容,包括讀寫分離、數據脫敏、分布式主鍵、分布式事務、配置中心、注冊中心、Proxy服務等實戰案例的講解和源碼分析。

大家好,我是小富~

(一)好好的系統,為什么要分庫分表?

本文是《分庫分表ShardingSphere5.x原理與實戰》系列的第二篇文章,距離上一篇文章已經過去好久了,慚愧慚愧~

還是不著急實戰,咱們先介紹下在分庫分表架構實施過程中,會接觸到的一些通用概念,了解這些概念能夠幫助理解市面上其他的分庫分表工具,盡管它們的實現方法可能存在差異,但整體思路基本一致。因此,在開始實際操作之前,我們有必要先掌握這些通用概念,以便更好地理解和應用分庫分表技術。

我們結合具體業務場景,以t_order表為例進行架構優化。由于數據量已經達到億級別,查詢性能嚴重下降,因此我們采用了分庫分表技術來處理這個問題。具體而言,我們將原本的單庫分成了兩個庫,分別為DB_1和DB_2,并在每個庫中再次進行分表處理,生成t_order_1和t_order_2兩張表,實現對訂單表的分庫分表處理。

圖片

數據分片

通常我們在提到分庫分表的時候,大多是以水平切分模式(水平分庫、分表)為基礎來說的,數據分片它將原本一張數據量較大的表 t_order 拆分生成數個表結構完全一致的小數據量表(拆分表) t_order_0、t_order_1、···、t_order_n,每張表只存儲原大表中的一部分數據。

圖片

數據節點

數據節點是數據分片中一個不可再分的最小單元(表),它由數據源名稱和數據表組成,例如上圖中 DB_1.t_order_1、DB_2.t_order_2 就表示一個數據節點。

圖片

邏輯表

邏輯表是指具有相同結構的水平拆分表的邏輯名稱。

比如我們將訂單表t_order 分表拆分成 t_order_0 ··· t_order_9等10張表,這時我們的數據庫中已經不存在 t_order這張表,取而代之的是若干的t_order_n表。

分庫分表通常對業務代碼都是無侵入式的,開發者只專注于業務邏輯SQL編碼,我們在代碼中SQL依然按 t_order來寫,而在執行邏輯SQL前將其解析成對應的數據庫真實執行的SQL。此時 t_order 就是這些拆分表的邏輯表。

業務邏輯SQL

select * from t_order where order_no='A11111'

真實執行SQL

select * from DB_1.t_order_n where order_no='A11111'

真實表

真實表就是在數據庫中真實存在的物理表DB_1.t_order_n。

圖片

廣播表

廣播表是一類特殊的表,其表結構和數據在所有分片數據源中均完全一致。與拆分表相比,廣播表的數據量較小、更新頻率較低,通常用于字典表或配置表等場景。由于其在所有節點上都有副本,因此可以大大降低JOIN關聯查詢的網絡開銷,提高查詢效率。

需要注意的是,對于廣播表的修改操作需要保證同步性,以確保所有節點上的數據保持一致。

廣播表的特點:

  • 在所有分片數據源中,廣播表的數據完全一致。因此,對廣播表的操作(如插入、更新和刪除)會實時在每個分片數據源中執行一遍,以保證數據的一致性。
  • 對于廣播表的查詢操作,僅需要在任意一個分片數據源中執行一次即可。
  • 與任何其他表進行JOIN操作都是可行的,因為由于廣播表的數據在所有節點上均一致,所以可以訪問到任何一個節點上的相同數據。

什么樣的表可以作為廣播表呢?

訂單管理系統中,往往需要查詢統計某個城市地區的訂單數據,這就會涉及到省份地區表t_city與訂單流水表DB_n.t_order_n進行JOIN查詢,因此可以考慮將省份地區表設計為廣播表,核心理念就是避免跨庫JOIN操作。

圖片

注意:上邊我們提到廣播表在數據插入、更新與刪除會實時在每個分片數據源均執行,也就是說如果你有1000個分片數據源,那么修改一次廣播表就要執行1000次SQL,所以盡量不在并發環境下和業務高峰時進行,以免影響系統的性能。

單表

單表指所有的分片數據源中僅唯一存在的表(沒有分片的表),適用于數據量不大且無需分片的表。

如果一張表的數據量預估在千萬級別,且沒有與其他拆分表進行關聯查詢的需求,建議將其設置為單表類型,存儲在默認分片數據源中。

分片鍵

分片鍵決定了數據落地的位置,也就是數據將會被分配到哪個數據節點上存儲。因此,分片鍵的選擇非常重要。

比如我們將 t_order 表進行分片后,當插入一條訂單數據執行SQL時,需要通過解析SQL語句中指定的分片鍵來計算數據應該落在哪個分片中。以表中order_no字段為例,我們可以通過對其取模運算(比如 order_no % 2)來得到分片編號,然后根據分片編號分配數據到對應的數據庫實例(比如 DB_1 和 DB_2)。拆分表也是同理計算。

在這個過程中,order_no 就是 t_order 表的分片鍵。也就是說,每一條訂單數據的 order_no 值決定了它應該存放的數據庫實例和表。選擇一個適合作為分片鍵的字段可以更好地利用水平分片帶來的性能提升。

圖片

這樣同一個訂單的相關數據就會落在同一個數據庫、表中,查詢訂單時同理計算,就可直接定位數據位置,大幅提升數據檢索的性能,避免了全庫表掃描。

不僅如此 ShardingSphere 還支持根據多個字段作為分片健進行分片,這個在后續對應章節中會詳細講。

分片策略

分片策略來指定使用哪種分片算法、選擇哪個字段作為分片鍵以及如何將數據分配到不同的節點上。

分片策略是由分片算法和分片健組合而成,分片策略中可以使用多種分片算法和對多個分片鍵進行運算。

圖片

分庫、分表的分片策略配置是相對獨立的,可以各自使用不同的策略與算法,每種策略中可以是多個分片算法的組合,每個分片算法可以對多個分片健做邏輯判斷。

分片算法

分片算法則是用于對分片鍵進行運算,將數據劃分到具體的數據節點中。

常用的分片算法有很多:

  • 哈希分片:根據分片鍵的哈希值來決定數據應該落到哪個節點上。例如,根據用戶 ID 進行哈希分片,將屬于同一個用戶的數據分配到同一個節點上,便于后續的查詢操作。
  • 范圍分片:分片鍵值按區間范圍分配到不同的節點上。例如,根據訂單創建時間或者地理位置來進行分片。
  • 取模分片:將分片鍵值對分片數取模,將結果作為數據應該分配到的節點編號。例如, order_no % 2 將訂單數據分到兩個節點之一。
  • .....

實際業務開發中分片的邏輯要復雜的多,不同的算法適用于不同的場景和需求,需要根據實際情況進行選擇和調整。

綁定表

綁定表是那些具有相同分片規則的一組分片表,由于分片規則一致所產生的的數據落地位置相同,在JOIN聯合查詢時能有效避免跨庫操作。

比如:t_order 訂單表和 t_order_item 訂單項目表,都以 order_no 字段作為分片鍵,并且使用 order_no 進行關聯,因此兩張表互為綁定表關系。

使用綁定表進行多表關聯查詢時,必須使用分片鍵進行關聯,否則會出現笛卡爾積關聯或跨庫關聯,從而影響查詢效率。

當使用 t_order 和 t_order_item 表進行多表聯合查詢,執行如下聯合查詢的邏輯SQL。

SELECT * FROM t_order o JOIN t_order_item i ON o.order_no=i.order_no

如果不配置綁定表關系,兩個表的數據位置不確定就會全庫表查詢,出現笛卡爾積關聯查詢,將產生如下四條SQL。

SELECT * FROM t_order_0 o JOIN t_order_item_0 i ON o.order_no=i.order_no 
SELECT * FROM t_order_0 o JOIN t_order_item_1 i ON o.order_no=i.order_no 
SELECT * FROM t_order_1 o JOIN t_order_item_0 i ON o.order_no=i.order_no 
SELECT * FROM t_order_1 o JOIN t_order_item_1 i ON o.order_no=i.order_no

圖片

而配置綁定表關系后再進行關聯查詢時,分片規則一致產生的數據就會落到同一個庫表中,那么只需在當前庫中 t_order_n 和 t_order_item_n 表關聯即可。

SELECT * FROM t_order_0 o JOIN t_order_item_0 i ON o.order_id=i.order_id 
SELECT * FROM t_order_1 o JOIN t_order_item_1 i ON o.order_id=i.order_id

圖片

注意:在關聯查詢時 t_order 它作為整個聯合查詢的主表。所有相關的路由計算都只使用主表的策略,t_order_item 表的分片相關的計算也會使用 t_order 的條件,所以要保證綁定表之間的分片鍵要完全相同。

SQL 解析

分庫分表后在應用層面執行一條 SQL 語句時,通常需要經過以下六個步驟:SQL 解析 -> 執?器優化 -> SQL 路由 -> SQL 改寫 -> SQL 執? -> 結果歸并 。

圖片

SQL解析過程分為詞法解析和語法解析兩步,比如下邊查詢用戶訂單的SQL,先用詞法解析將這條SQL拆解成不可再分的原子單元。在根據不同數據庫方言所提供的字典,將這些單元歸類為關鍵字,表達式,變量或者操作符等類型。

SELECT order_no FROM t_order where  order_status > 0  and user_id = 10086

接著語法解析會將拆分后的SQL關鍵字轉換為抽象語法樹,通過對抽象語法樹遍歷,提煉出分片所需的上下文,上下文包含查詢字段信息(Field)、表信息(Table)、查詢條件(Condition)、排序信息(Order By)、分組信息(Group By)以及分頁信息(Limit)等,并標記出 SQL中有可能需要改寫的位置。

圖片

抽象語法樹

執?器優化

執?器優化是根據SQL查詢特點和執行統計信息,選擇最優的查詢計劃并執行,比如user_id字段有索引,那么會調整兩個查詢條件的位置,主要是提高SQL的執行效率。

SELECT order_no FROM t_order where user_id = 10086 and order_status > 0

SQL 路由

通過上邊的SQL解析得到了分片上下文數據,在匹配用戶配置的分片策略和算法,就可以運算生成路由路徑,將 SQL 語句路由到相應的數據節點上。

簡單點理解就是拿到分片策略中配置的分片鍵等信息,在從SQL解析結果中找到對應分片鍵字段的值,計算出 SQL該在哪個庫的哪個表中執行,SQL路由又根據有無分片健分為 分片路由 和 廣播路由。

圖片

有分?鍵的路由叫分片路由,細分為直接路由、標準路由和笛卡爾積路由這3種類型。

標準路由

標準路由是最推薦也是最為常?的分??式,它的適?范圍是不包含關聯查詢或僅包含綁定表之間關聯查詢的SQL。

當 SQL分片健的運算符為 = 時,路由結果將落?單庫(表),當分?運算符是 BETWEEN 或 IN 等范圍時,路由結果則不?定落?唯?的庫(表),因此?條邏輯SQL最終可能被拆分為多條?于執?的真實SQL。

SELECT * FROM t_order  where t_order_id in (1,2)

SQL路由處理后

SELECT * FROM t_order_0  where t_order_id in (1,2)
SELECT * FROM t_order_1  where t_order_id in (1,2)

直接路由

直接路由是直接將SQL路由到指定?庫、表的一種分?方式,而且直接路由可以?于分?鍵不在SQL中的場景,還可以執?包括?查詢、?定義函數等復雜情況的任意SQL。

笛卡爾積路由

笛卡爾路由是由?綁定表之間的關聯查詢產生的,比如訂單表t_order 分片鍵是t_order_id 和用戶表t_user分片鍵是t_order_id ,兩個表的分片鍵不同,要做聯表查詢,會執行笛卡爾積路由,查詢性能較低盡量避免走此路由模式。

SELECT * FROM t_order_0 t LEFT JOIN t_user_0 u ON u.user_id = t.user_id WHERE t.user_id = 1
SELECT * FROM t_order_0 t LEFT JOIN t_user_1 u ON u.user_id = t.user_id WHERE t.user_id = 1
SELECT * FROM t_order_1 t LEFT JOIN t_user_0 u ON u.user_id = t.user_id WHERE t.user_id = 1
SELECT * FROM t_order_1 t LEFT JOIN t_user_1 u ON u.user_id = t.user_id WHERE t.user_id = 1

無分?鍵的路由又叫做廣播路由,可以劃分為全庫表路由、全庫路由、 全實例路由、單播路由和阻斷路由這 5種類型。

全庫表路由

全庫表路由針對的是數據庫 DQL 和 DML,以及 DDL等操作,當我們執行一條邏輯表 t_order SQL時,在所有分片庫中對應的真實表 t_order_0 ···  t_order_n 內逐一執行。

全庫路由

全庫路由主要是對數據庫層面的操作,比如數據庫 SET 類型的數據庫管理命令,以及 TCL 這樣的事務控制語句。

對邏輯庫設置 autocommit 屬性后,所有對應的真實庫中都執行該命令。

SET autocommit=0;

全實例路由

全實例路由是針對數據庫實例的 DCL 操作(設置或更改數據庫用戶或角色權限),比如:創建一個用戶 order ,這個命令將在所有的真實庫實例中執行,以此確保 order 用戶可以正常訪問每一個數據庫實例。

CREATE USER order@127.0.0.1 identified BY '程序員小富';

單播路由

單播路由用來獲取某一真實表信息,比如獲得表的描述信息:

DESCRIBE t_order;

t_order 的真實表是 t_order_0 ···· t_order_n,他們的描述結構相完全同,我們只需在任意的真實表執行一次就可以。

阻斷路由

?來屏蔽SQL對數據庫的操作,例如:

USE order_db;

這個命令不會在真實數據庫中執?,因為 ShardingSphere 采?的是邏輯 Schema(數據庫的組織和結構) ?式,所以無需將切換數據庫的命令發送?真實數據庫中。

SQL 改寫

SQL經過解析、優化、路由后已經明確分片具體的落地執行的位置,接著就要將基于邏輯表開發的SQL改寫成可以在真實數據庫中可以正確執行的語句。比如查詢 t_order 訂單表,我們實際開發中 SQL是按邏輯表 t_order 寫的。

SELECT * FROM t_order

這時需要將分表配置中的邏輯表名稱改寫為路由之后所獲取的真實表名稱。

SELECT * FROM t_order_n

SQL執?

將路由和改寫后的真實 SQL 安全且高效發送到底層數據源執行。但這個過程并不能將 SQL 一股腦的通過 JDBC 直接發送至數據源執行,需平衡數據源連接創建以及內存占用所產生的消耗,它會自動化的平衡資源控制與執行效率。

結果歸并

將從各個數據節點獲取的多數據結果集,合并成一個大的結果集并正確的返回至請求客戶端,稱為結果歸并。而我們SQL中的排序、分組、分頁和聚合等語法,均是在歸并后的結果集上進行操作的。

分布式主鍵

數據分?后,一個邏輯表(t_order)對應諸多的真實表(t_order_n),它們之間由于?法互相感知,主鍵ID都從初始值累加,所以必然會產?重復主鍵ID,此時主鍵不再唯一那么對于業務來說也就沒意義了。

圖片

盡管可通過設置表?增主鍵 初始值 和 步? 的?式避免ID碰撞,但這樣會使維護成本加大,可擴展性差。

這個時候就需要我們手動為一條數據記錄,分配一個全局唯一的ID,這個ID被叫做分布式ID,而生產這個ID的系統通常被叫做發號器。

大家可以參考我之前發布的這篇文章 9種分布式ID生成方案

數據脫敏

分庫分表數據脫敏是一種有效的數據保護措施,可以確保敏感數據的機密性和安全性,減少數據泄露的風險。

比如,我們在分庫分表時可以指定表的哪些字段為脫敏列,并設置對應的脫敏算法,在數據分片時解析到執行SQL中有待脫敏字段,會直接將字段值脫敏后的寫入庫表內。

對于用戶的個人信息,如姓名、地址和電話號碼等,可以通過加密、隨機化或替換成偽隨機數據的方式進行脫敏,以確保用戶的隱私得到保護。

大家可以參考我之前發布的這篇文章 大廠也在用的 6種 數據脫敏方案

分布式事務

分布式事務的核心問題是如何實現跨多個數據源的原子性操作。

由于不同的服務通常會使用不同的數據源來存儲和管理數據,因此,跨數據源的操作可能會導致數據不一致性或丟失的風險。因此,保證分布式事務的一致性是非常重要的。

以訂單系統為例,它需要調用支付系統、庫存系統、積分系統等多個系統,而每個系統都維護自己的數據庫實例,系統間通過API接口交換數據。

圖片

為了保證下單后多個系統同時調用成功,可以使用強一致性事務的XA協議,或者柔性事務的代表工具Seata,來實現分布式事務的一致性。這些工具可以幫助開發人員簡化分布式事務的實現,減少錯誤和漏洞的出現,提高系統的穩定性和可靠性。

經過分庫分表之后,問題的難度進一步提升。自身訂單服務,也需要處理跨數據源的操作。這樣一來,系統的復雜度顯著增加。因此,不到萬不得已的情況下,最好避免采用分庫分表的解決方案。

圖片

關于分布式事務詳細的介紹,大家可以參考我之前發布的這篇文章 對比 5 種分布式事務方案,還是寵幸了阿里的 Seata(原理 + 實戰)

數據遷移

分庫分表后還有個讓人頭疼的問題,那就是數據遷移,為了不影響現有的業務系統,通常會新建數據庫集群遷移數據。將數據從舊集群的數據庫、表遷移到新集群的分庫、分表中。這是一個比較復雜的過程,在遷移過程中需要考慮數據量、數據一致性、遷移速度等諸多因素。

遷移主要針對 存量數據 和 增量數據 的處理,存量數據指舊數據源中已經存在且有價值的歷史數據,增量數據指當下持續增長以及未來產生的業務數據。

存量數據可以采用定時、分批次的遷移,遷移過程可能會持續幾天。

增量數據可以采用新、舊數據庫集群雙寫模式。待數據遷移完畢,業務驗證了數據一致性,應用直接切換數據源即可。

后續我們會結合三方工具,來演示遷移的過程。

影子庫

什么是影子庫(Shadow Table)?

影子庫是一個與生產環境數據庫結構完全相同的實例,它存在的意義是為了在不影響線上系統的情況下,驗證數據庫遷移或者其他數據庫變更操作的正確性,以及全鏈路壓測。影子庫中存儲的數據是從生產環境中定期復制過來的,但是它不對線上業務產生任何影響,僅用于測試,驗證和調試。

圖片

在進行數據庫升級、版本變更、參數調優等操作前,通過在影子庫上模擬這些操作,可以發現潛在的問題,因為測試環境的數據是不可靠的。

在使用影子庫時,需要遵循以下幾個原則:

  • 與生產環境數據庫的結構應該完全一致,包括表結構、索引、約束等;
  • 數據要與生產環境保持一致,可以通過定期同步方式實現;
  • 讀寫操作不會影響生產環境,一般情況下應該禁止在影子庫上執行更新、刪除等操作;
  • 由于影子庫的數據特點,訪問權限應該嚴格控制,只允許授權人員進行訪問和操作;

總結

本文介紹了關于分庫分表架構的21個通用概念,有一定的了解之后,接下來我們將進入更深度的內容,包括讀寫分離、數據脫敏、分布式主鍵、分布式事務、配置中心、注冊中心、Proxy服務等實戰案例的講解和源碼分析。


責任編輯:武曉燕 來源: 程序員小富
相關推薦

2011-09-20 17:38:17

2020-07-30 17:59:34

分庫分表SQL數據庫

2019-11-12 09:54:20

分庫分表數據

2011-11-04 16:01:01

2012-07-24 14:00:30

2024-07-26 00:16:11

2011-09-22 09:38:27

CIO云計算

2011-09-24 12:26:41

2019-07-09 17:39:12

存儲

2022-07-11 08:16:47

NewSQL關系數據庫系統

2021-08-31 20:21:11

VitessMySQL分庫

2023-08-11 08:59:49

分庫分表數據數據庫

2020-11-18 09:39:02

MySQL數據庫SQL

2011-09-12 14:54:55

神舟筆記本

2011-08-28 16:26:20

清華同方筆記本

2025-04-01 08:45:00

2021-01-26 05:37:08

分庫分表內存

2020-07-28 09:04:09

NewSQL分庫分表

2017-09-08 13:50:50

MySQL開發實踐

2017-03-08 14:35:22

存儲云計算華云網際
點贊
收藏

51CTO技術棧公眾號

欧美午夜精品久久久久久久| 男女av一区三区二区色多| 制服丝袜日韩国产| 丁香色欲久久久久久综合网| 午夜影院免费体验区| 久久精品日韩欧美| 久热爱精品视频线路一| 欧美成人三级伦在线观看| 91亚洲视频| 一区二区三区四区乱视频| 久久er99热精品一区二区三区| 怡红院av久久久久久久| 亚洲成人免费| 亚洲免费av片| www.黄色网| 在线看欧美视频| 亚洲一区二区精品久久av| 亚洲7777| 婷婷亚洲一区二区三区| 国模娜娜一区二区三区| 琪琪第一精品导航| 久久黄色免费视频| 成人影视亚洲图片在线| 亚洲成年人影院在线| 免费一区二区三区在线观看| 超碰资源在线| 亚洲黄色片在线观看| 日韩激情视频| 欧美婷婷久久五月精品三区| 国产乱人伦偷精品视频免下载| 日本久久久久亚洲中字幕| 国产一级片网址| 91精品国产乱码久久久久久| 亚洲欧美日韩网| 成人在线电影网站| 视频一区日韩精品| 欧美精品乱码久久久久久按摩| 欧美aⅴ在线观看| 波多野结衣中文在线| 亚洲日本在线观看| 一区视频二区视频| 福利在线午夜| 久久精品一区八戒影视| 精品视频第一区| 精品久久sese| 国产欧美在线观看一区| av小说在线播放| 国产精品自拍视频一区| 日本综合久久| 欧美日韩亚洲国产一区| 亚洲视频自拍偷拍| 日韩 国产 一区| 福利一区二区| 欧美视频一区二区三区四区| 欧美成人免费高清视频| 三级中文字幕在线观看| 五月激情丁香一区二区三区| 99久久免费观看| 日本片在线观看| 一区二区久久久| 日韩激情视频一区二区| 韩国成人免费视频| 精品国产91久久久| 北条麻妃在线观看| 蜜桃在线视频| 色88888久久久久久影院按摩 | 中文字幕在线观看日| 日韩一区二区三区免费视频| 欧洲亚洲国产日韩| 一区二区免费av| www.成人在线.com| 日韩视频一区二区| 日本精品一二三| 久久久久97| 国产亚洲视频在线| 神马久久精品综合| 好吊一区二区三区| 欧美一区二区三区……| 人人妻人人爽人人澡人人精品 | 欧美性猛交xxxx乱大交91| 久久精品九色| 亚洲精品www久久久| 中文精品在线观看| 久久国产中文字幕| 欧美精品激情在线| 国产精品suv一区| 美腿丝袜亚洲色图| 97人人干人人| 欧洲一级在线观看| 最新国产の精品合集bt伙计| 九九久久九九久久| 中文在线中文资源| 欧美日韩国产经典色站一区二区三区 | free性欧美hd另类精品| 性做久久久久久久免费看| 91黄色小网站| 欧美欧美在线| 亚洲视频777| 欧美日韩免费做爰视频| 视频一区二区欧美| 成人毛片网站| 国产69精品久久app免费版| 亚洲男人的天堂在线观看| 欧美日韩精品在线一区二区| 成人黄色免费观看| 精品国产一区二区三区忘忧草| 91成年人网站| 国产一区视频在线观看免费| 国产成人精品电影| 亚洲AV无码成人片在线观看| 国产亚洲欧美色| 隔壁人妻偷人bd中字| 久久久免费人体| 日韩电影大片中文字幕| 手机av在线看| 久久久久在线| 国产经品一区二区| 色网站免费在线观看| 欧美日韩一区二区在线播放| 激情成人在线观看| 色999国产精品| 日韩av男人的天堂| 激情黄色小视频| 91精品久久香蕉国产线看观看| 国产91在线免费| 亚洲成人av观看| 亚洲黄色免费三级| 国产女人18水真多毛片18精品| 久久一区视频| 国产麻豆乱码精品一区二区三区| 巨大荫蒂视频欧美大片| 日本韩国欧美一区| 一区二区三区少妇| 黄色av成人| 91视频免费在线观看| 在线看的av网站| 在线观看中文字幕不卡| a级在线观看视频| 日韩视频免费| 国产精品一区视频网站| bt在线麻豆视频| 欧美日韩电影一区| 国产欧美小视频| 免播放器亚洲一区| 日韩欧美在线观看强乱免费| 欧美调教sm| 精品偷拍一区二区三区在线看| 日本天堂网在线观看| 大胆亚洲人体视频| 波多野结衣av一区二区全免费观看| 日韩av综合| 久久91亚洲人成电影网站| 国产av无码专区亚洲a∨毛片| 亚洲欧洲成人av每日更新| 欧美伦理片在线观看| 欧美一级精品| 国产精品丝袜白浆摸在线| 高清毛片在线看| 欧美日韩情趣电影| 极品美妇后花庭翘臀娇吟小说| 麻豆精品在线观看| 在线一区亚洲| 日韩欧美中文字幕一区二区三区| 欧美成人合集magnet| 国产wwwxxx| 亚洲图片一区二区| 国产精品一区二区入口九绯色| 国产精品普通话对白| 久久偷窥视频| 国产精品麻豆成人av电影艾秋| 日韩视频精品在线| 国产黄频在线观看| 午夜a成v人精品| 少妇久久久久久久久久| 久久精品国内一区二区三区| 咪咪色在线视频| 51精品国产| 4438全国亚洲精品在线观看视频| 久久精品国产亚洲a∨麻豆| 欧美三级日韩三级国产三级| a一级免费视频| 丁香激情综合五月| 精品www久久久久奶水| 欧美a级片视频| yy111111少妇影院日韩夜片 | 人人精品亚洲| 国产97在线视频| av毛片在线播放| 亚洲欧美自拍一区| www.天堂av.com| 欧美性色综合网| 久久久久亚洲av片无码下载蜜桃| 91小视频在线免费看| 亚洲人视频在线| 亚洲大胆av| 一区二区在线观看网站| 日韩成人av在线资源| 91视频免费网站| 电影一区二区三| 欧美二区在线播放| 成年网站在线| 精品av综合导航| 91精品国产色综合久久不8| 亚洲国产aⅴ天堂久久| 手机av在线不卡| 久久综合九色综合欧美就去吻| 天天操狠狠操夜夜操| 亚洲欧美日韩一区在线观看| 国产高清免费在线| heyzo久久| 久久资源亚洲| 国产精品流白浆在线观看| 国产成人精品综合久久久| 欧美6一10sex性hd| 亚洲日韩欧美视频| 精品人妻一区二区三区四区不卡 | 久久中国妇女中文字幕| 手机看片国产1024| 欧美亚洲禁片免费| 国产无遮挡免费视频| 国产精品私房写真福利视频| 中文字幕天堂网| 国产精品18久久久久久vr| 久久久久久久久久福利| 精品不卡视频| 中文字幕在线亚洲精品| 日韩中文首页| 日本日本精品二区免费| 国产精品对白久久久久粗| 亚洲影院高清在线| 91天天综合| 国产成人精品久久亚洲高清不卡 | 91av在线免费观看视频| 国产精品久久麻豆| 中文字幕国产亚洲| 狠狠躁日日躁夜夜躁av| 91麻豆精品国产91久久久使用方法| av黄色在线看| 亚洲成av人片| 日韩欧美激情视频| 亚洲一二三专区| 亚洲综合网在线| 国产精品五月天| 貂蝉被到爽流白浆在线观看| 国产亚洲精品超碰| 欧美黑人欧美精品刺激| 国产1区2区3区精品美女| 精人妻一区二区三区| 韩国欧美一区二区| 五月天av在线播放| 精品一区二区三区久久| 亚洲欧美激情网| 久久久蜜桃一区二区人| 国产特级黄色大片| 裸体一区二区| 老司机午夜av| 视频一区二区不卡| 欧美亚洲日本在线观看| 天堂久久久久va久久久久| 高清在线观看免费| 日本在线不卡一区| 国产九九在线视频| 久久99精品视频| wwwxxxx在线观看| 成人免费va视频| 亚洲视频在线播放免费| 久久精品一级爱片| 99久久99久久精品免费看小说.| 久久精品亚洲一区二区三区浴池| 日本少妇高潮喷水xxxxxxx| 国产精品免费丝袜| 一级性生活免费视频| 亚洲日本va在线观看| 久久婷婷一区二区| 调教+趴+乳夹+国产+精品| 日韩熟女精品一区二区三区| 欧美日韩色婷婷| 亚洲图片视频小说| 日韩欧美一区在线| 天天干天天做天天操| 中文字幕亚洲综合久久| 黄色网页在线观看| 欧美激情18p| 国产天堂在线播放视频| 国产精品久久久久久久天堂| 久久久久久一区二区三区四区别墅| 91久久国产精品91久久性色| 国产图片一区| 欧洲一区二区日韩在线视频观看免费| 日韩av密桃| 特级西西人体www高清大胆| 伊人成人网在线看| 黄色片视频在线播放| 九九在线精品视频| 亚洲狠狠婷婷综合久久久久图片| 国产欧美精品区一区二区三区| 三级影片在线观看| 福利视频一区二区| 一级黄色片视频| 精品国产一区二区三区四区四| 日韩中文字幕免费观看| 国产一区二区三区在线视频| 欧美色图天堂| 国产精品麻豆va在线播放| 成午夜精品一区二区三区软件| 日韩av一级大片| 好吊日精品视频| av在线免费看片| 91色porny| 青青青在线免费观看| 欧美日韩亚洲一区二| 国产精品综合在线| 亚洲欧美一区二区精品久久久| 日本视频不卡| 国产激情视频一区| 91精品啪在线观看国产爱臀| 久久精品二区| 中文字幕一区二区三区欧美日韩 | 久88久久88久久久| 丰满少妇一区二区| 亚洲午夜免费电影| 国产精品久久欧美久久一区| 日韩精品在线免费| 国产黄色大片在线观看| 国产精品永久在线| 国产一区99| 国产成人a亚洲精v品无码| 国产精品99久久久久久久vr| 我想看黄色大片| 91国内精品野花午夜精品| 人妻视频一区二区三区| 久久精品国产99国产精品澳门 | 日本50路肥熟bbw| 国产精品福利一区二区三区| 国产亚洲欧美在线精品| 精品国产免费久久| a天堂中文在线官网在线| 国产精品9999| 免费一区二区三区视频导航| 精品99在线视频| proumb性欧美在线观看| 国产1区2区3区4区| 日韩欧美激情四射| 97caopron在线视频| 91欧美日韩一区| 亚洲美女视频| 亚洲第一色av| 亚洲摸摸操操av| 国产视频手机在线| 久久香蕉国产线看观看av| 国产精品毛片无码| 欧美性视频在线播放| 国产真实精品久久二三区| 亚洲视频重口味| 日韩视频免费直播| 三级网站视频在在线播放| 99热最新在线| 亚洲精品资源| 久久人人爽人人人人片| 亚洲欧美另类小说视频| www男人的天堂| 欧美极品少妇xxxxx| 中文字幕久久精品一区二区| 国产在线无码精品| 不卡的电视剧免费网站有什么| 国产一级片免费观看| 精品日韩99亚洲| 中文字幕在线视频久| 欧美中日韩一区二区三区| 六月丁香婷婷色狠狠久久| 国产天堂av在线| 日韩欧美另类在线| 三级中文字幕在线观看| 日本一区二区三区四区高清视频| 久久久久网站| 国产高潮流白浆| 精品久久久久久久久久久久包黑料| 密臀av在线播放| 日日噜噜噜噜夜夜爽亚洲精品| 毛片一区二区三区| 久久精品国产亚洲AV无码麻豆 | 中国特级黄色大片| 欧美视频在线免费| av天在线观看| 99在线看视频| 久久国产一二区| 亚洲精品成人无码| 777xxx欧美| 91制片在线观看| 性欧美videosex高清少妇| 国产乱码字幕精品高清av | 五月天精品一区二区三区| 日韩一级片免费观看| 国产精品成人一区| 一二三区不卡| 国产熟妇久久777777| 欧美裸体一区二区三区| free性护士videos欧美| 中文视频一区视频二区视频三区| 国产91精品精华液一区二区三区|