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

亚洲淫性视频| 国产色综合视频| 九九热精品视频在线观看| 欧美性猛交xxxx乱大交蜜桃| 欧美极品jizzhd欧美| 一级黄色大片网站| 亚洲精品一二| 中文字幕在线看视频国产欧美在线看完整| 成年人三级黄色片| 阿v视频在线观看| 中文av一区二区| 不卡的av一区| 久久国产乱子伦精品| 91综合久久一区二区| 精品国产免费视频| 中文字幕网av| 日本在线影院| 亚洲色欲色欲www在线观看| 精品日本一区二区| 国产免费av观看| 午夜亚洲性色福利视频| 久久婷婷国产麻豆91天堂| 青青草视频成人| 试看120秒一区二区三区| 欧美午夜影院在线视频| 国产一级大片免费看| 高清av电影在线观看| 岛国精品在线播放| 国产日韩欧美综合| 国产精品视频一区在线观看| 午夜精品剧场| 中文字幕亚洲一区二区三区| 久久人妻少妇嫩草av无码专区| 四虎国产精品免费久久| 色噜噜狠狠成人网p站| 国产www免费| 超碰在线网址| 国产精品国模大尺度视频| 噜噜噜噜噜久久久久久91| 国产男女猛烈无遮挡| 日韩福利电影在线| 日本欧美在线视频| 一级片中文字幕| 亚洲国产三级| 欧美精品videosex牲欧美| 欧美一级片在线视频| 日韩免费高清| 最好看的2019的中文字幕视频| 中国美女乱淫免费看视频| 国产成人av毛片| 精品国产91乱码一区二区三区| 午夜剧场高清版免费观看 | 久久国产天堂福利天堂| 黄色国产在线播放| 欧美久久精品一级c片| 日韩精品亚洲精品| 免费在线观看成年人视频| 日本一道高清一区二区三区| 日韩www在线| 野花社区视频在线观看| 视频福利一区| 国产婷婷色综合av蜜臀av| 无遮挡aaaaa大片免费看| 免费看成人人体视频| 亚洲国产黄色片| 性欧美成人播放77777| 欧美猛男做受videos| 亚洲欧美另类在线观看| 国产真实乱人偷精品人妻| 免费短视频成人日韩| 亚洲人午夜精品免费| 免费毛片视频网站| 日韩伦理一区| 欧美大片在线看| 日韩精品久久久久久久酒店| 99成人在线| 国产极品jizzhd欧美| 国产乡下妇女三片| 狠狠色丁香久久婷婷综| 成人免费视频网站入口| 五月天激情婷婷| 国产欧美日韩精品在线| 亚洲欧美国产一区二区| а√天堂8资源在线官网| 亚洲电影在线免费观看| 欧美在线观看成人| 欧美日韩女优| 91精品视频网| 日韩aaaaa| 成人一二三区| 欧美国产中文字幕| 欧美a视频在线观看| 麻豆freexxxx性91精品| 97自拍视频| 青青操在线视频| 中文字幕视频一区二区三区久| 国产女人18毛片| 日韩在线伦理| 欧美精品久久99久久在免费线| 中文字幕在线观看91| 免费短视频成人日韩| 久久精品久久久久电影| 日韩av免费网址| 免费在线观看一区二区三区| 114国产精品久久免费观看| 性感美女视频一二三| 国产精品理论在线观看| 加勒比成人在线| 国产a亚洲精品| 亚洲国产精品久久久| 久久久久亚洲av无码a片| 中文视频一区| 国产精品视频自拍| 婷婷丁香一区二区三区| 亚洲欧洲性图库| 北条麻妃69av| 91成人噜噜噜在线播放| 一区国产精品视频| 99久在线精品99re8热| 国产综合色产在线精品| 欧美日韩一区二区视频在线| 欧美hdxxxx| 欧美高清视频在线高清观看mv色露露十八| 国产伦精品一区三区精东| 久久影院一区| 全球成人中文在线| 手机看片1024国产| 亚洲精品高清在线观看| 一区二区三区免费播放| 天海翼亚洲一区二区三区| 欧美裸身视频免费观看| 中文字幕 国产| 国产亚洲欧美日韩在线一区| 精品无码一区二区三区在线| 国产精品一区二区三区av| 亚洲天堂开心观看| 一级片免费在线播放| 成人高清视频免费观看| 免费的av在线| 国产精品久久久久久久久久久久久久久 | 青青青免费在线| 日本一区二区三区播放| 日韩中文字幕第一页| 国产男人搡女人免费视频| 久久伊人中文字幕| 久久久久久久激情| 人体久久天天| 欧洲亚洲妇女av| 日韩av资源站| 欧美性生交xxxxxdddd| chinese麻豆新拍video| 亚洲久久一区二区| 精品欧美一区二区在线观看视频| 成人免费图片免费观看| 亚洲高清在线观看| 成人精品免费在线观看| 91在线精品一区二区三区| 欧美激情 国产精品| 精品三级av| 国产91精品久| 精品无吗乱吗av国产爱色| 色综合久久88色综合天天| 丰满少妇高潮一区二区| 日韩精品电影在线观看| 五码日韩精品一区二区三区视频| 巨胸喷奶水www久久久免费动漫| 国产一区二区三区视频免费| 在线视频播放大全| 亚洲图片激情小说| 在线观看一区二区三区四区| 国产一区二区三区四区三区四 | 婷婷成人影院| 日韩美女写真福利在线观看| 国产裸舞福利在线视频合集| 欧美性大战久久| 日本黄色录像视频| 国产精品影视在线| 男人用嘴添女人下身免费视频| 卡通动漫精品一区二区三区| 欧美一级在线播放| 3p在线观看| 日韩一级完整毛片| 日韩精品在线不卡| 欧美国产一区在线| 黄色a级三级三级三级| 黄色成人在线网址| 欧美成人一区二区在线| 国产成人精品一区二区三区视频| 久久这里只有精品99| 欧美 日韩 国产 在线| 欧美午夜视频一区二区| 黄色录像一级片| 成人av手机在线观看| 国产一级片黄色| 欧美jjzz| 日韩高清在线播放| 在线播放一区二区精品视频| 欧洲成人在线视频| √天堂8在线网| 亚洲欧美日韩精品久久奇米色影视| 中文字幕永久免费视频| 一区二区三区四区蜜桃| 日本一级免费视频| 国产成人aaaa| 黄色aaa级片| 亚洲精品一级| 小泽玛利亚av在线| 黑丝美女一区二区| 翡翠波斯猫1977年美国| 成人精品三级| 欧美一级片一区| 香蕉成人app免费看片| 亚洲人成免费电影| 亚洲欧美黄色片| 欧美日本精品一区二区三区| 日操夜操天天操| 亚洲精品高清在线观看| 国产午夜精品久久久久久久久| 波多野结衣中文字幕一区| 欧美特黄aaa| 日日骚欧美日韩| 欧美极品欧美精品欧美| 亚洲色图网站| 一区二区精品在线观看| 香蕉视频一区| 精品免费国产| 国产成人福利av| 97se国产在线视频| 五月天色综合| 国产精品一区二区三区久久| 国产一二在线播放| 久久久久久久久久久亚洲| 欧美激情办公室videoshd| 亚洲天堂av女优| 青青免费在线视频| 日韩精品极品在线观看播放免费视频| 性做久久久久久久久久| 欧美一级片在线看| 国产精品久久久久久无人区| 欧美伊人久久久久久午夜久久久久| 久久夜靖品2区| 亚洲成人激情综合网| 青青草偷拍视频| 亚洲精品videosex极品| 成人性生活毛片| 亚洲三级在线观看| 日日噜噜夜夜狠狠久久波多野| 国产精品国产三级国产aⅴ入口| 国产亚洲精品熟女国产成人| 久久蜜桃av一区精品变态类天堂 | 久久综合狠狠综合久久激情 | 久久成年人视频| 国产黄色小视频在线| 最近2019年好看中文字幕视频| 在线观看国产原创自拍视频| 亚洲一区二区国产| av电影在线播放高清免费观看| 国产亚洲成精品久久| 成人精品一区二区三区免费| 中文字幕亚洲一区二区三区五十路 | 豆国产97在线 | 亚洲| 一区二区不卡在线播放 | 国产在线你懂得| 在线精品播放av| 免费**毛片在线| 欧美激情啊啊啊| 日韩伦理在线| 国产精品久久不能| 91精品福利观看| 99蜜桃在线观看免费视频网站| 综合激情五月婷婷| 久久精品国产理论片免费| 岳的好大精品一区二区三区| 亚洲第一综合| 欧美a级片网站| 青青草原成人网| 美女国产一区二区三区| 日韩视频在线观看一区二区三区| 国产精品1024久久| 黑人巨大精品欧美| 国产精品你懂的在线| 欧美肥妇bbwbbw| 亚洲国产精品久久人人爱 | 香蕉久久夜色精品| 色戒在线免费观看| 国产成人福利片| 性欧美一区二区| 亚洲欧美色综合| 欧美日韩精品区| 欧美日韩国产一区| 开心激情综合网| 国产亚洲欧美日韩美女| 中文在线字幕免费观看| 欧美亚洲在线观看| 国产精品3区| 久久精品国产美女| 亚洲午夜精品一区 二区 三区| 欧美日韩福利在线| 蜜桃精品视频在线| 丰满岳乱妇一区二区| 国产精品美女久久久久aⅴ国产馆| 久久久久久久久久网站| 一本大道久久精品懂色aⅴ| 国产熟女精品视频| 亚洲网在线观看| 丰满诱人av在线播放| 国产精品福利在线| 美腿丝袜亚洲图片| 国产精品jizz在线观看老狼| 国产精品嫩草99av在线| 日韩高清在线一区二区| 91一区一区三区| 成年人av电影| 欧美三级电影精品| 亚洲人成色777777精品音频| 欧美精品情趣视频| 69堂免费精品视频在线播放| 国产一区二区三区奇米久涩| 天天影视天天精品| jizz欧美激情18| 2021中文字幕一区亚洲| 精品午夜福利视频| 91精品国产综合久久小美女| 成年网站在线| 欧美性在线观看| 国产福利资源一区| 路边理发店露脸熟妇泻火| 蜜乳av一区二区| 熟女高潮一区二区三区| 午夜精品久久久久久久久| 国产高中女学生第一次| 日韩在线中文视频| 深夜视频一区二区| 欧美日韩喷水| 亚洲男人影院| 久久午夜夜伦鲁鲁片| 一区二区三区成人| www.五月婷婷| 欧美—级a级欧美特级ar全黄| www.久久热| 国产对白在线播放| 狠狠色丁香久久婷婷综| 91传媒免费观看| 91精选在线观看| 久cao在线| 亚洲一区二区三区四区在线播放| 91久久夜色精品国产按摩| 国产一区二区在线免费播放| 国产亚洲精品aa| 天堂av免费在线观看| 国产丝袜一区二区| 免费福利视频一区二区三区| 欧美日韩国产一二| 久久精品动漫| 日韩中文字幕有码| 欧美视频在线一区二区三区| 国产午夜在线视频| 国产精品香蕉国产| 99九九热只有国产精品| 女人高潮一级片| 亚洲理论在线观看| 午夜精品久久久久久久爽| 九色精品美女在线| 国产成人在线中文字幕| 免费欧美一级视频| 欧美国产日本韩| 国产美女三级无套内谢| 九九热精品视频国产| 国内毛片久久| 免费在线激情视频| 国产精品色一区二区三区| 亚洲最新av网站| 九九热精品视频| 欧美电影完整版在线观看| 欧美激情精品久久久久久小说| 久久久不卡网国产精品一区| 一区二区视频免费| 久精品免费视频| 日韩啪啪网站| 黄色成人免费看| 亚洲精品精品亚洲| 日韩a在线看| 成人激情av在线| 亚洲国产高清一区| 国产精品20p| 日韩欧美国产精品一区| 日韩欧美精品一区二区三区| 亚洲激情啪啪| 成人网页在线观看| 自拍偷拍色综合| 欧美日本亚洲视频| 国产欧美日韩视频在线| www.51色.com| 色偷偷成人一区二区三区91| 日本视频在线播放| 久久日韩精品| 国产一区二区三区免费| 69视频免费在线观看| 日韩中文字幕网| 丝袜连裤袜欧美激情日韩|