精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

一区二区三区四区视频在线| 国产成人精品网站| 动漫美女无遮挡免费| 三级中文字幕在线观看| 欧美国产一区在线| 成人免费在线一区二区三区| 中文字幕在线观看视频免费| 一区二区三区四区日韩| 国产视频精品xxxx| 中文字幕55页| 中文字幕av一区二区三区佐山爱| 18欧美亚洲精品| 欧美精品一区二区三区在线看午夜 | 免费观看亚洲视频大全| 欧美特级www| 真人做人试看60分钟免费| 欧洲成人av| 国产成人三级在线观看| 国产女人精品视频| 欧美精品韩国精品| 欧美午夜a级限制福利片| 中文字幕在线看视频国产欧美在线看完整| 久久久久久久穴| 欧美一级免费| 在线观看www91| 成人毛片视频网站| 视频在线这里都是精品| 中文字幕亚洲区| 欧美日韩综合久久| 香蕉久久一区二区三区| 国产91富婆露脸刺激对白| 成人免费观看网址| 亚洲资源在线播放| 青青青伊人色综合久久| 日本伊人精品一区二区三区介绍 | 亚洲狠狠婷婷| 久久99久久99精品免观看粉嫩| 日韩一级片在线免费观看| 色爱综合av| 精品福利在线导航| 野战少妇38p| 一区二区三区亚洲变态调教大结局| 欧美精品aⅴ在线视频| 天堂av在线网站| 欧美影视资讯| 色国产综合视频| av网址在线观看免费| 国产免费不卡| 欧美小视频在线观看| 日韩在线综合网| 蜜桃视频动漫在线播放| 精品久久久久久国产| 久艹视频在线免费观看| 精品丝袜在线| 欧美日韩国产一区二区| 鲁一鲁一鲁一鲁一色| 国模精品视频| 色综合天天综合色综合av | 久久久精品人妻一区二区三区四| 羞羞答答成人影院www| 久久久91精品国产一区不卡| 成人自拍小视频| 在线中文一区| 久久久免费精品视频| 日本熟妇一区二区| 亚洲综合好骚| 国产精品久久久久7777婷婷| 中文字幕一区二区在线视频| 久久99久久久久久久久久久| 成人黄色在线播放| www国产一区| aaa亚洲精品| 日韩av一级大片| 米奇777四色精品人人爽| 亚洲精品一二三| 人人妻人人添人人爽欧美一区| 欧美成人h版| 欧美日韩精品免费观看视频| 久久精品一二三四| 欧美调教视频| 国产亚洲在线播放| 男人操女人的视频网站| 日韩视频在线一区二区三区| 国产精品video| 国产美女明星三级做爰| av色综合久久天堂av综合| 日韩中文字幕一区| 中文在线免费| 日韩欧美有码在线| 亚洲精品mv在线观看| 精品福利一区| 色婷婷av一区二区三区久久| 黄网站免费在线| 日韩高清电影一区| 国产精品日韩二区| 97超碰人人在线| 亚洲高清视频的网址| 免费国产成人av| 久久精品免视看国产成人| 日韩精品在线电影| 欧美日韩国产精品一区二区三区| 男女av一区三区二区色多| 亚洲xxxxx| 国内在线免费高清视频| 亚洲一级二级在线| 日韩一级理论片| 欧美三级电影在线| 久色乳综合思思在线视频| 欧美日韩综合一区二区三区| 成人在线一区二区三区| 亚洲自拍的二区三区| 欧美aa在线| 日韩美女视频一区二区在线观看| 自拍偷拍亚洲天堂| 国内视频精品| 亚洲一区二区在线| 91在线不卡| 色屁屁一区二区| 无码精品一区二区三区在线播放| 91tv官网精品成人亚洲| 国产成人在线一区二区| 深夜福利视频网站| 一区二区三区视频在线看| 999在线观看| 欧美日韩精品一区二区视频| 青草热久免费精品视频| 深夜福利视频网站| 亚洲午夜私人影院| 制服.丝袜.亚洲.中文.综合懂| 色男人天堂综合再现| 国产成人aa精品一区在线播放 | 成人污版视频| 中文字幕亚洲欧美在线| jizz国产在线| 国产亚洲欧美色| 99999精品视频| 欧美日韩直播| 欧美亚洲日本网站| 欧美熟妇另类久久久久久不卡| 亚洲男人都懂的| 亚洲五月激情网| 88国产精品视频一区二区三区| 国产日韩欧美影视| 黄网站在线播放| 欧美日韩国产在线播放网站| 日本一区二区视频在线播放| 热久久免费视频| 亚洲国产精品一区在线观看不卡| 成人开心激情| 中日韩美女免费视频网站在线观看 | 搡老熟女老女人一区二区| 亚洲经典在线| 久久久久久久久久码影片| 天堂√8在线中文| 亚洲免费一级电影| 成人免费视频国产免费| 国产农村妇女毛片精品久久麻豆| 久久午夜夜伦鲁鲁一区二区| 欧美午夜精彩| 91精品视频免费| 欧美日韩在线视频免费观看| 欧美精品一区二区高清在线观看| 精品亚洲永久免费| 91视频一区二区三区| 黑人糟蹋人妻hd中文字幕| 国产一区二区三区四区五区| 国产精品久久久久高潮| 日本免费在线视频| 日韩欧美在线网站| 日韩 国产 在线| 国产亚洲精品资源在线26u| 中文字幕永久有效| 激情丁香综合| 日本一区二区视频| 综合久久av| 国内外成人免费激情在线视频网站| 亚洲 欧美 精品| 欧美怡红院视频| 亚洲色图综合区| 91在线视频免费91| 老太脱裤让老头玩ⅹxxxx| 妖精视频一区二区三区| 成人av电影天堂| zzzwww在线看片免费| 在线观看久久av| 国产99久久九九精品无码免费| 亚洲一区影音先锋| 国产亚洲精品熟女国产成人| 国产自产v一区二区三区c| 五十路熟女丰满大屁股| 超碰成人久久| 国内精品**久久毛片app| jvid一区二区三区| 午夜精品一区二区三区在线 | 久久99视频免费| 黄色小视频在线观看| 欧美一区二区三区在线电影| 国产成人精品网| 亚洲日本成人在线观看| 日韩人妻无码一区二区三区| 精品一区二区三区香蕉蜜桃| 又粗又黑又大的吊av| 99精品视频在线| 欧美日韩一区二区三区在线视频 | 国产一区二区美女视频| 午夜精品无码一区二区三区| 欧美午夜免费电影| 在线观看国产亚洲| 一区二区三区自拍| 国精产品久拍自产在线网站| 91老师国产黑色丝袜在线| 国产成人av免费观看| 欧美aⅴ一区二区三区视频| a级黄色片免费| 97偷自拍亚洲综合二区| 欧美一二三四五区| 国产欧美自拍一区| 91香蕉国产在线观看| 丰满少妇一区| 国产成人jvid在线播放| 美女视频在线免费| 久久99精品久久久久久青青91 | 亚洲日本韩国一区| 国产7777777| 久久五月婷婷丁香社区| 国产视频精品视频| 国产凹凸在线观看一区二区| 天堂在线中文在线| 蜜桃91丨九色丨蝌蚪91桃色| 日韩 欧美 高清| 国产一区二区三区久久| 成人在线国产视频| 国产精品www994| 97久久国产亚洲精品超碰热| 婷婷综合久久| 一区二区三区日韩视频| 国产电影一区二区在线观看| 天堂av一区二区| 日本一二区不卡| 亚欧精品在线| 国产精品7m凸凹视频分类| 午夜精品亚洲一区二区三区嫩草| 精品72久久久久中文字幕| 欧美视频观看一区| 久操国产精品| 天堂一区二区三区| 久久国产电影| a级网站在线观看| 亚洲国产精品综合久久久| 欧美日韩一级在线| 午夜精品av| cao在线观看| 国产一区二区三区久久| 好男人www社区| 激情伊人五月天久久综合| 亚洲精品中文字幕乱码无线| 国产剧情一区在线| 丰满少妇xbxb毛片日本| 波多野结衣中文字幕一区二区三区 | 欧美一区二区三区综合| 亚洲三级免费| 日本va中文字幕| 麻豆国产精品一区二区三区 | 99在线精品观看| 亚洲乱码国产乱码精品精大量 | 国产精品国产精品88| 亚洲综合色婷婷| 国产黄色片免费看| 欧美吞精做爰啪啪高潮| 国产情侣在线播放| 亚洲精品黄网在线观看| 成人福利在线| 久久99精品久久久久久琪琪| 欧亚av在线| 国产精品综合不卡av| 色悠久久久久综合先锋影音下载 | 色婷婷亚洲mv天堂mv在影片| 日本xxxxx18| 日韩电影毛片| 欧美综合久久久| 911亚洲精选| 99re热视频精品| 影音先锋制服丝袜| 一区二区三区欧美日| 亚洲天堂男人av| 日韩一二三区视频| 日本不卡视频一区二区| 久久精品国产亚洲精品| 激情黄产视频在线免费观看| 国产精品入口免费视| 都市激情亚洲| 亚洲国产欧美一区二区三区不卡| 欧美午夜电影在线观看| 动漫av免费观看| 波多野结衣在线一区| 国产不卡在线观看视频| 五月天丁香久久| 国产精品国产一区二区三区四区| 亚洲国产精品网站| 国产鲁鲁视频在线观看特色| 日韩美女在线播放| 日韩免费高清视频网站| 先锋影音亚洲资源| 亚洲在线视频| 亚洲最大视频网| 亚洲欧洲成人自拍| 欧美一区二区三区久久久| 日韩精品综合一本久道在线视频| 1024视频在线| 欧美最顶级丰满的aⅴ艳星| 综合视频一区| 免费看av软件| 青青草原综合久久大伊人精品优势| 中文字幕天堂av| 亚洲人成7777| 一本久道久久综合无码中文| 亚洲免费福利视频| 女厕盗摄一区二区三区| 国产精品区一区| 黑人一区二区| 亚洲精品久久久久久| 日韩久久一区二区| 怡春院在线视频| 国产一区二区av| 春暖花开亚洲一区二区三区| 蜜桃视频在线观看成人| 亚洲欧洲午夜| 在线播放av网址| 依依成人精品视频| wwwav在线播放| 九九热精品视频在线播放| 亚洲免费一区| 永久免费精品视频网站| 欧美96一区二区免费视频| 蜜臀av一区二区三区有限公司| 亚洲高清免费视频| 日韩在线观看视频一区| 国外成人在线播放| 成人av综合网| 少妇人妻大乳在线视频| 成人avav影音| 日韩精品――中文字幕| 亚洲第一中文字幕在线观看| a级片在线免费观看| 精选一区二区三区四区五区| 亚洲激情黄色| 黄瓜视频污在线观看| 色综合久久天天| 电影在线高清| 国产日韩在线视频| 中文字幕免费精品| 69xxx免费视频| 狠狠色狠狠色综合日日小说| 天堂а在线中文在线无限看推荐| 97视频在线观看免费| 亚洲第一论坛sis| 亚洲一级免费观看| 亚洲天堂免费在线观看视频| 国产极品久久久| 韩国精品美女www爽爽爽视频| 欧美调教在线| 午夜国产一区二区三区| 亚洲人成7777| 人妻精品一区一区三区蜜桃91 | **欧美日韩在线观看| 午夜精品一区二区三区在线观看| 久久av资源网| 香蕉视频一区二区| 夜夜嗨av色综合久久久综合网| 国精品产品一区| 国产毛片久久久久久国产毛片| av不卡一区二区三区| 在线免费一级片| 久久99热精品这里久久精品| 亚洲天堂日韩在线| 中文字幕视频三区| 亚洲成人av一区| 北条麻妃在线| av成人综合网| 久久婷婷丁香| 我家有个日本女人| 亚洲欧美三级伦理| 日本免费精品| www.欧美日本| 一区二区在线电影| 国产精品一区在线看| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 99久久综合狠狠综合久久| 国产字幕在线观看| 欧美多人爱爱视频网站| 国内精品久久久久久99蜜桃| 1314成人网| 色婷婷久久99综合精品jk白丝| av在线看片| 日本亚洲欧洲精品| 成人av网站在线观看免费| 中文字幕在线观看视频一区| 韩国精品久久久999| 亚洲深深色噜噜狠狠爱网站| 制服 丝袜 综合 日韩 欧美|