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

解析 Greenplum 數據庫的排序算法

開發 前端
標準快速排序在處理字符串的時候,平均時間復雜度是 N*logN,當字符串擁有相同的前綴時,快速排序仍然需要花費大量的時間去比較這些字符串的相同前綴,而多鍵排序避免了對前綴的重復比較,只使用必要的非前綴字符確定排序。

Sort 節點概覽

排序的樸素含義是將一個數據集按照某種特定的排序方式進行排列的算法,最常見的排列方式是數值順序和字典序。

排序算法的應用非常廣泛,主要分為了兩類:

  • 內排序:在內存中完成的排序,常見的有插入排序、快速排序、堆排序、基數排序等
  • 外排序:數據集過大,內存中無法全部存放,需要借助外存的排序,常見的有歸并排序的各種變形

gpdb 的排序節點會根據查詢計劃中的排序鍵對指定的元組進行排序,根據排序的數據量和其他的一些性質,gpdb 會選擇不同的排序算法:

  • 如果排序節點的工作內存可以容納所有的元組時,排序節點使用快速排序或者堆排序
  • 堆排序主要用于 TopK 查詢,即只需要輸出排序后元組的前 K 個,例如 Sort 節點之上還存在 Limit 節點

如果工作內存無法容納所有的元組,則使用基于歸并排序的外排序算法。

排序節點除了本身對元組排序的功能外,在 gpdb 中的應用也廣泛,查詢優化器還會根據代價選擇基于排序的聚集節點 Group Agg 和連接節點 Merge Join。

此外,Group By,Distinct 等 sql 關鍵字也和排序息息相關。

TupleSort

TupleSort 是 gpdb 各種排序功能的底層實現,各種需要排序的模塊都會使用調用 TupleSort 對元組進行排序。
TupleSort 使用的排序算法如下所示:

排序算法

狀態描述

快速排序

元組集合沒有超過內存容量

堆排序

元組集合沒有超過內存容量,并且是 TopK 查詢

歸并排序(替換選擇+多階段歸并)

元組集合大小超過內存容量

其中快速排序和堆排序都是標準的內存排序算法。

快速排序

快速排序(Quick Sort)是最常見的內存排序算法,由 Tony Hoare 在 1959 年發明。

快速排序的三個步驟:

挑選基準值,從數據集中挑選出一個基準元素,一般稱為 Pivot

分割:將所有比 pivot 小的數據放到 pivot 之前,將所有比 pivot 大的數據放到 pivot 之后

遞歸子序列:遞歸的將小于 pivot 的子序列大于 pivot 的子序列分別進行排序

圖片


圖片

gpdb 中對于快速排序的實現如下:

代碼位置:https://github.com/greenplum-db/gpdb/blob/main/src/backend/utils/sort/gen_qsort_tuple.pl

圖片

堆排序

堆排序也是內存中一種常用的排序算法,堆是一種完全二叉樹

最大堆:對于每個節點,其值大于左右子節點的值

最小堆:對于每個節點,其值小于左右子節點的值

圖片


堆排序算法:

建立最大堆,數組中的最大元素在堆頂

取出堆頂元素,插入到數組中,更新堆

重復第二步,直到堆大小為 0

原始的數組的排列:

圖片

開始建堆:

圖片

進行排序:

圖片

gpdb 中也有對堆排序的實現:

代碼位置:https://github.com/greenplum-db/gpdb/blob/main/src/backend/utils/sort/tuplesort.c#L3525

圖片

外部歸并排序

基于外存的歸并排序主要分為了兩個階段:

  • 分割階段:將原始待排序數據分成若干個順串
  • 合并階段:將所有的小順串合并為包含所有數據的大順串

順串的定義:由于要排序的數據集過大,無法全部在內存中排序,因此只能選擇部分數據在內存中排序,將排好序的部分數據稱為順串

圖片


替換選擇算法

分割階段可以線性掃描一遍數據,當達到內存大小閾值的時候,在內存中排序,生成一個順串。然后再重復的取出原始數據到內存中排序,生成順串,直到原始數據被取完。

這樣生成的順串大小,實際上不會超過內存的大小。如果順串越小,在合并的時候,讀取外存的次數就越多,我們的排序算法的效率就越低。

