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

ElasticSearch深度分頁解決方案

開發 前端
Elasticsearch 是一個實時的分布式搜索與分析引擎,在使用過程中,有一些典型的使用場景,比如分頁、遍歷等。

[[427106]]

前言

Elasticsearch 是一個實時的分布式搜索與分析引擎,在使用過程中,有一些典型的使用場景,比如分頁、遍歷等。

在使用關系型數據庫中,我們被告知要注意甚至被明確禁止使用深度分頁,同理,在 Elasticsearch 中,也應該盡量避免使用深度分頁。

這篇文章主要介紹 Elasticsearch 中分頁相關內容!

From/Size參數

在ES中,分頁查詢默認返回最頂端的10條匹配hits。

如果需要分頁,需要使用from和size參數。

from參數定義了需要跳過的hits數,默認為0;

size參數定義了需要返回的hits數目的最大值。

一個基本的ES查詢語句是這樣的:

  1. POST /my_index/my_type/_search 
  2.     "query": { "match_all": {}}, 
  3.     "from": 100, 
  4.     "size":  10 

上面的查詢表示從搜索結果中取第100條開始的10條數據。

「那么,這個查詢語句在ES集群內部是怎么執行的呢?」

在ES中,搜索一般包括兩個階段,query 和 fetch 階段,可以簡單的理解,query 階段確定要取哪些doc,fetch 階段取出具體的 doc。

Query階段

如上圖所示,描述了一次搜索請求的 query 階段:·

  1. Client 發送一次搜索請求,node1 接收到請求,然后,node1 創建一個大小為from + size的優先級隊列用來存結果,我們管 node1 叫 coordinating node。
  2. coordinating node將請求廣播到涉及到的 shards,每個 shard 在內部執行搜索請求,然后,將結果存到內部的大小同樣為from + size 的優先級隊列里,可以把優先級隊列理解為一個包含top N結果的列表。
  3. 每個 shard 把暫存在自身優先級隊列里的數據返回給 coordinating node,coordinating node 拿到各個 shards 返回的結果后對結果進行一次合并,產生一個全局的優先級隊列,存到自身的優先級隊列里。

在上面的例子中,coordinating node 拿到(from + size) * 6條數據,然后合并并排序后選擇前面的from + size條數據存到優先級隊列,以便 fetch 階段使用。

另外,各個分片返回給 coordinating node 的數據用于選出前from + size條數據,所以,只需要返回唯一標記 doc 的_id以及用于排序的_score即可,這樣也可以保證返回的數據量足夠小。

coordinating node 計算好自己的優先級隊列后,query 階段結束,進入 fetch 階段。

Fetch階段

query 階段知道了要取哪些數據,但是并沒有取具體的數據,這就是 fetch 階段要做的。

上圖展示了 fetch 過程:

  1. coordinating node 發送 GET 請求到相關shards。
  2. shard 根據 doc 的_id取到數據詳情,然后返回給 coordinating node。
  3. coordinating node 返回數據給 Client。

coordinating node 的優先級隊列里有from + size 個_doc _id,但是,在 fetch 階段,并不需要取回所有數據,在上面的例子中,前100條數據是不需要取的,只需要取優先級隊列里的第101到110條數據即可。

需要取的數據可能在不同分片,也可能在同一分片,coordinating node 使用 「multi-get」 來避免多次去同一分片取數據,從而提高性能。

「這種方式請求深度分頁是有問題的:」

我們可以假設在一個有 5 個主分片的索引中搜索。當我們請求結果的第一頁(結果從 1 到 10 ),每一個分片產生前 10 的結果,并且返回給 協調節點 ,協調節點對 50 個結果排序得到全部結果的前 10 個。

現在假設我們請求第 1000 頁—結果從 10001 到 10010 。所有都以相同的方式工作除了每個分片不得不產生前10010個結果以外。然后協調節點對全部 50050 個結果排序最后丟棄掉這些結果中的 50040 個結果。

「對結果排序的成本隨分頁的深度成指數上升。」

「注意1:」

