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

面試官:說說你們分庫分表后,主鍵是怎么生成的?

數據庫 其他數據庫
在深入討論主鍵生成策略之前,我們需要先理解分庫分表的基本概念。嚴格來說,分庫分表包含了三個層面的拆分:分數據源、分庫和分表。在實際生產環境中,這三者往往會組合使用。

在分布式系統的架構設計中,分庫分表是一個無法回避的話題。當數據量達到一定規模,單庫單表已經無法承載業務壓力時,我們就需要考慮將數據分散到多個數據庫和多個表中。然而,這種分散帶來了一個新的挑戰:如何在分庫分表的場景下生成全局唯一且有序的主鍵。

這個問題看似簡單,實際上卻涉及數據庫底層原理、分布式系統設計、并發控制等多個技術領域。這篇文章就深入探討分庫分表場景下的主鍵生成策略,從最基礎的UUID方案,到經典的雪花算法,再到更具創新性的主鍵內嵌分庫分表鍵方案,為你提供一套完整的解決方案。

1. 分庫分表為什么不能用自增主鍵

在深入討論主鍵生成策略之前,我們需要先理解分庫分表的基本概念。嚴格來說,分庫分表包含了三個層面的拆分:分數據源、分庫和分表。在實際生產環境中,這三者往往會組合使用。

舉個例子,某電商平臺的訂單表采用了分庫分表策略,使用了6個主從集群,每個集群包含5個數據庫,每個數據庫又拆分為64張表,整體規模達到了6乘以5乘以64的拆分粒度。當然,根據實際的數據規模和讀寫壓力,也可以采用更簡單的拆分方式,比如共享一個主從集群,只進行分庫或者只進行分表。

11

當系統采用分庫分表后,傳統數據庫的自增主鍵就會遇到問題。在單庫單表的場景下,我們可以直接使用數據庫的自增主鍵功能,比如在MySQL中創建表時指定AUTO_INCREMENT屬性。

-- 訂單表建表語句,使用自增主鍵
CREATE TABLE order_info (
   id BIGINT PRIMARY KEY AUTO_INCREMENT,  -- 自增主鍵
   buyer_id BIGINT NOT NULL,              -- 買家ID
   order_amount DECIMAL(10,2)             -- 訂單金額
)

然而在分庫分表的場景下,這種自增主鍵機制就會失效。假設我們按照買家ID對2取模的方式將訂單表拆分為兩張表,分別是order_info_0order_info_1。如果這兩張表都依賴各自的自增機制生成主鍵,那么兩張表可能會生成相同的ID。比如兩張表各自插入第一條記錄時,生成的ID都是1,這就導致了主鍵沖突。

22

因此,在分庫分表場景下,我們需要設計一個能夠生成全局唯一ID的機制。這個機制需要滿足兩個核心要求:首先,生成的ID必須是全局唯一的,不能出現重復;其次,理想情況下ID應該保持遞增特性,因為遞增與否會顯著影響數據庫的插入性能。此外,由于采用分庫分表的系統通常數據量巨大,意味著并發量也很高,所以主鍵生成方案還需要考慮如何支持高并發場景。

2. 面試引導

在實際的技術面試中,如何將話題引導到主鍵生成這個技術點上,也是一門學問。如果你在簡歷中提到了分庫分表的項目經驗,面試官很可能會主動詢問主鍵是如何生成的。如果在面試過程中被問及數據庫自增主鍵的相關問題,你可以主動提及自增主鍵在分庫分表場景下的局限性,這樣面試官自然會追問分庫分表場景下的主鍵生成方案。

當面試官問到這些問題時,如何抓住機會展現自己的技術深度呢?這需要我們提前做好充分的準備。具體來說,需要深入理解市面上常見的主鍵生成策略,準備一個有亮點的、具備微創新性的主鍵生成方案,同時還要記住一些可行的優化思路。接下來,我們將逐一分析這些內容。

3. 常見主鍵生成策略

當面試官詢問分庫分表中如何解決主鍵問題,或者如何設計一個發號器時,他們通常期望你能夠回答出幾種常見的主鍵生成思路,主要包括UUID、數據庫自增和雪花算法。下面我們逐一深入分析這些方案。

3.1 基礎方案:UUID

UUID是最直接的主鍵生成方案,也是面試中必須能夠回答出來的基礎策略。雖然UUID實現簡單,但如果我們想在面試中脫穎而出,就需要深入分析UUID的弊端。