所以,如何在分割階段 ,盡量生成盡可能大于內存容量的順串,減少合并階段讀取外存的數量?

可以使用替換選擇算法,替換選擇算法借鑒的是掃雪機模型。

想象有一個環形的跑道,跑道上有積雪,假設最開始時積雪的高度為 h,掃雪機不停地向前鏟雪,同時也有新的雪落在跑道上,新的雪一部分落在了掃雪機的前面,一部分落在了掃雪機的后面。假設雪下的速度和掃雪機鏟雪的速度一致,掃雪機掃了一圈之后,掃雪機前面的高度仍然為 h,后面的高度是 0,這樣就達到了一個動態的平衡。

掃雪機前方和后面的積雪就是一個從 0 - h 的斜坡,也就是說路面積雪量就是下圖中直角三角形的面積,并且可以計算出掃雪機鏟雪的量就是這個三角形的兩倍。

圖片


類比掃雪機模型,跑道上的積雪就是替換選擇算法使用的堆,積雪的量就是內存的大小。

輸出當前最小值,生成順串的過程就是鏟雪的過程。順串的大小就是鏟雪量。

新落下的雪就是新的輸入數據,由于輸入隨機,如果輸入大于等于剛輸出的元素,則被加入到堆中,即被掃雪車清除。如果輸入小于剛輸出的元素,則相當于新雪下在了掃雪車的后方,本次鏟雪(順串)不包含該元素。

因此,順串的長度就是鏟雪量,也就是內存大小(跑道上的積雪)的兩倍。

基于此,替換選擇算法的大致過程如下:

  • 初始化階段,將元組讀取到內存中,并根據排序鍵建立最小堆
  • 取出堆頂元組,寫到順串文件的緩沖區,并記錄這個元組的排序鍵是 lastkey
  • 讀取新的元組,如果排序鍵大于 lastkey,則插入到堆中,重新調整堆的順序
  • 如果新元組的排序鍵小于 lastkey,則插入到堆的末尾,并將堆的大小減一
  • 重復第二步,直至堆的大小變為 0
  • 然后重新建堆,再取出新的元組,重復第二步,生成下一個順串

順串合并
假設順串分布在 K 個文件中,如何高效的比較 K 個文件中的最小值,并將其輸出到外部文件中?
敗者樹算法
輸入每個順串的第一個記錄作為敗者樹的葉子節點,建立初始化敗者樹。

兩兩相比較,父親節點存儲了兩個子節點比較的敗者(節點較大的值);勝利者 (較小者)可以參與更高層的比賽。這樣樹的頂端就是當次比較的冠軍(最小者)

調整敗者樹,當我們把最小者輸入到輸出文件以后,需要從相應的順串取出 一個記錄補上去。補回來的時候,我們就需要調整敗者樹,我們只需要沿著當前 節點的父親節點一直比較到頂端。比較的規則是與父親節點比較,勝者可以參與更高層的比較,一直向上,直到根節點。失敗者留在當前節點。

第一次比較:

圖片


第二次比較:

圖片


合并階段如何減少磁盤讀取次數

多路歸并

兩路歸并,使用兩個輸入文件和兩個輸出文件,每次歸并,順串的長度翻倍,并存儲到輸出文件中。下次歸并,輸出緩沖區和輸出緩沖區的位置互換。

下面是一個兩路歸并的例子,每個輸入文件在初始狀態下有 32 個順串,每次歸并,順串的長度翻倍。

圖片


這樣歸并之后,IO 次數是 64 * 6 = 384 次,每個順串移動了 6 次,有沒有什么更好的辦法,可以使順串的移動次數更少?

多相歸并

Knuth 5.4.2 D 多相歸并排序算法。

初始化階段,N+1 個緩沖區,其中 N 個輸入緩沖區,1 個輸出緩沖區,每一個輸入緩沖區包含若干個順串。

從每個輸入緩沖區選取開頭的順串,組成 N 個順串,并對其進行歸并排序,排序結果寫入輸出緩沖區。此時每個輸入緩沖區順串數減 1,輸出緩沖區順串數加 1。

如果任何一個輸入緩沖區的順串數都大于 0,重復第二步

如果所有緩沖區的順串數和大于 1,選擇順串數為 0 的輸入緩沖區作為新的輸出緩沖區,重復第二步

