[MongoDB] 大數據分頁查詢方式

當分頁遇到海量資料怎麼辦?
https://mp.weixin.qq.com/s?__biz=MzAwNjY3MjgzOA==&mid=2477610597&idx=1&sn=a02927f603b49213e983bd040e7af9f8&chksm=8d502eccba27a7daa7b7902b138e772ef7c02f35e0c47a1f2fb0f89ad62c58b040152d488bfc&token=1786268836&lang=zh_CN#rd

分頁應該是極為常見的資料展現方式了,一般在資料集較大而無法在單個頁面中呈現時會採用分頁的方法。各種前端UI元件在實現上也都會支援分頁的功能,而資料交互呈現所相應的後端系統、資料庫都對資料查詢的分頁提供了良好的支援。

基本做法: db.articles.find().limit(20).skip(20)

只是隨著頁碼的增大,skip 跳過的條目也會隨之變大,會發現回應時間非常的長。改良做法是,選取一個唯一有序的關鍵字段,比如 _id,作為翻頁的排序欄位;每次翻頁時以當前頁的最後一條資料_id值作為起點,將此併入查詢準則中。

改良做法: db.articles.find({ _id: {$lt: new ObjectId("ooxx")} }).sort({ _id: -1 }).limit(20)

另外是以一段頁碼作為一組,每一組內資料的翻頁採用ID 偏移量 + 少量的 skip 操作實現,在分組內進行skip產生的代價會非常小,因此性能上可以得到保證。。

改良分8組做法: db.articles.find({_id: { $lt: start_offset }}).sort({_id: -1}).skip(20*8).limit(1)


#MongoDB, find, skip, id, offset, group, 大數據, 偏移, 分組, 查詢, 分頁

留言