UUID主要有兩個明顯的缺陷。第一個是長度問題,UUID通常占用36個字符,存儲空間較大,不過在實際采用UUID的場景中,這個缺點通常不是主要考慮因素。第二個缺陷更為關鍵,那就是UUID不是遞增的,這個弊端是面試時需要重點闡述的內容。

3.1.1 頁分裂

要講清楚UUID不是遞增的弊端,我們需要先理解為什么數據庫傾向于使用自增主鍵。這里的關鍵詞是頁分裂。

33

數據庫的B+樹索引結構中,數據按照主鍵大小有序存儲在葉子節點上。當我們需要插入一條新記錄時,如果這條記錄的主鍵值恰好位于某個已滿的葉子節點中間,就會觸發頁分裂操作。比如圖中所示,當嘗試在23之后插入25時,由于葉子節點已經放滿,數據庫不得不將這個節點分裂成兩個節點,分別存儲(20,21)和(22,23,25)。更嚴重的是,這種分裂可能會引發連鎖反應,從葉子節點一直向上分裂到根節點,導致整個樹結構都需要調整。

因此,UUID最大的缺陷在于它產生的ID不是遞增的。我們傾向于在數據庫中使用自增主鍵,是因為自增主鍵可以迫使數據庫的B+樹朝著一個方向增長,新數據總是追加到樹的末尾,避免了中間節點的分裂,從而獲得最佳的插入性能。而UUID生成的ID在整體上可以看作是隨機的,這會導致數據頻繁地插入到頁的中間位置,引起更加頻繁的頁分裂操作。在極端情況下,這種分裂可能引發連鎖反應,整棵B+樹的結構都會受到影響,嚴重影響插入性能。

3.1.2 順序讀

除了頁分裂的問題,我們還可以從另一個角度解釋為什么要使用自增主鍵,這個角度就是順序讀。

44

自增主鍵還有一個重要優勢,就是數據會有更大的概率按照主鍵大小有序存儲,兩條主鍵相近的記錄在磁盤上的物理位置也是相近的。在進行范圍查詢時,我們能夠更加充分地利用磁盤的順序讀特性,大幅提升查詢性能。相比之下,使用UUID作為主鍵時,由于ID是隨機的,相近邏輯的數據在物理存儲上可能相距很遠,無法利用順序讀的優勢。

3.1.3 數據的物理存儲

如果你希望在面試官面前展現更深入的數據庫知識,可以進一步解釋數據庫頁分裂的具體機制,這里可以用MySQL的InnoDB引擎來舉例說明。

InnoDB引擎中,每個數據頁按照主鍵大小有序存儲數據行。假設現在有一個數據頁存儲了主鍵為15、16、17、19、20、21的六行數據,并且這一頁已經放滿了。此時需要插入一條主鍵為18的記錄,InnoDB引擎會發現當前頁已經無法容納這條新記錄,于是不得不將原本的頁分裂成兩頁,比如將15、16、17放到一頁,19、20、21放到另一頁,然后將18插入到第一頁中。

這種頁分裂會造成一個嚴重問題:雖然從邏輯上看,存儲15、16、17的頁和存儲19、20、21的頁是相鄰的兩個頁,但在磁盤的物理存儲上,它們可能相距很遠。這會導致后續的范圍查詢需要頻繁地進行磁盤尋道,嚴重影響查詢性能。

55

3.2 數據庫步長自增方案

除了UUID方案,還有一種常見的方案也叫做自增,不過這種自增比較特殊,它是設置了步長的自增。

66

我們可以通過一個具體例子來說明這種方案。假設經過分庫分表后,我們有16張表,那么可以讓每張表按照不同的步長來生成自增ID。比如第一張表生成1、17、33、49這樣的ID序列,第二張表生成2、18、34、50這樣的ID序列,以此類推,每張表的起始值不同,但步長都是16。

這種方案的最大優勢在于實現簡單,應用層基本不需要做任何額外工作,只需要在創建表時指定好不同的起始值和步長即可。雖然生成的ID并不是嚴格全局遞增的,但在單張表內部,ID肯定是遞增的,這在一定程度上保證了插入性能。這個方案的性能主要取決于數據庫本身的性能,應用層無需過多關注。

3.3 雪花算法