size的大小不能超過index.max_result_window這個參數的設置,默認為10000。

如果搜索size大于10000,需要設置index.max_result_window參數

  1. PUT _settings 
  2.     "index": { 
  3.         "max_result_window""10000000" 
  4.     } 
  5. }   

「注意2:」

_doc將在未來的版本移除,詳見:

  • https://www.elastic.co/cn/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0
  • https://elasticsearch.cn/article/158

深度分頁問題

Elasticsearch 的From/Size方式提供了分頁的功能,同時,也有相應的限制。

舉個例子,一個索引,有10億數據,分10個 shards,然后,一個搜索請求,from=1000000,size=100,這時候,會帶來嚴重的性能問題:CPU,內存,IO,網絡帶寬。

在 query 階段,每個shards需要返回 1000100 條數據給 coordinating node,而 coordinating node 需要接收10 * 1000,100 條數據,即使每條數據只有 _doc _id 和 _score,這數據量也很大了?

「在另一方面,我們意識到,這種深度分頁的請求并不合理,因為我們是很少人為的看很后面的請求的,在很多的業務場景中,都直接限制分頁,比如只能看前100頁。」

比如,有1千萬粉絲的微信大V,要給所有粉絲群發消息,或者給某省粉絲群發,這時候就需要取得所有符合條件的粉絲,而最容易想到的就是利用 from + size 來實現,不過,這個是不現實的,這時,可以采用 Elasticsearch 提供的其他方式來實現遍歷。

深度分頁問題大致可以分為兩類:

  • 「隨機深度分頁:隨機跳轉頁面」
  • 「滾動深度分頁:只能一頁一頁往下查詢」

「下面介紹幾個官方提供的深度分頁方法」

Scroll

Scroll遍歷數據

我們可以把scroll理解為關系型數據庫里的cursor,因此,scroll并不適合用來做實時搜索,而更適合用于后臺批處理任務,比如群發。

這個分頁的用法,「不是為了實時查詢數據」,而是為了「一次性查詢大量的數據(甚至是全部的數據」)。

因為這個scroll相當于維護了一份當前索引段的快照信息,這個快照信息是你執行這個scroll查詢時的快照。在這個查詢后的任何新索引進來的數據,都不會在這個快照中查詢到。

但是它相對于from和size,不是查詢所有數據然后剔除不要的部分,而是記錄一個讀取的位置,保證下一次快速繼續讀取。

不考慮排序的時候,可以結合SearchType.SCAN使用。

scroll可以分為初始化和遍歷兩部,初始化時將「所有符合搜索條件的搜索結果緩存起來(注意,這里只是緩存的doc_id,而并不是真的緩存了所有的文檔數據,取數據是在fetch階段完成的)」,可以想象成快照。

在遍歷時,從這個快照里取數據,也就是說,在初始化后,對索引插入、刪除、更新數據都不會影響遍歷結果。

「基本使用」

  1. POST /twitter/tweet/_search?scroll=1m 
  2.     "size": 100, 
  3.     "query": { 
  4.         "match" : { 
  5.             "title" : "elasticsearch" 
  6.         } 
  7.     } 

初始化指明 index 和 type,然后,加上參數 scroll,表示暫存搜索結果的時間,其它就像一個普通的search請求一樣。

會返回一個_scroll_id,_scroll_id用來下次取數據用。

「遍歷」

  1. POST /_search?scroll=1m 
  2.     "scroll_id":"XXXXXXXXXXXXXXXXXXXXXXX I am scroll id XXXXXXXXXXXXXXX" 

這里的scroll_id即 上一次遍歷取回的_scroll_id或者是初始化返回的_scroll_id,同樣的,需要帶 scroll 參數。

重復這一步驟,直到返回的數據為空,即遍歷完成。

「注意,每次都要傳參數 scroll,刷新搜索結果的緩存時間」。另外,「不需要指定 index 和 type」。

設置scroll的時候,需要使搜索結果緩存到下一次遍歷完成,「同時,也不能太長,畢竟空間有限。」

「優缺點」

缺點:

