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

MongoDB 系列 - 數據查詢游標你用對了嗎?

運維 數據庫運維 MongoDB
MongoDB 里面的游標,有點類似于在 Node.js 里使用 Stream 處理文件數據,相比把整個文件讀入內存在處理這種模式,Stream 帶來的收益是很大的。

本文轉載自微信公眾號「編程界」,作者五月君  。轉載本文請聯系編程界公眾號。

幾個話題

本文會根據以下幾個話題進行討論與講解,文中的目錄不完全和這幾個話題一致,但當你閱讀完本文后,相信這些答案應該也有了,都在文中。

  • 為什么要使用游標、什么時候使用?
  • 關注服務器內存,游標什么時候關閉?
  • 需要注意的游標超時與容錯處理
  • 為什么不要隨意調整 batchSize 數量?
  • 使用時需注意 Mongoose 與原生 Node.js MongoDB 驅動程序的不同之處
  • 解答群友問題時發現的一個關于游標的 Bug
  • 擴展 - 為什么可以使用 for await of 遍歷游標對象?

為什么要使用游標?

這樣的寫法 collection.find().toArray(),大家在學習 MongoDB 時應該見的也不少,它的原理是客戶端驅動程序會自動把返回的所有數據一次性加載到應用程序內存中,理解起來相對簡單些,如果數據量小是沒問題的,在一些數據處理的場景中,具體有多少數據也許是未知的,有可能返回大量的數據,如果全部 hold 在內存,在服務端內存寸土寸金的地方,白白消耗服務內存不說,內存占用過高還可能造成服務 OOM。

MongoDB 里面的游標,有點類似于在 Node.js 里使用 Stream 處理文件數據,相比把整個文件讀入內存在處理這種模式,Stream 帶來的收益是很大的。

很形象的一個圖,來源:https://www.cnblogs.com/vajoy/p/6349817.html[1]

游標基本工作原理

當我們使用 collection.find() 或 collection.aggregate() 返回的是一個指向該集合的指針,也稱為游標(cursor),是不能直接訪問數據的,只有當循環迭代這個游標時才會真正的從數據庫集合讀取數據。

在 Node.js 中使用很簡單,只要支持 for await of 語法,即可遍歷游標返回的數據集,和正常使用 for of 遍歷數組很相似,區別是 for await of 遍歷的數據源是異步的。當循環迭代開始時驅動程序會使用 getMore() 命令批量從數據庫集合中獲取一批數據先緩存起來,例如 Node.js MongoDB 驅動程序每次默認批量獲取 1000 條(注意,第一次 getMore() 時實際請求是 101 條),取決于 batchSize[2] 參數設置,待這批數據處理完成之后,在向 MongoDB Server 執行 getMore() 繼續請求直到游標耗盡。