除了UUID和數據庫自增,雪花算法是分布式場景下最經典的主鍵生成方案。需要注意的是,在當前的技術面試環境中,僅僅答出雪花算法可能已經不夠突出,我們需要在理解雪花算法的基礎上,找到更多的亮點。

雪花算法的核心思想并不復雜,關鍵在于分段設計。

7

雪花算法采用64位來表示一個ID,其中1位保留未使用,41位表示時間戳,10位作為機器ID,12位作為序列號。這種設計保證了ID的唯一性:時間戳是遞增的,不同時刻產生的ID肯定不同;機器ID是不同的,同一時刻不同機器產生的ID肯定不同;同一時刻同一機器上,可以通過序列號來區分不同的ID。

基本解釋清楚之后,我們可以從多個方向來展現技術深度,你可以根據自己掌握知識的程度來選擇合適的方向。

3.3.1 亮點一:靈活調整分段設計

第一個方向是深入討論每個字段的含義和長度,關鍵點是根據實際需求自定義各個字段的含義和長度。

88

大多數情況下,如果自己設計類似的算法,每個字段的含義和長度都是可以靈活控制的。比如時間戳的41位可以調整得更短或更長,39位也能表示十幾年,對于大多數業務場景來說已經足夠。機器ID雖然名稱上是機器ID,但實際上指的是算法實例,而不是物理機器。比如一臺物理機器可以部署多個進程,每個進程的機器ID是不同的;或者進一步細分,機器ID的前半部分表示物理機器,后半部分可以表示該機器上用于產生ID的進程、線程或協程。甚至機器ID也可以不表示機器,而是引入特定的業務含義。序列號的長度同樣可以根據實際并發需求進行調整。

總結來說,雪花算法可以看作是一種設計思想,借助時間戳和分段機制,我們可以自由切割ID的不同比特位,賦予其不同的含義,靈活設計符合自己業務場景的ID生成算法。

3.3.2 亮點二:序列號耗盡的處理策略

無論怎么設計雪花算法,序列號長度都有可能不夠用。比如標準的12位序列號,在并發量極高的場景下,有可能在某個特定時刻,同一臺機器上的序列號全部用完。

1010

顯然,理論上確實存在這種可能性,所以我們需要準備解決方案。解決思路其實并不復雜。如果12位不夠用,可以增加序列號的位數,這部分位數可以從時間戳中拿出來。如果還不夠,可以讓業務方等待到下一個時間戳,時間戳變化后自然又可以生成新的ID了,這實際上是一種變相的限流機制。

一般來說,可以考慮加長序列號的長度,比如縮減時間戳的位數,將節省出來的位數分配給序列號。當然也可以更直接地將64位的ID擴展為128位,甚至更多,這樣序列號就可以有三四十位,即便是超大規模的系統也不可能用完。不過,徹底的兜底方案還是要有的。我們可以考慮引入類似限流的做法,在當前時刻的ID已經耗盡之后,讓業務方等待下一個時間戳。由于時間戳通常是毫秒級的,業務方最多只需要等待一毫秒。

imageimage

這里面試官可能會繼續追問,讓業務方等待會有什么問題?

確實讓業務方等待確實是一個非常不妥的方案,因為這可能導致大量業務線程或協程阻塞,導致線程池或協程池耗盡。不過如果是偶發性的序列號不夠,問題不大,因為阻塞的業務方很快就能拿到ID。如果序列號耗盡不是偶發性的,而是長期存在的問題,那么就需要考慮從業務角度進行切割,不同業務使用不同的ID生成器,不要共享。或者,最終還是采用96位或128位的ID,一勞永逸地解決問題。

3.3.3 亮點三:數據堆積問題的解決

假設有這樣一個場景:你的分庫分表策略是按照ID對64取模來進行的,如果業務非常低頻,以至于每個時刻都只生成了尾號為7的ID,那么是不是所有數據都會分到同一張表中呢?

1111

確實會出現這種情況,不過解決方案也很簡單。第一種方案是在每個時刻使用隨機數作為序列號的起點,而不是每次都從0開始計數。第二種方案是使用上一個時刻的序列號作為起點,比如上一個時刻的序列號只增長到5,那么下一個時刻的序列號就從6開始。如果上一個時刻的序列號已經很大了,就可以退化為從0開始。

看起來第一種方案比較合理常規,但是相比之下第二種實際上更加可控,性能也更好。