如果所有緩沖區的順串數和為 1,那么這個順串就是排序好的數據集,算法結束

圖片

TupleSort 代碼邏輯

TupleSort 是排序節點的核心,算法主要分為了四個階段:
第一階段
初始化 TupleSort,調用函數 tuplesort_begin_common,生成 Tuplesortstate,Tuplesortstate 用于描述排序的狀態等信息。
其中 status 字段表示當前狀態機的信息

狀態

狀態描述

TSS_INITIAL

未超出工作內存限制,使用內存數組存儲排序元組

TSS_BOUNDED

觸發TopK排序,使用最小值堆存儲待排序元組

TSS_BUILDRUNS

超出工作內存,使用文件存儲待排序元組

TSS_SORTEDINMEM

基于內排序,元組排序完成

TSS_SORTEDONTAPE

外排序完成,排序后元組存儲在文件中

TSS_FINALMERGE

外排序還差最后一步歸并

狀態轉換圖:

圖片


TupleSortstate 中其他的一些重要字段:

類型

字段

說明

TupSortStatus

status

TupleSort狀態機當前狀態

int

nKeys

排序鍵的個數

bool

randomAccess

排序后的元組是否需要隨機訪問,比如反向讀取

bool

bounded

是否是TopK查詢

int

bound

TopK查詢中K的值

int64

availMem

節點目前可用內存

int64

allowedMem

節點工作內存

int

maxTapes

總緩沖區個數

int

tapeRange

輸入緩沖區個數

第二階段
插入元組,每次調用函數 puttuple_common,根據當前 TupleSortstate 的狀態,將元組插入到不同的位置

  • 對于 TSS_INITIAL 狀態,會將元組存儲到內存的 memtuples 中,如果滿足 TopK 的排序條件,會轉為堆排序算法,狀態切換為 TSS_BOUNDED
  • TSS_BOUNDED 狀態:插入到堆中
  • TSS_BUILDRUNS 狀態:外排序算法,基于替換選擇算法,如果元組大于等于堆頂元組,插入當前元組到堆,否則是其他的順串,將其放到 memtuples 末尾

第三階段
調用 tuplesort_performsort 執行實際的排序操作,仍然根據狀態機,選擇不同的排序策略。

  • TSS_INITIAL:所有數據都在內存中,直接執行快速排序,結束后將狀態設置為 TSS_SORTEDINMEM
  • TSS_BOUNDED:所有數據仍然在內存中,執行堆排序,結束后將狀態設置為 TSS_SORTEDINMEM
  • TSS_BUILDRUNS:執行多相歸并排序,函數 mergeruns 負責對順串進行歸并

第四階段
負責輸出排序后的元組,在排序完成后,每次調用 tuplesort_gettuple_common 獲取排序后的元組。
還是會根據不同的狀態選擇不同的策略。

  • TSS_SORTEDINMEM:元組是在內存中排序的,元組本身也在內存中,直接從 memtuples 中獲取即可
  • TSS_SORTEDONTAPE:元組通過歸并排序完成,存儲在外部文件中,因此元組需要從文件中讀取
  • TSS_FINALMERGE:元組存儲在文件中,每個文件有且僅有一個順串,在輸出元組的時候需要進行合并

單鍵排序

gpdb 的排序支持單鍵和多鍵排序兩種,其中單鍵排序基于 TupleSort 接口,多鍵排序基于 TupleSort_mk 接口,排序節點也是標準的執行器三部曲 ExecInitSort、ExecSort、ExecEndSort,但是由于 TupleSort 和 TupleSort_mk 已經封裝了完善的排序邏輯,因此三部曲的邏輯就比較簡單了。

ExecInitSort

初始化的時候,調用 ExecInitSort 方法,主要負責初始化 SortState 結構體。

類型

字段

說明

ScanState

ss

查詢狀態信息

bool

randomAccess

排序后的元組是否需要隨機訪問

bool

bounded

是否是TopK查詢

int64

bound

TopK查詢中K的值

bool

sort_Done

排序步驟是否完成

GenericTupStore*

tuplesortstate

根據排序算法類型,指向Tuplesortstate或者Tuplesortstate_mk

bool

delayEagerFree