「scroll_id會占用大量的資源(特別是排序的請求)」

同樣的,scroll后接超時時間,頻繁的發起scroll請求,會出現一些列問題。

「是生成的歷史快照,對于數據的變更不會反映到快照上。」

「優點:」

適用于非實時處理大量數據的情況,比如要進行數據遷移或者索引變更之類的。

Scroll Scan

ES提供了scroll scan方式進一步提高遍歷性能,但是scroll scan不支持排序,因此scroll scan適合不需要排序的場景

「基本使用」

Scroll Scan 的遍歷與普通 Scroll 一樣,初始化存在一點差別。

  1. POST /my_index/my_type/_search?search_type=scan&scroll=1m&size=50 
  2.  "query": { "match_all": {}} 

需要指明參數:

  • search_type:賦值為scan,表示采用 Scroll Scan 的方式遍歷,同時告訴 Elasticsearch 搜索結果不需要排序。
  • scroll:同上,傳時間。
  • size:與普通的 size 不同,這個 size 表示的是每個 shard 返回的 size 數,最終結果最大為 number_of_shards * size。

「Scroll Scan與Scroll的區別」

Scroll-Scan結果「沒有排序」,按index順序返回,沒有排序,可以提高取數據性能。

初始化時只返回 _scroll_id,沒有具體的hits結果

size控制的是每個分片的返回的數據量,而不是整個請求返回的數據量。

Sliced Scroll

如果你數據量很大,用Scroll遍歷數據那確實是接受不了,現在Scroll接口可以并發來進行數據遍歷了。

每個Scroll請求,可以分成多個Slice請求,可以理解為切片,各Slice獨立并行,比用Scroll遍歷要快很多倍。

  1. POST /index/type/_search?scroll=1m 
  2.     "query": { "match_all": {}}, 
  3.     "slice": { 
  4.         "id": 0, 
  5.         "max": 5 
  6.     }    
  7.   
  8. POST ip:port/index/type/_search?scroll=1m 
  9.     "query": { "match_all": {}}, 
  10.     "slice": { 
  11.         "id": 1, 
  12.         "max": 5 
  13.     }    

上邊的示例可以單獨請求兩塊數據,最終五塊數據合并的結果與直接scroll scan相同。

其中max是分塊數,id是第幾塊。

官方文檔中建議max的值不要超過shard的數量,否則可能會導致內存爆炸。

Search After

Search_after是 ES 5 新引入的一種分頁查詢機制,其原理幾乎就是和scroll一樣,因此代碼也幾乎是一樣的。

「基本使用:」

第一步:

  1. POST twitter/_search 
  2.     "size": 10, 
  3.     "query": { 
  4.         "match" : { 
  5.             "title" : "es" 
  6.         } 
  7.     }, 
  8.     "sort": [ 
  9.         {"date""asc"}, 
  10.         {"_id""desc"
  11.     ] 

返回出的結果信息 :

  1.       "took" : 29, 
  2.       "timed_out" : false
  3.       "_shards" : { 
  4.         "total" : 1, 
  5.         "successful" : 1, 
  6.         "skipped" : 0, 
  7.         "failed" : 0 
  8.       }, 
  9.       "hits" : { 
  10.         "total" : { 
  11.           "value" : 5, 
  12.           "relation" : "eq" 
  13.         }, 
  14.         "max_score" : null
  15.         "hits" : [ 
  16.           { 
  17.             ... 
  18.             }, 
  19.             "sort" : [ 
  20.               ... 
  21.             ] 
  22.           }, 
  23.           { 
  24.             ... 
  25.             }, 
  26.             "sort" : [ 
  27.               124648691, 
  28.               "624812" 
  29.             ] 
  30.           } 
  31.         ] 
  32.       } 
  33.     } 

上面的請求會為每一個文檔返回一個包含sort排序值的數組。

這些sort排序值可以被用于search_after參數里以便抓取下一頁的數據。