因為在低頻場景下,很容易出現序列號幾乎沒有增長的情況,從而導致數據在經過分庫分表后只落到某一張表中。為了解決這個問題,可以讓序列號部分不再從0開始增長,而是從一個隨機數開始增長。還有一個策略是序列號從上一時刻的序列號開始增長,但如果上一時刻序列號已經很大了,就可以退化為從0開始增長。這樣比隨機數更可控,性能也更好。

3.4 進階方案:主鍵內嵌分庫分表鍵

到這里,其實前面的回答已經頗具亮點,已經可以讓面試官對你刮目相看了。接下來,我們還可以更進一步,讓面試官加深印象,直接把對技術深度的追求做到極致。這里秀才直接給出一個更具創新性的方案:主鍵內嵌分庫分表鍵。

1212

其實分庫分表之后最麻煩的就是分庫分表的鍵和主鍵并不是同一個。比如在C端訂單的分庫分表中,我們可以采用買家ID來進行分庫分表。但在一些業務場景中,比如查看訂單詳情,可能是根據主鍵或者訂單編號來查找的。

這里我們可以考慮借鑒雪花算法的設計思想,將主鍵生成策略和分庫分表鍵結合在一起,也就是說在主鍵內部嵌入分庫分表鍵。例如,我們可以這樣設計訂單ID的生成策略,假設分庫分表使用的是買家ID的后六位。第一段依舊采用時間戳,第二段換成買家ID的后六位,第三段采用隨機數。

在一般情況下,我們都是用買家ID來查詢對應的訂單信息。但在其他場景下,比如我們只有一個訂單ID,這時候可以取出訂單ID中嵌入的買家ID后六位,來判斷數據存儲在哪個庫、哪個表。類似的設計還有答題記錄按照答題者ID來分庫分表,但答題記錄ID本身可以嵌入這個答題者ID中用于分庫分表的部分。

這一類解決方案的核心思想是不拘泥于雪花算法每一段的固定含義。比如第二段可以使用具備業務含義的ID,第三段可以自增,也可以隨機。只要我們最終能夠保證ID生成大體上是全局遞增的,并且是獨一無二的就可以。

3.4.1 ID遞增性

假如面試官進一步追問:你這個方案能夠保證主鍵嚴格遞增嗎?

這個確實是保證不了的,但它能夠做到大體上是遞增的,這樣效果其實并不怎么影響。比如,同一時刻如果有兩個用戶來創建訂單,其中用戶ID為876543的先創建,用戶ID為123456的后創建,那么很顯然用戶ID為123456的會產生一個比用戶ID為876543更小的訂單ID。又或者同一時刻一個買家創建了兩個訂單,但第三段是隨機數,第一次隨機到567,第二次隨機到234,那么顯然第一次產生的ID會更大。

但是這并不妨礙我們認為,隨著時間推移,后一時刻產生的ID肯定要比前一時刻產生的ID要大。這樣一來,雖然性能比不上完全嚴格遞增的主鍵,但比完全隨機的主鍵要好得多。

3.4.2 ID唯一性

如果面試官進一步追問這個方案能不能保證ID唯一,又該怎么回答呢?

同樣,這個方案也不能保證00%的絕對唯一。其根本原因就在于ID的第三部分我們引入了隨機數。既然是隨機,理論上就存在兩次生成同樣數字的可能。不過,我們要知道,這種情況在現實中發生的概率是微乎其微的。

一個沖突ID的產生,需要同時滿足幾個的條件:必須是同一個用戶,在同一毫秒內,發起了兩次訂單創建,并且這兩次請求生成的隨機數部分還必須完全一致

我們可以從兩個角度來分析這個概率:

  1. 從業務角度看:一個正常用戶在同一毫秒內手動下兩個訂單,這在操作上幾乎是不可能的。如果說是惡意攻擊者,那他們的訂單失敗了也無所謂。
  2. 從數學角度看:即便我們考慮共享賬號等特殊情況,真的有用戶在同一毫秒發起了兩個請求,那也要看隨機數是否會碰撞。假設我們的隨機數范圍是0到10萬,那么兩次都抽到同一個數字的概率也只有十萬分之一。

所以,這是一個概率極低、但理論上存在的問題。關鍵在于我們如何應對它。這個解決方案非常成熟,核心就是重新生成主鍵