某個Segment的排序節點輸出最后一條元組后是否可以提前釋放內存


ExecSort

ExecSort 負責傳遞元組給下層節點排序,并將排好序的數據返回給上層節點。
ExecSort 的第一次調用會讀取所有的元組并傳遞給 TupleSort 排序。

/*
* Scan the subplan and feed all the tuples to tuplesort.
*/

for (;;)
{
slot = ExecProcNode(outerNode);

if (TupIsNull(slot))
break;

tuplesort_puttupleslot(tuplesortstate, slot);
}

SIMPLE_FAULT_INJECTOR("execsort_before_sorting");

/*
* Complete the sort.
*/
tuplesort_performsort(tuplesortstate);

后續每次調用 ExecSort,都會返回排序后的元組。

SO1_printf("ExecSort: %s\n",
"retrieving tuple from tuplesort");

/*
* Get the first or next tuple from tuplesort. Returns NULL if no more
* tuples. Note that we only rely on slot tuple remaining valid until the
* next fetch from the tuplesort.
*/
slot = node->ss.ps.ps_ResultTupleSlot;
(void) tuplesort_gettupleslot(tuplesortstate,
ScanDirectionIsForward(dir),
false, slot, NULL);


ExecEndSort

ExecEndSort 的邏輯比較簡單,主要就是清理掃描和排序結果,以及清理外排序的臨時文件。

/* clean out the tuple table */
ExecClearTuple(node->ss.ss_ScanTupleSlot);

/* must drop pointer to sort result tuple */
ExecClearTuple(node->ss.ps.ps_ResultTupleSlot);

if (node->tuplesortstate != NULL)
{
/*
* Save stats like in ExecSortExplainEnd, so that we can display
* them later in EXPLAIN ANALYZE.
*/
tuplesort_finalize_stats(node->tuplesortstate,
&node->sortstats);
if (node->ss.ps.instrument)
{
node->ss.ps.instrument->workfileCreated = (node->sortstats.spaceType == SORT_SPACE_TYPE_DISK);
node->ss.ps.instrument->workmemused = node->sortstats.workmemused;
node->ss.ps.instrument->execmemused = node->sortstats.execmemused;
}

tuplesort_end((Tuplesortstate *) node->tuplesortstate);
node->tuplesortstate = NULL;
}


多鍵排序

gpdb 中特有的排序方式,針對具有相同前綴的字符串排序的優化。

多鍵排序算法又被稱為三路基數排序,融合了快速排序和基數排序的排序算法,主要的優勢在于對具有相同前綴的字符串進行更高效的排序。

多鍵排序的流程和單鍵排序的三部曲類似,但底層基于 TupleSort_mk 接口。

標準快速排序在處理字符串的時候,平均時間復雜度是 N*logN,當字符串擁有相同的前綴時,快速排序仍然需要花費大量的時間去比較這些字符串的相同前綴,而多鍵排序避免了對前綴的重復比較,只使用必要的非前綴字符確定排序。

在現實世界中,具有相同前綴的字符串的場景還是很多的,例如很多的 URL 都以 http:// 開頭,每個具體的站點都有自己特定的前綴,例如 https://www.baidu.com。

下面是一個多鍵排序的示例:

圖片


注意:從 postgres12 開始,已經自帶了多鍵排序,因此目前 gpdb 當中已經刪除了對應的 tuplesort_mk 的邏輯。

責任編輯:武曉燕 來源: roseduan寫字的地方
相關推薦

2011-08-22 09:55:30

SQL Server 排序

2021-01-08 05:27:49

數據庫拉鏈表存儲

2011-03-07 15:54:30

2011-03-17 17:06:38

數據庫發展方向

2011-08-02 15:04:49

2010-07-01 11:14:36

SQL Server

2023-09-26 22:22:30

選擇排序Python

2009-08-11 17:30:46

2010-05-13 14:14:45

2009-10-29 17:03:42

2010-04-06 11:30:09

Oracle 數據庫

2011-04-02 14:38:42

SQL數據庫算法

2010-05-11 18:14:52

Mysql數據庫編碼

2022-01-08 20:03:20

數據庫特點架構

2009-06-30 15:02:41

磁盤排序Oracle數據庫性能

2010-07-21 10:27:49

SQL Server