以下為 Node.js 中的兩種使用示例,個人比較推薦 for await of 這種寫法。方法二 while 循環這種寫法在一個 MongoDB Node.js 驅動程序版本中存在一個 Bug 下文會介紹。

  1. const userCursor = await collection.find(); 
  2.  
  3. // 如果沒有返回數據,需要做一些特殊處理的,可以使用 userCursor.count() 或 userCursor.hasNext() 
  4. if (!await userCursor.count()) { 
  5.   // TODO: 提前結束,做一些其它操作 
  6.   return
  7.  
  8. // 方法一: 
  9. for await (const user of userCursor) { 
  10.  
  11. // 方法二: 
  12. while (await userCursor.hasNext()) { 
  13.  const doc = userCursor.next(); 

例如,數據庫集合有 10000 條數據,每次批量獲取 1000 條,I/O 消耗應該也為 10 次。終端鏈接至 MongoDB Server 設置 db.setProfilingLevel(0, { slowms: 0 })記錄所有的操作日志,之后在打開 MongoDB Server 控制臺日志,執行應用程序之后會看到如下日志信息,每次 getMore 都指向了同一個游標 ID getMore: 5098682199385946244。

游標讀取結果.png

如果需要修改 batchSize 結果的,通過 options 指定 batchSize 屬性或調用 batchSize 方法都可以。

  1. collection.find().batchSize(1100) 
  2. // 或以下方法 
  3. collection.find({}, { 
  4.   batchSize: 1100 
  5. }) 

切記不要將 batchSize 設置為 1,例如,10000 條數據每獲取一條數據,客戶端都將連接服務器讀取,這將會產生 10000 次網絡 IO,下圖使用 mongostat 監控,展示了每秒查詢游標時的 getMore 次數。

游標超時

如果一個游標在一定時間內無人訪問,超時之后會被回收,防止產生內存泄漏,啟動時可通過 mongod --setParameter cursorTimeoutMillis=300000 參數設置,默認超時為 10 分鐘,參見文檔 cursorTimeoutMillis#Default: 600000 (10 minutes)[3]。

例如,總共查詢 10000 條數據,第一次 getmore() 默認批量獲取 1000 條數據,如果在默認的 10 分鐘內沒有處理完成這 1000 條數據,游標會被關閉,待下次執行 getmore() 就會報錯 cursor id 4011961159809892672 not found,一般稱之為游標超時。

如有遇到游標超時,可通過調整 cursorTimeoutMillis 參數或減少 batchSize 數量選擇適合于自己的程序配置,通常默認配置是不需要調整的。例如,在遍歷游標數據時調了一個外部接口,由于接口超時導致的游標超時這種外部業務原因的,應先去優化業務本身,再考慮調整配置。

為了解決游標超時,你可能還見到過 cursor.addCursorFlag('noCursorTimeout', true) 這樣的配置,這會禁用掉游標的超時限制,只有等到游標耗盡或手動關閉 cursor.close() 游標才可能被釋放,禁用超時時間這種做法,很不推薦使用,每個游標都存在額外的內存占用消耗,如果因為疏忽忘記手動關閉游標導致的 MongoDB Server 內存泄漏就得不償失了。

游標狀態

登陸 MongoDB 客戶端,執行 db.serverStatus().metrics.cursor 命令,查看當前游標使用狀態。如果真的出現游標導致的 MongoDB 服務器內存泄漏,以下幾個數據指標,做為運維人員在排查問題時,會有幫助。

  • timedOut:指 MongoDB Server 進程啟動到現在所有的游標超時數量,此指標反映了應用程序因為處理耗時任務 或 游標打開后因為報錯沒有顯示關閉游標 這兩種情況導致的游標超時數量。
  • open.noTimeout:為了防止游標超時,MongoDB 提供了一個配置 DBQuery.Option.noTimeout[4] 設置永不超時,但如果處理完畢忘記顯示關閉游標,會導致游標常駐內存,數量越大內存泄漏的風險也越大,建議是盡量不要設置 noTimeout。
  • open.pinned:“固定” 打開游標的數量。
  • open.total:MongoDB Server 當前為客戶端打開的游標數量,當有游標耗盡,total 的數量也會不斷的減少。
  1.  "timedOut" : NumberLong(4), 
  2.  "open" : { 
  3.   "noTimeout" : NumberLong(0), 
  4.   "pinned" : NumberLong(0), 
  5.   "total" : NumberLong(0) 
  6.  } 

游標與異步迭代器

JavaScript 在 ES6 語法提供了一個功能叫迭代器,定義了一套統一的接口,只要實現了該接口的數據類型,都可使用 for of 關鍵詞遍歷,例如數組、Map、Set 類型等,這些類型上有一個方法 Symbol.iterator 返回的就是一個迭代器對象,迭代器對象的 next() 方法返回值包含了 vlaue、done 兩個屬性,如果 done 為 true 表示數據已遍歷完成,但 Symbol.iterator 只支持同步的數據源。

而我們從數據庫集合獲取數據涉及到網絡 I/O,這是一個異步的操作,Symbol.iterator 就無法支持了,在ECMAScript 2018 標準中提供了一個新的屬性 Symbol.asyncIterator,這是一個異步迭代器,與 Symbol.iterator 不同的是 Symbol.asyncIterator 的 next() 方法返回的是一個包含 { value, done } 的 Promise 對象,如果一個對象設置了該屬性,它就是異步可迭代對象,相應的我們可使用 for await...of 循環遍歷數據。

下面看下 MonogoDB Node.js 驅動程序在 v4.2.2 版本中的實現,同樣也提供了 Symbol.asyncIterator 接口,這也就是為什么我們可以使用 for await...of 循環遍歷。

  1. // mongodb/lib/cursor/abstract_cursor.js 
  2. class AbstractCursor extends mongo_types_1.TypedEventEmitter { 
  3.   [Symbol.asyncIterator]( "Symbol.asyncIterator") { 
  4.     return { 
  5.       next: () => this.next().then(value => value != null ? { value, done: false }: { value: undefined, done: true }) 
  6.     }; 
  7.   } 

容錯處理

在遍歷游標的過程中,for 循環體內如果出現一些錯誤導致循環提前終止,這個時候游標并不會被立刻銷毀,可以選擇手動關閉游標或等待超過默認的游標超時時間后,游標也會被銷毀。

如果設置了 noCursorTimeout 屬性為永不超時,這個時候就一定記得要關閉游標,因此在上面也建議盡量不要做這個設置。

  1. const userCursor = await collection.find(); 
  2. try { 
  3.   for await (const user of userCursor) { 
  4.     // 可能拋出錯誤 throw new Error('124'
  5.   } 
  6. } catch (e) { 
  7.   // 處理錯誤 
  8. } finally { 
  9.  userCursor.close();   

Mongoose 需要注意的地方

使用 mongoose 和原生支持的 mongodb 模塊還是有很多差異的,mongoose 的 find() 方法默認不會返回游標對象,需要在 find 后顯示調用 cursor() 方法,且沒有 cursor.count()、cursor.hasNext() 方法支持,對于一些想判斷如果游標沒有數據做一些特殊處理,處理起來不是很友好。

  1. const userCursor = await User.find({}).cursor(); 
  2.  
  3. for await (const user of userCursor) { 

一個關于游標的 Bug

在 Node.js 群里,一個群友發來消息使用游標遇到了問題,后來也對這個問題做了一些查找和驗證,下文會介紹,基于一個特定版本和特定的應用場景才會出現這個問題,放在這里也是希望用到的朋友能少踩一個坑。

MongoDB Node.js 驅動程序在 3.5.4 版本基于游標迭代查詢數據時,如果用了 limit 限制返回的數據條目,并且使用 hasNext(),存在一個 Bug,首先是從返回的游標對象取出的 count 數不對,其次是遍歷出的數據條目與實際 limit count 數對不上,如果 limit 為奇數還會收到 MongoError: Cursor is closed 錯誤。

如果需要調整每一次的 getMore() 數量,游標可以結合 batchSize 使用。為什么用了游標還要使用 limit?這個也可以思考下。

  1. const userCursor = await collection.find({}).limit(5); 
  2. console.log('cursor count: ', await userCursor.count()); 
  3. try { 
  4.   while (await userCursor.hasNext()) { 
  5.     const doc = await userCursor.next(); 
  6.     console.log(doc); 
  7.   } 
  8. } catch (err) { 
  9.   console.error(err.stack); 
  10. userCursor.close(); 

mongodb@^3.5.4 版本輸出結果:

  1. cursor count:  10000 
  2. { _id: 61d6590b92058ddefbac6a14, userID: 0 } 
  3. { _id: 61d6590b92058ddefbac6a15, userID: 1 } 
  4. null 
  5. MongoError: Cursor is closed 
  6.     at Function.create (/test/node_modules/mongodb/lib/core/error.js:43:12) 
  7.     at Cursor.hasNext (/test/node_modules/mongodb/lib/cursor.js:197:24) 
  8.     at file:///test/index.mjs:42:27 
  9.     at processTicksAndRejections (internal/process/task_queues.js:93:5) 

NPM 包 mongodb 受影響版本為 3.5.4 參見 issue jira.mongodb.org/browse/NODE-2483[5]NPM 包 mongoose 受影響版本為 5.9.4 參見 issue github.com/Automattic/mongoose/issues/8664[6]

參考資料

[1]https://www.cnblogs.com/vajoy/p/6349817.html: https://www.cnblogs.com/vajoy/p/6349817.html

[2]batchSize: https://docs.mongodb.com/manual/tutorial/iterate-a-cursor/#cursor-batches

[3]cursorTimeoutMillis#Default: 600000 (10 minutes): https://docs.mongodb.com/manual/reference/parameters/#mongodb-parameter-param.cursorTimeoutMillis

[4]DBQuery.Option.noTimeout: https://docs.mongodb.com/manual/reference/method/cursor.addOption/#mongodb-data-DBQuery.Option.noTimeout

[5]NPM 包 mongodb 受影響版本為 3.5.4 參見 issue jira.mongodb.org/browse/NODE-2483: https://jira.mongodb.org/browse/NODE-2483

[6]NPM 包 mongoose 受影響版本為 5.9.4 參見 issue github.com/Automattic/mongoose/issues/8664: https://github.com/Automattic/mongoose/issues/8664

 

 

責任編輯:武曉燕 來源: 編程界
相關推薦

2024-12-17 15:00:00

字符串Java

2017-11-09 13:56:46

數據庫MongoDB水平擴展

2024-09-18 10:08:37

2022-05-09 07:27:50

ThreadLocaJava

2024-02-23 09:36:57

C#工具并行處理

2019-05-28 11:52:43

可視化圖表數據

2025-06-25 02:00:00

2017-10-10 15:30:20

JavaScript

2019-09-10 10:25:47

數據庫管理工具Valentina S

2024-12-10 13:00:00

C++引用

2023-11-29 07:38:33

JavaScript異步處理

2018-07-01 08:34:09

緩存數據服務

2020-09-18 06:39:18

hashMap循環數據

2013-07-30 17:28:45

2015-01-26 10:55:56

云服務器PowerEdge C

2013-07-30 09:16:59

2019-12-26 14:07:19

隨機數偽隨機多線程

2024-08-13 08:30:13

點贊
收藏

51CTO技術棧公眾號

久久久久99精品成人| 国产成人黄色片| 国产精品视频a| 狠狠色狠狠色综合日日tαg| 亚洲精品wwwww| 尤蜜粉嫩av国产一区二区三区| 国产写真视频在线观看| 成人在线一区二区三区| 国产成人精品一区二区在线| 黄色a级片在线观看| 西野翔中文久久精品国产| 欧美男人的天堂一二区| 成人性生活视频免费看| 91在线播放网站| 成人av网址在线| 国产日本欧美在线观看| av大片免费观看| 91超碰成人| 国产亚洲日本欧美韩国| 潘金莲一级淫片aaaaa| 99欧美精品| 婷婷国产v国产偷v亚洲高清| 成人在线免费观看网址| 成年在线观看免费人视频| 99久久婷婷国产综合精品| 成人国内精品久久久久一区| 亚洲精品成人在线视频| 狠狠爱www人成狠狠爱综合网 | 日本黄色三级网站| 自拍偷拍欧美视频| 亚洲午夜视频在线观看| 在线观看日韩羞羞视频| 阿v免费在线观看| 久久综合国产精品| 国产日韩欧美一区二区| 午夜精品久久久久久久91蜜桃| 秋霞午夜av一区二区三区 | a成人v在线| 色老头久久综合| 人妻有码中文字幕| 久草免费在线视频| 五月天视频一区| 欧美又粗又长又爽做受| 欧美色图天堂| 亚洲综合偷拍欧美一区色| 久久国产精品免费观看| 超碰公开在线| 一区二区三区在线观看国产| 天天做天天爱天天高潮| 毛片激情在线观看| 一区二区中文字幕在线| 99精品一区二区三区的区别| 国产视频一区二区| 亚洲视频一区二区在线观看| 香蕉精品视频在线| av网站免费在线观看| 中文字幕一区二区三中文字幕| 一区二区不卡在线视频 午夜欧美不卡' | 精品国产sm最大网站| 中文字幕1区2区| caoporn成人免费视频在线| 精品人在线二区三区| 亚洲成人激情小说| 精品亚洲自拍| 亚洲欧洲美洲在线综合| 亚洲午夜精品久久久久久高潮| 日本不卡免费一区| www高清在线视频日韩欧美| 91香蕉视频在线播放| 中文字幕一区二区三区欧美日韩 | 成人毛片在线播放| 天使萌一区二区三区免费观看| 国产精品第七十二页| 一区二区日韩视频| 成人小视频在线| 欧洲精品久久| www在线视频| 亚洲成在线观看| 欧美日韩亚洲第一| 欧美极品在线| 精品av久久707| www.中文字幕av| 色欧美自拍视频| 国自产精品手机在线观看视频| 国产精品suv一区| 久草在线在线精品观看| 国产精品污www一区二区三区| 色在线免费视频| 中文字幕在线免费不卡| 国产玉足脚交久久欧美| 日韩欧美少妇| 精品国产sm最大网站| 日本少妇xxxxx| 女主播福利一区| 日韩美女主播视频| 999精品国产| 久久嫩草精品久久久精品一| 9999在线观看| 超碰一区二区| 日韩视频在线永久播放| 乐播av一区二区三区| 国产精品a久久久久| 国产精品av电影| 人人妻人人澡人人爽久久av| 国产免费成人在线视频| 成人午夜视频在线观看免费| 男人亚洲天堂| 亚洲免费成人av电影| 日韩女优一区二区| 青娱乐精品在线视频| 国产精品免费在线播放| 日本最新在线视频| 欧美午夜精品在线| 国产精品亚洲一区二区无码| 91欧美大片| 热99久久精品| 国产香蕉在线观看| 自拍偷拍亚洲激情| 国产精品天天av精麻传媒| av一级久久| 在线不卡日本v二区707| 在线亚洲一区| 成人久久久久久久| 撸视在线观看免费视频| 亚洲午夜私人影院| 91看片破解版| 精品日韩免费| 7777免费精品视频| 亚洲老妇色熟女老太| 国产精品不卡一区二区三区| 精品www久久久久奶水| 国产精品中文字幕制服诱惑| 欧美成人黑人xx视频免费观看| 日本成人一级片| 久久男人中文字幕资源站| 日韩欧美亚洲天堂| 精品亚洲精品| 98精品国产高清在线xxxx天堂| 午夜精品小视频| 亚洲精选视频免费看| www.国产视频.com| 欧美在线电影| 国产精品欧美亚洲777777| 久久久久久女乱国产| 色婷婷亚洲婷婷| 在线不卡av电影| 免费一级欧美片在线播放| 精品中文字幕人| 国模冰冰炮一区二区| 精品伊人久久97| 久久久久99精品成人片我成大片 | 99热国产免费| 精品视频在线一区二区| 欧美一卡在线观看| 麻豆chinese极品少妇| 国产福利不卡视频| 91午夜在线观看| 欧美aaaaaaaa牛牛影院| 欧美亚洲在线观看| 激情小说 在线视频| 在线视频综合导航| 肉色超薄丝袜脚交69xx图片| 激情五月播播久久久精品| 浴室偷拍美女洗澡456在线| 精品国产一区二| 久久久中精品2020中文| 三级视频在线| 欧美日韩中文一区| 深夜福利影院在线观看| av午夜一区麻豆| 成年人小视频网站| 99久久亚洲精品蜜臀| 91福利入口| 麻豆免费在线| 一区二区在线免费视频| 国产免费av观看| 亚洲mv在线观看| 99精品欧美一区二区| 国内精品免费**视频| 人体内射精一区二区三区| 国产剧情在线观看一区| 成人a免费视频| 8x8ⅹ拨牐拨牐拨牐在线观看| 一本色道久久88精品综合| 国产精品视频一二区| 天天影视色香欲综合网老头| 免费黄在线观看| 成人午夜短视频| 污污动漫在线观看| 亚洲精品美女91| 制服丝袜综合日韩欧美| 日韩欧美国产大片| 成人黄色生活片| 在线视频cao| 久久久精品国产| 男人的天堂在线视频| 日韩欧美一级片| 中文字幕免费视频观看| 一区二区三区四区在线播放| 性欧美一区二区| 成人性视频免费网站| 污视频网站观看| 99精品视频免费观看| 中文视频一区视频二区视频三区| 天美av一区二区三区久久| 成人精品久久一区二区三区| 韩漫成人漫画| 欧美—级高清免费播放| 在线观看的av| 亚洲欧美激情在线视频| 亚洲av色香蕉一区二区三区| 欧美日韩一区在线| 黄色大片网站在线观看| 伊人一区二区三区| 2014亚洲天堂| 国产日韩精品一区| 少妇光屁股影院| 成人永久看片免费视频天堂| 两性午夜免费视频| 麻豆免费精品视频| 黄色高清无遮挡| 中文国产一区| 成人免费观看在线| 精品久久久久中文字幕小说 | 国产探花视频在线观看| 一区二区在线视频| 久久精品a一级国产免视看成人| 亚洲国产欧美精品| www.久久精品.com| 欧美一区二区在线免费播放| 亚洲一级av毛片| 欧美亚洲尤物久久| 激情视频网站在线观看| 色综合久久久网| 亚洲第一精品在线观看| 亚洲成人在线观看视频| 国产亚洲自拍av| 一区二区三区日韩欧美| 久久久久久久福利| 一区二区三区四区五区视频在线观看| 欧美肥妇bbwbbw| 中文字幕一区二区三区蜜月| 五月激情四射婷婷| 国产精品乱码人人做人人爱 | 欧美日在线观看| 成年人免费看毛片| 欧美性高跟鞋xxxxhd| 精品国产xxx| 欧美午夜精品免费| 亚洲一区在线观| 91精品欧美一区二区三区综合在| 国产精品国产av| 日韩午夜激情免费电影| 懂色av蜜臀av粉嫩av分享吧| 亚洲黄色片网站| 毛片免费在线观看| 色青青草原桃花久久综合 | 久久人体视频| 亚洲免费视频播放| 激情欧美丁香| 国产三区在线视频| 青青草97国产精品免费观看 | 亚洲欧美另类久久久精品2019| 国产盗摄一区二区三区在线| 伊人夜夜躁av伊人久久| 日韩免费一级片| 色噜噜夜夜夜综合网| 亚洲一区二区激情| 欧美一区二区三区四区五区| 人妻一区二区三区免费| 亚洲精品日韩丝袜精品| 91电影在线播放| 久久综合九色九九| 爱草tv视频在线观看992| 国产精品av在线| 国产在线一区不卡| 国产综合欧美在线看| 国产中文字幕一区二区三区| 在线免费观看成人| 好看的av在线不卡观看| 国产97色在线 | 日韩| 国产精品主播直播| 性色av蜜臀av色欲av| 欧美激情在线一区二区| 青娱乐国产在线视频| 日本韩国欧美国产| 国产成人免费看一级大黄| 精品视频在线播放| 国产调教视频在线观看| 日本精品视频在线观看| 国产乱码精品一区二区三区亚洲人 | 91国产精品电影| 福利一区二区免费视频| 国产精品日韩高清| 欧美黄色录像片| 青青青在线播放| 国产98色在线|日韩| 国产精品av久久久久久无| 亚洲国产成人av| 亚洲中文字幕在线观看| 日韩电影中文字幕在线观看| 免费日本一区二区三区视频| 91精品国产色综合久久不卡98口 | 日韩欧美国产午夜精品| 久香视频在线观看| 久久免费视频在线观看| 国产精品成人3p一区二区三区| 日韩视频在线播放| 亚洲视频中文| 在线视频一二区| 国产精品毛片大码女人| 岛国av中文字幕| 亚洲精品wwww| 国产福利在线免费观看| 成人性生交大片免费观看嘿嘿视频| 国产精品探花在线观看| 拔插拔插海外华人免费| 国产一区二区三区免费在线观看| 性欧美一区二区| 欧美日韩一区二区在线| 亚洲精品一区二区三区四区| 久久久精品影院| 欧美一区二区三区婷婷| 欧洲精品久久| 久久精品国语| 成人免费网站黄| 欧美日韩中文字幕综合视频| 午夜成人鲁丝片午夜精品| 欧美激情成人在线视频| 深夜激情久久| 成人毛片100部免费看| 国产一区二区三区黄视频| 强制高潮抽搐sm调教高h| 欧美日韩精品欧美日韩精品一 | 成人久久精品人妻一区二区三区| www.xxxx精品| 四虎视频在线精品免费网址| 亚洲精品成人久久久998| 日日夜夜免费精品视频| 免费视频91蜜桃| 欧美在线不卡视频| lutube成人福利在线观看| 国产精品福利片| 久久免费精品视频在这里| 岛国毛片在线播放| 中文字幕中文字幕一区| 国产视频在线免费观看| 欧美老女人在线视频| 91欧美日韩在线| 九色自拍视频在线观看| av在线一区二区三区| 成人午夜淫片100集| 国产一区二区三区在线| 成人国产一区| 天天干天天色天天爽| 国产91色综合久久免费分享| 久久久久久久蜜桃| 亚洲国产成人av在线| 在线天堂新版最新版在线8| 色999五月色| 国产麻豆日韩欧美久久| 久久香蕉精品视频| 日韩精品免费看| 日韩高清在线| 日本天堂免费a| 99久久国产综合精品女不卡| 激情视频网站在线观看| 日韩在线精品视频| caoporn成人免费视频在线| 日韩avxxx| 国产精品免费久久| 国产福利免费视频| 国语自产精品视频在线看抢先版图片 | 亚洲欧美在线成人| 伊人久久99| 成人黄色在线看| 亚洲无码精品一区二区三区| 精品激情国产视频| 精品国产午夜肉伦伦影院| 黄色aaa级片| 亚洲综合色丁香婷婷六月图片| 午夜小视频在线播放| 国产中文日韩欧美| 亚洲日本成人| 日本成人免费在线观看 | 成人在线免费公开观看视频| 国产日韩欧美一二三区| 在线欧美亚洲| 久久午夜精品视频| 亚洲成av人片在线观看香蕉| 欧美特大特白屁股xxxx| 免费看日b视频| 久久精品一区二区三区av| 国产高清视频免费| 国产suv精品一区二区| 自拍欧美日韩| 国产精品久久久视频| 日韩成人网免费视频| 国产视频网站一区二区三区| 日本免费一级视频|