具體操作是,我們依賴數據庫的主鍵唯一性約束。當我們的程序插入數據時,如果數據庫返回了主鍵沖突的錯誤,說明這個極小概率事件真的發生了。此時,我們的代碼邏輯會捕獲這個特定錯誤,立刻重新生成一個新的ID,然后再次嘗試插入。這個過程對用戶是完全透明的。

3.5  發號性能優化

在掌握了前面幾種主鍵生成策略之后,如果希望進一步提升系統在極端并發下的穩定性,可以將思考范圍從“如何設計一個 ID”擴展到“如何讓 ID 服務在大規模場景中持續高效運行”。在實際生產環境里,一個發號體系往往不僅依賴于算法本身,還需要在獲取流程上做工程化優化,以抵御瞬時流量沖擊、降低網絡往返次數以及減少數據庫更新壓力。

這一類優化并不改變 ID 的結構,但能夠顯著提升服務的整體吞吐能力,通常會從以下幾個方面協同組合。

首先,將 ID 的申請粒度從單個擴展為一段,使得調用方一次拿到一整批可用區間,在本地按需消耗。這樣可以將原本的高頻訪問壓縮成低頻事件,一個批次可能抵消數百到上千次真實請求,從根本上減輕發號服務的負載。


其次是將取號操作前置化。業務端在真正需要之前就準備好一定數量的可用 ID,當本地余量下降到閾值時,異步補齊下一段。這樣在絕大多數情況下,業務線程無需等待發號器響應,延遲基本可視為零。只有在緩沖耗盡且新段尚未到達的極端情況,業務才會短暫阻塞。


此外,為減少同一時刻大量線程同時訪問發號器帶來的資源浪費,可以在客戶端加入類似 singleflight 的協作邏輯:某一時間窗口內如果出現多個取號需求,僅由一個線程代表整個進程發起請求,其他線程等待即可。進一步的優化是讓代表線程在獲取時“多取一點”,在未來的短時間窗口內直接滿足后續線程的請求。


在此之上,為了避免進程級緩存的鎖競爭,還可以為各個線程建立更細粒度的局部緩存區。當線程從全局段中領取一個較小的片段存放在自己的本地緩沖后,其后續的 ID 消耗都不再涉及進程級同步結構,從而避免爭搶,提高整體并發能力。最終形成遠端服務、進程緩沖、線程緩沖的多級體系,使系統在峰值流量下依然保持平穩。

這一方案的核心思想是通過分層緩沖、協同調度和局部化分發,將原本集中式的獲取過程解耦拆分,使真正與發號器交互的請求數量被壓縮到極低。它并不依賴某一種具體算法,而是一套兼容所有生成策略的工程機制,適用于絕大多數對穩定性、低延遲和高并發具有要求的業務場景。

4. 小結

從單庫單表的自增主鍵到分庫分表場景下的全局ID生成,這不僅是一個技術選型問題,更是對系統架構理解深度的體現。UUID雖簡單但犧牲了性能,數據庫步長自增折中實用,雪花算法經典但需靈活調整,而主鍵內嵌分庫分表鍵的方案則將設計思維推向了極致。面試中,掌握這些方案的原理只是基礎,真正的亮點在于你能否理解B+樹頁分裂的底層機制,能否根據業務場景靈活設計分段策略,以及能否在唯一性、遞增性與實現復雜度之間找到最優平衡點。記住,沒有完美的方案,只有最適合當前業務的方案——這正是分庫分表這個看似簡單的主鍵問題,卻能夠區分出初級與資深工程師的一個重要原因。

責任編輯:武曉燕 來源: IT楊秀才
相關推薦

2024-01-17 14:42:24

分庫分表數據庫數據分片

2024-11-22 15:32:19

2020-11-11 10:05:04

數據庫分庫分表美團面試

2024-07-25 18:20:03

2025-04-09 00:00:00

2025-06-13 02:10:00

MySQL大表業務場景

2023-01-26 00:25:09

JVM設置技術

2023-12-19 09:24:22

LinuxBIOSUEFI

2017-07-19 16:25:07

數據庫開發DB分庫主鍵生成策略

2025-02-12 08:43:06

2021-04-19 18:56:58

大數字符串運算

2024-11-19 15:13:02

2023-12-27 18:16:39

MVCC隔離級別幻讀