2010-06-18 12:45:20

SQL Server數

2011-05-24 13:06:14

數據庫設計敏捷

2011-03-02 17:09:20

2011-08-22 16:08:46

IOS開發數據庫
點贊
收藏

51CTO技術棧公眾號

欧美疯狂性受xxxxx喷水图片| 国产精品国产馆在线真实露脸| 97在线观看免费| www.自拍偷拍| 日韩欧美2区| 依依成人精品视频| 欧美凹凸一区二区三区视频| 中文字幕在线观看视频一区| 国产精品v亚洲精品v日韩精品 | 日本三级在线播放完整版| 国产美女在线精品| 青草青草久热精品视频在线网站| 亚洲人与黑人屁股眼交| 秋霞在线一区| 91精品国产综合久久久久久漫画| 国产乱子伦农村叉叉叉| 免费黄网站在线| 久久久天堂av| 国产精品免费看一区二区三区| 久久久久久无码精品大片| 欧美精品一线| 日韩在线免费视频| 亚洲午夜久久久久久久久红桃 | 伊人色综合一区二区三区影院视频| 国产精品国产三级国产专播品爱网| 国产欧美精品一区二区三区| 国产精品视频第一页| 日日嗨av一区二区三区四区| 性色av一区二区三区在线观看| 亚洲色偷偷综合亚洲av伊人| 国产免费久久| 亚洲毛片在线看| 手机免费看av片| 国产不卡精品在线| 欧美性猛交xxxxxxxx| 97成人在线观看视频| 男插女视频久久久| 日韩美女视频一区二区| 亚洲国产欧美不卡在线观看| 男女污视频在线观看| www.久久久久久久久| 春色成人在线视频| 性色av蜜臀av| 国产高清精品久久久久| 91手机视频在线观看| 亚洲在线观看av| 美国十次了思思久久精品导航| 日韩av123| 亚洲欧美一区二区三区在线观看| 国产精品呻吟| 欧美一级大片视频| 在线视频一区二区三区四区| 亚洲欧美清纯在线制服| 欧美最近摘花xxxx摘花| 91video| 男人的天堂亚洲| 日本一区二区三区四区视频| 神马久久久久久久| 日韩高清不卡在线| 国产精品综合网站| 艳妇乳肉豪妇荡乳av| 老司机午夜精品| 成人国产精品一区二区| 国产精品久久久久久免费免熟| 久久精品国产久精国产爱| 91九色国产在线| www男人的天堂| 超黄网站在线观看| 一级黄色大片免费| 亚洲视频一区| 992tv在线成人免费观看| 国产又爽又黄的视频| 国产美女一区| 国产精品入口免费视频一| 夜夜狠狠擅视频| 国产成人自拍网| 国精产品99永久一区一区| 水中色av综合| 欧美国产成人在线| 丰满女人性猛交| 变态调教一区二区三区| 日韩欧美高清在线视频| 69久久久久久| 高潮久久久久久久久久久久久久 | 国产精品色悠悠| 国产老女人乱淫免费| 成人美女视频在线看| 欧美久久在线| 免费网站成人| 精品动漫一区二区三区| 黄色三级视频在线| swag国产精品一区二区| 国产亚洲综合久久| 老女人性淫交视频| 日韩影院精彩在线| 91免费看片在线| 欧洲伦理片一区 二区 三区| 综合婷婷亚洲小说| 欧美日韩国产精品激情在线播放| 成人深夜福利| 亚洲第一中文字幕| 国产免费嫩草影院| 亚洲一区二区三区高清不卡| 91在线视频九色| 免费在线高清av| 亚洲一区二区影院| 五月婷婷丁香综合网| 红杏成人性视频免费看| xvideos成人免费中文版| 国产又色又爽又黄的| 国内精品写真在线观看| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | av播放在线| 午夜国产不卡在线观看视频| 国产性生活一级片| 欧美精选视频在线观看| 69精品小视频| 不卡的日韩av| 最新日韩在线视频| 天堂在线资源视频| 天天做夜夜做人人爱精品| 欧美久久久精品| 亚洲特级黄色片| 久久精品在这里| 99视频在线免费播放| 欧美成年网站| 久久久国产影院| 成人一级免费视频| 久久久91精品国产一区二区三区| 日韩中字在线观看| 一区二区三区四区高清视频| 日韩视频免费在线| 中文在线资源天堂| 国产拍揄自揄精品视频麻豆| 久久婷婷国产精品| 天天躁日日躁成人字幕aⅴ| 久久久亚洲国产| 成人午夜福利视频| 一区二区三区日韩欧美| 天天操夜夜操很很操| 亚洲蜜桃视频| 91精品国产91久久久久青草| 毛片av在线| 欧美一区二区三区四区高清| 欧美 日韩 国产 一区二区三区| 精品亚洲porn| 在线精品日韩| 91视频亚洲| 粗暴蹂躏中文一区二区三区| 国产露脸国语对白在线| 中文字幕一区二区三区色视频| 色综合天天色综合| 欧美电影三区| 国产在线视频不卡| 美女隐私在线观看| 日韩一级大片在线观看| 久久久久久久九九九九| 成人深夜福利app| 国产黄视频在线| 国产传媒欧美日韩成人精品大片| 国产成人一区二| 欧美18hd| 精品久久久久av影院| 日韩成年人视频| 久久奇米777| 亚洲黄色av网址| 久久久精品久久久久久96| 51国偷自产一区二区三区的来源 | 激情亚洲一区二区三区四区| 中文人妻一区二区三区| 日本一不卡视频| 国产奶头好大揉着好爽视频| 亚洲综合网站| 国产精品18久久久久久首页狼 | 综合av第一页| www.四虎精品| 久久久久国内| 中文精品一区二区三区| 风间由美性色一区二区三区四区 | 免费一级a毛片| 亚洲日本在线天堂| 中文字幕天堂网| 强制捆绑调教一区二区| 91免费版看片| 九九热精品视频在线观看| 91久久久久久久久| аⅴ资源天堂资源库在线| 精品视频中文字幕| 国产免费一区二区三区最新不卡| 亚洲777理论| 黄大色黄女片18免费| 国产成人高清在线| 国产裸体免费无遮挡| 欧美极品一区二区三区| 日本在线观看一区| 国产成人福利av| 国产精品老女人视频| 福利成人导航| 精品国产一区二区三区久久| 亚洲色大成网站www| 6080午夜不卡| 亚洲成人第一网站| 亚洲成人免费电影| 久久精品色妇熟妇丰满人妻| 99久久久国产精品| 久久久精品视频国产| 老司机午夜精品视频在线观看| 欧美性猛交内射兽交老熟妇| 欧美在线观看视频一区| 精品国产乱码久久久久久蜜柚| 亚洲ww精品| 国产不卡在线观看| h片在线观看下载| 欧美大尺度激情区在线播放| 国产玉足榨精视频在线观看| 亚洲成色777777女色窝| 99久久精品无免国产免费| 欧美性受极品xxxx喷水| 亚洲男人第一av| 亚洲高清免费观看高清完整版在线观看| 91视频免费在观看| 91蝌蚪国产九色| 国产十八熟妇av成人一区| 国产一区二区剧情av在线| 中文字幕亚洲乱码| 日日夜夜免费精品视频| 国产网站免费在线观看| 1024日韩| 男女日批视频在线观看| 欧美久久综合| 国产在线xxxx| 欧美先锋影音| 丁香色欲久久久久久综合网| 天天影视欧美综合在线观看| 亚洲成人av动漫| 欧美一级本道电影免费专区| 日韩福利视频| 精品美女久久| 日韩欧美一区二区三区四区| 欧美男男gaytwinkfreevideos| 欧美福利精品| 国际精品欧美精品| 日本一区不卡| 日韩大片在线| 杨幂一区欧美专区| 外国成人激情视频| 干日本少妇视频| 午夜欧美精品| 国产欧美精品aaaaaa片| 亚洲黄色一区| 黄色免费视频大全| 天堂久久久久va久久久久| 免费在线观看毛片网站| 丝袜诱惑亚洲看片| 日本激情视频在线播放| 国产一区二区日韩精品| 美女流白浆视频| 91香蕉国产在线观看软件| 成年人网站免费在线观看| 日本一区二区成人| 婷婷社区五月天| 亚洲综合一区在线| 毛片视频网站在线观看| 欧美偷拍一区二区| 国产女同91疯狂高潮互磨| 精品国产sm最大网站| 亚洲欧洲精品视频| 中文字幕亚洲一区| 欧美78videosex性欧美| 欧美一级片在线播放| 99精品在免费线偷拍| 亚洲wwwav| 日韩美女毛片| 国产a级片免费看| 亚洲大胆在线| 日本久久久久久久久久久久| 国产精品456| 国产女主播喷水高潮网红在线| 亚洲国产精品高清| 久久久久久久国产精品毛片| 一本大道久久a久久综合| 97超碰资源站| 亚洲精品国产精品久久清纯直播| 九九在线视频| 欧美精品www| 澳门av一区二区三区| 96精品久久久久中文字幕| 窝窝社区一区二区| 中文字幕欧美人与畜| 一本一道久久综合狠狠老精东影业| caoporn超碰97| 高清shemale亚洲人妖| 国产 欧美 在线| 一区二区日韩av| 免费黄色一级大片| 亚洲福利视频二区| 在线免费黄色| 欧美一性一乱一交一视频| 国产一区一区| 日韩在线三级| 亚洲人体偷拍| 国产黄色一区二区三区| 91免费视频大全| 欧美成人精品欧美一级| 在线观看不卡视频| 五月天久久久久久| 蜜月aⅴ免费一区二区三区| 婷婷综合六月| 好吊妞www.84com只有这里才有精品 | 午夜精品成人av| 国产精品三区四区| 88国产精品视频一区二区三区| 国产亚洲精品网站| 丁香天五香天堂综合| 午夜爽爽爽男女免费观看| 日本道精品一区二区三区| 日日夜夜精品免费| 欧美日本高清视频| 伊人久久一区| 亚洲精品美女久久7777777| 免费亚洲视频| 午夜av免费看| 午夜久久久影院| 亚洲精品久久久久久久久久久久久久| 最近2019年好看中文字幕视频| 美女网站在线看| 精品产品国产在线不卡| 国产精品草草| 永久免费黄色片| 成人免费在线视频| 一级特黄aaa大片在线观看| 中文日韩在线观看| 播放一区二区| 五月天亚洲综合情| 日韩电影在线一区二区| 魔女鞋交玉足榨精调教| 黑人巨大精品欧美一区免费视频 | julia中文字幕一区二区99在线| 91成人在线视频观看| 国产在线精品国自产拍免费| 中文字幕无码日韩专区免费| 欧美男生操女生| 国产传媒在线播放| 亚洲自拍偷拍色片视频| 午夜欧美精品| 亚洲av成人片无码| 精品久久久国产| 美州a亚洲一视本频v色道| 国产mv免费观看入口亚洲| 国产欧美日韩| 国产视频1区2区3区| 中文字幕亚洲区| 国产又黄又爽视频| 欧美成人免费大片| 北条麻妃一区二区三区在线| 人妻无码久久一区二区三区免费| 成人福利电影精品一区二区在线观看| 久久精品视频8| 亚洲免费福利视频| 91九色综合| www.-级毛片线天内射视视| 国产成人免费视频网站高清观看视频 | 国产精品成人a在线观看| 亚洲av毛片在线观看| 亚洲午夜精品网| 日本一本草久在线中文| 国产精品免费看久久久香蕉| 国产精品99在线观看| 国产大学生视频| 日本精品视频一区二区| 欧美日韩在线看片| 成人影片在线播放| 美女被久久久| 多男操一女视频| 精品国产免费人成在线观看| 都市激情综合| 欧美三级午夜理伦三级老人| 播五月开心婷婷综合| 午夜视频网站在线观看| 欧美日本中文字幕| 国产九一精品| 一级黄色大片免费看| 在线亚洲欧美专区二区| 亚洲h片在线看| 日韩精品电影网站| 国产盗摄女厕一区二区三区| 少妇高潮av久久久久久| 美女av一区二区三区| 蜜桃tv一区二区三区| 中文字幕乱妇无码av在线| 色丁香久综合在线久综合在线观看| 国产在线观看a| 欧美精品亚洲| 国产福利一区二区三区视频| 日韩免费av网站| 久久人91精品久久久久久不卡| 欧美综合一区| 亚洲色图14p| 日韩欧美国产电影| 另类一区二区|