比如,我們可以使用最后的一個文檔的sort排序值,將它傳遞給search_after參數:

  1. GET twitter/_search 
  2.     "size": 10, 
  3.     "query": { 
  4.         "match" : { 
  5.             "title" : "es" 
  6.         } 
  7.     }, 
  8.     "search_after": [124648691, "624812"], 
  9.     "sort": [ 
  10.         {"date""asc"}, 
  11.         {"_id""desc"
  12.     ] 

若我們想接著上次讀取的結果進行讀取下一頁數據,第二次查詢在第一次查詢時的語句基礎上添加search_after,并指明從哪個數據后開始讀取。

「基本原理」

es維護一個實時游標,它以上一次查詢的最后一條記錄為游標,方便對下一頁的查詢,它是一個無狀態的查詢,因此每次查詢的都是最新的數據。

由于它采用記錄作為游標,因此「SearchAfter要求doc中至少有一條全局唯一變量(每個文檔具有一個唯一值的字段應該用作排序規范)」

「優缺點」

「優點:」

無狀態查詢,可以防止在查詢過程中,數據的變更無法及時反映到查詢中。

不需要維護scroll_id,不需要維護快照,因此可以避免消耗大量的資源。

「缺點:」

由于無狀態查詢,因此在查詢期間的變更可能會導致跨頁面的不一值。

排序順序可能會在執行期間發生變化,具體取決于索引的更新和刪除。

至少需要制定一個唯一的不重復字段來排序。

它不適用于大幅度跳頁查詢,或者全量導出,對第N頁的跳轉查詢相當于對es不斷重復的執行N次search after,而全量導出則是在短時間內執行大量的重復查詢。

SEARCH_AFTER不是自由跳轉到任意頁面的解決方案,而是并行滾動多個查詢的解決方案。

總結

分頁方式 性能 優點 缺點 場景

from + size 低 靈活性好,實現簡單 深度分頁問題 數據量比較小,能容忍深度分頁問題

scroll 中 解決了深度分頁問題 無法反應數據的實時性(快照版本)維護成本高,需要維護一個 scroll_id 海量數據的導出需要查詢海量結果集的數據

search_after 高 性能最好不存在深度分頁問題能夠反映數據的實時變更 實現復雜,需要有一個全局唯一的字段連續分頁的實現會比較復雜,因為每一次查詢都需要上次查詢的結果,它不適用于大幅度跳頁查詢 海量數據的分頁

ES7版本變更

參照:https://www.elastic.co/guide/en/elasticsearch/reference/master/paginate-search-results.html#scroll-search-results

在7.*版本中,ES官方不再推薦使用Scroll方法來進行深分頁,而是推薦使用帶PIT的search_after來進行查詢;

從7.*版本開始,您可以使用SEARCH_AFTER參數通過上一頁中的一組排序值檢索下一頁命中。

使用SEARCH_AFTER需要多個具有相同查詢和排序值的搜索請求。

如果這些請求之間發生刷新,則結果的順序可能會更改,從而導致頁面之間的結果不一致。

為防止出現這種情況,您可以創建一個時間點(PIT)來在搜索過程中保留當前索引狀態。

POST /my-index-000001/_pit?keep_alive=1m

返回一個PIT ID:

{

"id": "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA=="

}

在搜索請求中指定PIT:

GET /_search

{

"size": 10000,

"query": {

"match" : {

"user.id" : "elkbee"

}

},

"pit": {

"id": "46ToAwMDaWR5BXV1aWQyKwZub2RlXzMAAAAAAAAAACoBYwADaWR4BXV1aWQxAgZub2RlXzEAAAAAAAAAAAEBYQADaWR5BXV1aWQyKgZub2RlXzIAAAAAAAAAAAwBYgACBXV1aWQyAAAFdXVpZDEAAQltYXRjaF9hbGw_gAAAAA==",

"keep_alive": "1m"

},

"sort": [

{"@timestamp": {"order": "asc", "format": "strict_date_optional_time_nanos", "numeric_type" : "date_nanos" }}

]

}

性能對比

分別分頁獲取1 - 10,49000 - 49010,99000 - 99010范圍各10條數據(前提10w條),性能大致是這樣:

圖片

向前翻頁

對于向前翻頁,ES中沒有相應API,但是根據官方說法(https://github.com/elastic/elasticsearch/issues/29449),ES中的向前翻頁問題可以通過翻轉排序方式來實現即:

對于某一頁,正序search_after該頁的最后一條數據id為下一頁,則逆序search_after該頁的第一條數據id則為上一頁。

國內論壇上,有人使用緩存來解決上一頁的問題:https://elasticsearch.cn/question/7711

圖片

總結

如果數據量小(from+size在10000條內),或者只關注結果集的TopN數據,可以使用from/size 分頁,簡單粗暴

數據量大,深度翻頁,后臺批處理任務(數據遷移)之類的任務,使用 scroll 方式

數據量大,深度翻頁,用戶實時、高并發查詢需求,使用 search after 方式

個人思考

Scroll和search_after原理基本相同,他們都采用了游標的方式來進行深分頁。

這種方式雖然能夠一定程度上解決深分頁問題。但是,它們并不是深分頁問題的終極解決方案,深分頁問題「必須避免!!」。

對于Scroll,無可避免的要維護scroll_id和歷史快照,并且,還必須保證scroll_id的存活時間,這對服務器是一個巨大的負荷。

對于Search_After,如果允許用戶大幅度跳轉頁面,會導致短時間內頻繁的搜索動作,這樣的效率非常低下,這也會增加服務器的負荷,同時,在查詢過程中,索引的增刪改會導致查詢數據不一致或者排序變化,造成結果不準確。

Search_After本身就是一種業務折中方案,它不允許指定跳轉到頁面,而只提供下一頁的功能。

Scroll默認你會在后續將所有符合條件的數據都取出來,所以,它只是搜索到了所有的符合條件的doc_id(這也是為什么官方推薦用doc_id進行排序,因為本身緩存的就是doc_id,如果用其他字段排序會增加查詢量),并將它們排序后保存在協調節點(coordinate node),但是并沒有將所有數據進行fetch,而是每次scroll,讀取size個文檔,并返回此次讀取的最后一個文檔以及上下文狀態,用以告知下一次需要從哪個shard的哪個文檔之后開始讀取。

這也是為什么官方不推薦scroll用來給用戶進行實時的分頁查詢,而是適合于大批量的拉取數據,因為它從設計上就不是為了實時讀取數據而設計的。

 

責任編輯:武曉燕 來源: 月伴飛魚
相關推薦

2015-05-12 16:31:22

Elasticsear開源分布式搜索引擎

2023-11-29 08:35:28

群多租戶ES運維

2009-09-15 21:21:54

IT服務運維管理摩卡軟件

2025-04-27 02:22:00

分頁項目開發

2024-08-02 09:36:03

2016-10-25 14:18:59

分頁javascriptminiui

2023-06-30 09:42:23

自動駕駛技術

2009-07-15 17:00:49

JDBC查詢

2018-07-03 15:56:59

騰訊

2025-06-09 07:45:00

2018-12-03 12:26:30

YADRO解決方案

2018-12-03 11:59:42

Inventec解決方案

2018-12-03 12:13:21

Mellanox解決方案

2018-12-03 12:17:27

Semptian解決方案

2012-05-27 16:21:31

IDC華為

2016-03-13 17:58:57

2024-09-26 14:27:14

2025-04-03 00:03:00

數據內存網絡

2016-03-13 17:35:18

2011-12-09 11:13:17

點贊
收藏

51CTO技術棧公眾號

亚洲免费人成在线视频观看| 中文乱码免费一区二区 | 天天摸天天干天天操| 欧美日韩三级| 欧美一区二区三区婷婷月色| 久久综合亚洲精品| 午夜小视频在线播放| 丝袜诱惑亚洲看片| 大量国产精品视频| 国产黄色三级网站| 欧美日韩视频免费看| 亚洲黄色av一区| 欧美精品亚洲| 国产精品老熟女视频一区二区| 欧美日韩综合| 夜夜嗨av一区二区三区免费区| 毛片毛片毛片毛| 黄色污网站在线观看| 国产精品毛片久久久久久久| 国产精品久久久久免费| 中文字幕在线观看免费| 亚洲福利专区| 久久视频在线播放| 三上悠亚影音先锋| 亚洲国产中文在线| 欧美特级限制片免费在线观看| 青青青青在线视频| 日本在线免费| 97久久人人超碰| 91免费在线视频网站| 一级一片免费看| 激情文学一区| 不用播放器成人网| 一级二级黄色片| 日韩欧美天堂| 日韩美女主播在线视频一区二区三区| 黑森林精品导航| 亚洲小少妇裸体bbw| 亚洲综合色网站| 蜜臀久久久久久久| 亚洲午夜久久久久中文字幕久| 欧美日韩成人一区二区三区| 亚洲欧美国产高清va在线播放| 日韩在线观看视频一区| 欧美不卡高清一区二区三区| 亚洲成人动漫一区| 69精品丰满人妻无码视频a片| 91caoporm在线视频| 久久这里只有精品首页| 激情视频一区二区| 99精品在线视频观看| 九一国产在线| 夜夜骚av一区二区三区| 精品国产一区二区三区| 日韩精品视频免费专区在线播放 | 亚洲日本在线视频观看| 欧美精品免费观看二区| 一区二区自拍偷拍| 日韩av网站免费在线| 57pao精品| 国产无遮挡又黄又爽又色| 午夜激情久久| 中文字幕日韩有码| 亚洲色图 激情小说| 欧美猛男同性videos| 日韩黄色在线免费观看| 九九九久久久久久久| 高清av一区| 色婷婷国产精品综合在线观看| 国产高清av在线播放| 污污的网站在线看| 一区二区三区不卡视频| 99久热在线精品视频| www久久日com| 亚洲日本青草视频在线怡红院 | 亚洲视频第二页| 91久久久久久白丝白浆欲热蜜臀| 日韩欧美一区二区三区久久| 欧美亚洲精品一区二区| 三级中文字幕在线观看| 性久久久久久久久久久久| 高清欧美精品xxxxx| 2021中文字幕在线| 日韩欧美国产激情| av免费在线播放网站| 午夜激情成人网| 欧美曰成人黄网| 艹b视频在线观看| 欧美亚洲人成在线| 在线不卡中文字幕| 精品国内片67194| 色综合天天在线| 天天好比中文综合网| 搞黄视频在线观看| 国产精品卡一卡二卡三| 99re99热| 国产在线xxx| 欧美日韩在线另类| 男人操女人免费软件| 永久免费毛片在线播放| 欧美亚洲尤物久久| www.亚洲自拍| 国产精品极品国产中出| 亚洲精品国产美女| 亚洲精品乱码久久久久久久久久久久 | 国产绿帽刺激高潮对白| 国产成人亚洲精品青草天美 | 久久精品66| 亚洲人成五月天| 极品盗摄国产盗摄合集| 在线亚洲国产精品网站| 国产精品一区二区久久久久| 亚洲国产成人精品一区二区三区| 91麻豆精品秘密| 任我爽在线视频精品一| 激情网站在线| 欧美日韩综合在线免费观看| 成人一区二区三区仙踪林| 丝袜av一区| 美女少妇精品视频| 日韩欧美在线观看免费| 国产在线视频一区二区三区| 精品综合久久| 国产精品久久久久久福利| 午夜免费久久看| 日本高清一区二区视频| 91精品啪在线观看国产手机| 色系列之999| 五月天综合激情| 狠狠狠色丁香婷婷综合久久五月| 国产一区二区视频在线免费观看 | 日韩大片免费观看| 欧美在线色视频| 久久性爱视频网站| 亚洲欧美日韩高清在线| 国产精品久久久久av| 人妻精品一区一区三区蜜桃91 | 日本一级二级视频| 日韩精品成人一区二区三区| 国产精品青青草| 自拍视频在线播放| 黑人精品xxx一区一二区| 91大神免费观看| 欧美gvvideo网站| 日韩av快播网址| 天堂在线视频免费| 亚洲最新在线观看| 亚洲精品乱码久久久久久动漫| 国内精品久久久久久久久电影网| 韩日欧美一区二区| 亚洲欧美强伦一区二区| 成人免费视频在线观看| 手机av在线网| 色综合久久一区二区三区| 欧洲亚洲在线视频| 先锋av资源站| 精品国产乱码久久久久久虫虫漫画| 久久成年人网站| 日韩成人免费| 国产精品丝袜高跟| se在线电影| 欧美午夜在线一二页| 亚洲国产无码精品| 99精品视频网| 国产成人看片| 91福利在线免费| 亚洲国产精品yw在线观看| 男人的天堂一区| 99re热这里只有精品视频| 三上悠亚久久精品| 国产一区调教| 97在线视频免费播放| 韩国av在线免费观看| 亚洲成人精品影院| 日本少妇一级片| 午夜精品999| 99在线热播| 五月花成人网| 亚洲国产精品小视频| 97超碰人人干| www国产精品av| 色婷婷综合久久久久中文字幕| 国产不卡av一区二区| 国产精品入口福利| 国产黄色在线网站| 7777精品伊人久久久大香线蕉最新版| 少妇高潮惨叫久久久久| 激情久久久久久久久久久久久久久久| 美国av在线播放| 高清精品视频| 国产91色在线|免| 在线观看精品一区二区三区| 在线观看视频一区| 亚洲AV成人无码精电影在线| 麻豆91小视频| 在线观看污视频| 欧美成人午夜77777| 国产91九色视频| а天堂中文在线官网| 日韩电影免费观看在线观看| 91麻豆精品在线| 亚洲综合偷拍欧美一区色| 日本japanese极品少妇| 日本中文字幕一区二区有限公司| 蜜臀av.com| 日韩黄色网络| 国产一区视频在线| 蜜桃麻豆影像在线观看| 中文日韩电影网站| 韩国中文字幕hd久久精品| 在线观看成人免费视频| 黄色一级视频免费观看| 国产午夜亚洲精品理论片色戒 | 亚洲国产欧美一区| 最近中文字幕av| 一区二区三区在线免费播放| 国内精品卡一卡二卡三| 国产精品一级在线| 可以在线看的黄色网址| 亚洲综合专区| 日韩高清国产精品| 成午夜精品一区二区三区软件| 国产第一区电影| av影院在线| 色偷偷88888欧美精品久久久| 肥臀熟女一区二区三区| 91国模大尺度私拍在线视频| 精品无码一区二区三区电影桃花 | 性欧美1819sex性高清大胸| 亚洲人成五月天| 日本黄色不卡视频| 欧美精品一卡两卡| 久久精品久久久久久久| 亚洲成人在线网站| 男女性高潮免费网站| 国产日韩欧美精品一区| 日本一区二区在线免费观看| 免费成人在线观看| 久草资源站在线观看| 黄色亚洲在线| 欧美精品一区二区性色a+v| 国内精品久久久久久久影视简单 | 理论片一区二区在线| 亚洲伊人久久综合| 国产韩日精品| 日本精品一区二区三区在线播放视频| 中文字幕伦理免费在线视频| 一区二区三区亚洲| 欧美日韩伦理片| 亚洲国产精品一区二区久| www.国产.com| 日韩一区二区精品在线观看| 一区二区三区福利视频| 五月婷婷久久丁香| 国产午夜精品无码| 亚洲一区二区三区四区的| 欧美日韩精品在线观看视频 | 欧美专区第二页| 国产精品18久久久| 伦伦影院午夜理论片| 激情五月婷婷综合| 久久这里只精品| 强制捆绑调教一区二区| 五月天亚洲视频| 日本中文在线一区| www.99av.com| 久久99国产乱子伦精品免费| 久久精品一卡二卡| 国产成人免费视频精品含羞草妖精| 婷婷激情小说网| 国产精品99久久久久久宅男| 91插插插影院| 国产高清不卡二三区| 第一页在线视频| 成人午夜短视频| 最新在线黄色网址| 成人午夜私人影院| 国产 xxxx| 久久综合色天天久久综合图片| 黄色工厂在线观看| 国产亚洲一二三区| 蜜桃av免费在线观看| 国产精品久久久久一区二区三区 | aaa国产精品| 国产无套精品一区二区| 真实原创一区二区影院| 日韩欧美精品在线不卡| 亚洲精品久久| 久艹视频在线免费观看| 午夜影院日韩| 国产九九热视频| 成人综合激情网| 日韩片在线观看| 国产精品欧美极品| 五月婷婷一区二区| 五月综合激情网| 一二三四区在线| 精品国产乱码久久久久久蜜臀| 青青青手机在线视频观看| 中文字幕久热精品在线视频| 亚洲精品白浆| 国产成人在线一区| 视频一区中文字幕精品| 久久久国产精品一区二区三区| 欧美一级精品| 久草免费福利在线| 视频一区视频二区中文字幕| 日韩一级免费片| 成人网男人的天堂| 国产99在线 | 亚洲| 亚洲自拍欧美精品| 波多野结衣视频观看| 日韩视频在线观看一区二区| 欧美少妇另类| 欧美巨乳美女视频| 欧美va在线| 亚洲xxxxx| 国产伦精品一区二区三区在线观看| 中文字幕在线精品| 污视频在线看网站| 日本精品性网站在线观看| 久久久久毛片免费观看| 日本亚洲欧洲精品| 国内精品久久久久久久97牛牛| 国自产精品手机在线观看视频| a天堂在线资源| 欧美福利在线观看| 高清在线一区| 九九九九精品| 亚洲精品一区二区在线看| 少妇高潮喷水久久久久久久久久| 国内欧美视频一区二区| 丰满少妇一区二区| 亚洲国产一区二区三区青草影视| 中文字幕久久熟女蜜桃| 日韩高清av一区二区三区| 在线看福利影| 国产欧美精品在线| 成人网18免费网站| 欧美 国产 日本| kk眼镜猥琐国模调教系列一区二区| 91狠狠综合久久久| 欧美丝袜丝交足nylons图片| 天堂av在线免费| 欧美wwwxxxx| 成人网av.com/| 久久精品一区二区三区不卡免费视频 | 日韩精品dvd| 少妇高清精品毛片在线视频| 成人高清av在线| 污软件在线观看| 欧美蜜桃一区二区三区| 韩国三级在线观看久| 日本一本a高清免费不卡| 丝袜美腿一区二区三区动态图| 欧美亚洲黄色片| 岛国精品在线观看| 国产亚洲欧美精品久久久www| 337p亚洲精品色噜噜噜| 久草中文在线观看| 国产精品自产拍在线观| 日韩欧美综合| www.夜夜爽| 亚洲视频一区二区在线| 亚洲天堂视频在线播放| 亚洲嫩模很污视频| 亚洲www.| 亚洲图片欧洲图片日韩av| 欧美aa在线视频| 大吊一区二区三区| 欧美精品久久天天躁| 宅男在线观看免费高清网站| 999在线免费观看视频| 女生裸体视频一区二区三区| 黑人无套内谢中国美女| 亚洲国产你懂的| 日产精品久久久久久久性色| 日本国产精品视频| 亚洲第一论坛sis| 久久久久久久久久久久久久久国产| 国产精品久99| 亚洲女人18毛片水真多| 欧美在线影院在线视频| 成人aaaa| 在线观看视频你懂得| 图片区小说区国产精品视频 | 欧美不卡一区二区三区| 1024在线看片你懂得| 蜜桃精品久久久久久久免费影院| 久久久蜜桃一区二区人| 啪啪一区二区三区| 欧美va在线播放| 国产精品av一区二区三区 | 日本在线视频一区二区三区| 国产精品日韩三级| 91免费在线视频观看| 男人天堂av在线播放| 久久99亚洲精品| 日韩在线黄色| 欧美午夜aaaaaa免费视频|