2025-04-16 00:00:01

JWT客戶端存儲加密令

2025-04-08 00:00:00

@AsyncSpring異步

2025-09-18 09:43:43

2024-05-30 08:04:20

Netty核心組件架構

2024-08-22 10:39:50

@Async注解代理

2024-03-05 10:33:39

AOPSpring編程

2021-04-12 21:34:29

Redis故障數據
點贊
收藏

51CTO技術棧公眾號

国产午夜三级一区二区三| 精品三级av在线导航| 国产精品久久久久久亚洲伦| 国产日韩中文字幕在线| 黄色香蕉视频在线观看| jazzjazz国产精品麻豆| 色综合天天综合在线视频| 日韩av电影免费观看| 99久久国产免费| 国产精品一国产精品k频道56| 一区二区欧美在线| 99国产精品免费视频| 中文字幕影音在线| 中文字幕一区三区| 黑人另类av| 91亚洲国产成人久久精品麻豆| 久久99精品久久| 粉嫩av一区二区三区粉嫩| 日本一区二区三区四区视频| 国产精品中文久久久久久| 77thz桃花论族在线观看| 激情六月婷婷久久| 午夜精品一区二区三区在线| 国产又粗又黄又猛| gogo久久日韩裸体艺术| 欧美最新大片在线看| 精品人妻少妇一区二区| 男人天堂手机在线| 日韩电影一区二区三区四区| 欧美国产日韩一区| 国产午夜福利一区| 免费日韩一区二区三区| 欧美一区二区三区四区久久| 9久久婷婷国产综合精品性色| 婷婷在线免费视频| 欧美jizz| 精品视频www| 一区二区三区欧美精品| 香蕉视频亚洲一级| 欧美日韩国产一中文字不卡| 国产精品啪啪啪视频| 在线观看毛片av| 97在线精品| 亚洲美女av在线| 国产激情第一页| 中文在线中文资源| 亚洲成国产人片在线观看| 7777在线视频| 二区在线播放| 亚洲你懂的在线视频| 亚洲专区中文字幕| 在线观看亚洲一区二区| 青青草精品视频| 国产精品xxxxx| 日韩精品久久久久久免费| 亚洲精品综合| 97精品国产97久久久久久| 欧美成人黄色网| 午夜亚洲福利| 亚洲激情在线视频| 国产精品入口麻豆| 97品白浆高清久久久久久| 欧美一级精品大片| 国产探花一区二区三区| 伊人精品综合| 色成年激情久久综合| 亚洲精品在线免费| 99国产揄拍国产精品| 久久er99精品| 91爱爱小视频k| 日韩欧美亚洲一区二区三区| 加勒比久久综合| 亚洲人成电影在线播放| 国产jk精品白丝av在线观看| 成人嘿咻视频免费看| 日韩中文字幕av| 精品无码av一区二区三区| 亚洲精品影片| 亚洲精品黄网在线观看| 欧美大波大乳巨大乳| 日韩国产一区二区| 日韩亚洲精品电影| 欧美成人精品欧美一级私黄| 99精品视频网| 国产精品免费视频xxxx| 国产精品一级视频| 成人黄页毛片网站| 日本一区二区免费看| 欧美96在线| 亚洲五码中文字幕| 亚洲国产精品久久久久爰色欲| 国产亚洲欧美日韩精品一区二区三区| 欧美日韩一区二区三区在线 | 国语精品一区| 97精品伊人久久久大香线蕉 | 欧美一区二区成人| 日本性生活一级片| 日韩高清欧美| 97在线视频观看| 真实新婚偷拍xxxxx| 国产精品综合av一区二区国产馆| 久久99精品国产一区二区三区| 经典三级在线| 一区二区三区四区精品在线视频| 韩日午夜在线资源一区二区| 精品三级久久久久久久电影聊斋| 亚洲人吸女人奶水| 99精品人妻少妇一区二区| 日韩av黄色| 亚洲美女精品久久| 国产激情无码一区二区三区| 午夜在线播放视频欧美| 97碰碰视频| 国产网站在线播放| 亚洲大片在线观看| 三上悠亚在线一区二区| 日韩mv欧美mv国产网站| 亚洲成人999| 免费欧美一级片| 国产一区二区三区探花| 欧美激情小视频| 国产精品传媒在线观看| 99视频超级精品| 好吊色这里只有精品| 狠狠久久伊人中文字幕| 精品一区精品二区| 国产一级特黄a高潮片| 捆绑紧缚一区二区三区视频| 免费国产一区二区| 日韩在线免费看| 一区二区三区久久久| 午夜国产一区二区三区| 国产精品xxx| 亚洲国产精品va在线| 男的操女的网站| 久久激情综合网| 视频在线观看成人| 另类图片综合电影| 亚洲精品视频中文字幕| 国产精品第108页| 国内精品写真在线观看| 26uuu成人| 久久天天久久| 日韩中文字幕第一页| 中文人妻熟女乱又乱精品| 国产清纯白嫩初高生在线观看91| 免费观看成人网| 蜜桃一区二区| 久久精品国产欧美激情| 国产女优在线播放| 国产天堂亚洲国产碰碰| 免费在线观看的毛片| 国产伦精品一区二区三区千人斩| 国产成人精品久久二区二区| 91尤物国产福利在线观看| 欧美国产丝袜视频| 亚洲第一狼人区| 999精品一区| 91精品在线播放| 18视频在线观看网站| 日韩一区二区三区电影在线观看| 国产精品99久久久久久成人| 国产精品2024| 欧美一级免费播放| 日韩精品社区| 国产精品黄页免费高清在线观看| 69av亚洲| 日韩免费在线观看| 日韩精品久久久久久久| 99精品国产99久久久久久白柏| 男人日女人bb视频| 夜夜春成人影院| 国产精品久久国产精品99gif| 色的视频在线免费看| 日韩欧美一级二级三级久久久| 久久久久99精品| 久久久国产午夜精品 | 男同在线观看| 欧美综合在线视频| 伊人在线视频观看| 丁香六月综合激情| 亚洲第一在线综合在线| 日韩毛片免费视频一级特黄| 欧美日韩国产91| 天堂中文字幕在线| 亚洲免费在线视频一区 二区| 亚洲制服在线观看| 亚洲理伦在线| 亚洲欧美在线网| 操欧美女人视频| 国产精品高潮呻吟久久av黑人| 国产成人午夜| 亚洲码在线观看| www五月婷婷| 色综合久久久久综合体| 一区二区三区四区五区| 91色在线porny| 911福利视频| 国产精品日韩欧美一区| 在线精品日韩| 日韩三级av| 亚洲bt欧美bt日本bt| 波多视频一区| 欧美成人精品h版在线观看| 免费人成在线观看网站| 欧美一级夜夜爽| 国产成人无码专区| 亚洲自拍偷拍网站| 国产三级精品三级观看| 日本视频一区二区三区| 成人毛片100部免费看| 精品久久国产| 国产精品污www一区二区三区| 精品裸体bbb| 91国产视频在线播放| www国产在线观看 | aiai在线| 亚洲精品国偷自产在线99热| 国产三级自拍视频| 在线精品国精品国产尤物884a | 色综合咪咪久久| 免费看一级一片| 国产精品中文欧美| 日本男人操女人| 亚洲第一毛片| 另类小说综合网| 亚洲国产视频二区| 91精品免费看| julia一区二区三区中文字幕| 午夜精品久久久99热福利| 国产黄色小视频在线| 在线日韩欧美视频| 国产原创av在线| 日韩黄色在线免费观看| 男人天堂手机在线观看| 日韩一区二区在线观看| 国产免费av电影| 欧美日韩一区小说| 亚洲最大成人av| 欧美性猛片xxxx免费看久爱| 无码人妻丰满熟妇区bbbbxxxx| 天天操天天干天天综合网| 日本五十熟hd丰满| 亚洲国产综合91精品麻豆| 欧美精品xxxxx| 亚洲激情成人在线| 精品99久久久久成人网站免费| 亚洲精品水蜜桃| 国模无码国产精品视频| 亚洲精品少妇30p| 丰满少妇高潮久久三区| 一区二区三区四区视频精品免费 | 亚洲一区二区高清| 欧美成人精品激情在线视频| 亚洲综合色丁香婷婷六月图片| 国产人妻精品一区二区三区不卡| 亚洲视频免费看| 久久r这里只有精品| 一区二区欧美国产| 久久久久99精品| 欧美日韩在线视频观看| 中文字幕黄色片| 欧美丝袜丝交足nylons图片| 一级aaaa毛片| 精品三级在线看| 婷婷五月综合激情| 亚洲视频自拍偷拍| 日本在线人成| 欧美国产在线电影| 日韩激情电影| 国产精品香蕉国产| 国产亚洲高清一区| 国产精品自拍首页| 国产99久久久国产精品成人免费 | 香港欧美日韩三级黄色一级电影网站| 91制片厂免费观看| 一区精品久久| www.日本xxxx| 国产乱子轮精品视频| 中文在线一区二区三区| 国产欧美日韩另类一区| 日本黄色片免费观看| 精品国产鲁一鲁一区二区张丽| 黄色av一区二区| 欧美v日韩v国产v| 国产在线视频你懂得| www.久久久久| 日本不卡网站| 成人精品视频99在线观看免费| 黑色丝袜福利片av久久| 亚洲免费视频一区| 狠狠综合久久av一区二区老牛| 国产精品亚洲αv天堂无码| 美女视频黄频大全不卡视频在线播放 | 国产黄a三级三级三级av在线看| 亚州成人av在线| 亚洲伦理一区二区| 孩xxxx性bbbb欧美| 日韩网站中文字幕| av成人综合网| 成人高清电影网站| 国产婷婷一区二区三区| 免费观看30秒视频久久| 91黄色免费视频| 亚洲欧美色一区| 日本a级c片免费看三区| 精品国产人成亚洲区| 亚洲黄色a级片| 这里只有精品在线观看| caoporn国产精品免费视频| 欧美日韩高清区| 日韩电影免费观看高清完整版在线观看| 国产无套精品一区二区| 午夜影院欧美| 午夜两性免费视频| 久久人人爽爽爽人久久久| 国产在线观看免费视频今夜| 欧美日韩在线一区二区| 久久精品a一级国产免视看成人| 欧美激情中文网| 亚洲一区二区av| 视频一区二区三区在线观看| 99精品国产一区二区青青牛奶| 两女双腿交缠激烈磨豆腐| 国产精品午夜在线| 欧美超碰在线观看| 日韩电影中文字幕一区| a在线视频v视频| 亚洲一区美女视频在线观看免费| 日韩中文欧美| 国产乱子伦农村叉叉叉| 国产91丝袜在线播放| 日韩欧美综合视频| 欧美精选午夜久久久乱码6080| 992tv免费直播在线观看| 欧美亚洲国产成人精品| 日韩美女在线看免费观看| 久久99导航| 9久re热视频在线精品| 亚洲成a人无码| 一区二区成人在线| 亚洲第一大网站| 欧美乱大交xxxxx| 中文字幕日本一区| 宅男av一区二区三区| 美日韩一区二区| 福利视频第一页| 欧美精品在线观看播放| 人人干在线视频| 91久久精品美女高潮| 国产精品88久久久久久| www.com污| 亚洲天堂2014| 亚洲黄色一级大片| 高清欧美性猛交| 特黄特色欧美大片| 欧美极品欧美精品欧美图片| 久久综合九色综合久久久精品综合| 欧美日韩一二三四区| 7777精品久久久大香线蕉| 色窝窝无码一区二区三区| 久久免费视频在线| 亚洲精品国模| 视频在线观看免费高清| 亚洲欧美日韩国产成人精品影院| www.xxxx国产| 国模吧一区二区| 校花撩起jk露出白色内裤国产精品| 四虎永久在线精品无码视频| 日本一区二区三区dvd视频在线| 一级黄色录像大片| 欧美国产第一页| 色综合久久中文| 久久精品网站视频| 国产精品国产三级国产aⅴ中文| 国产亲伦免费视频播放| 国模极品一区二区三区| 精品国产欧美日韩| 天堂av.com| 午夜国产精品影院在线观看| 国产剧情在线观看| 5g影院天天爽成人免费下载| 亚洲日本黄色| 国产wwwwxxxx| 精品不卡在线视频| 成人mm视频在线观看| 日本道在线视频| 久久夜色精品一区| 国产美女永久免费| 欧美在线视频在线播放完整版免费观看| 成人一二三区| 任你躁av一区二区三区| 91国偷自产一区二区开放时间 | 天天躁日日躁成人字幕aⅴ| 蜜臀av免费观看| 午夜精品一区二区三区免费视频| 国产美女视频一区二区三区 | 欧美激情在线有限公司| 精品免费视频| 超碰caoprom|