MongoDB中数据量大的话,不推荐使用 skip 和 limit,那其它方式怎么实现?
迷茫
迷茫 2017-04-24 09:10:31
0
2
641
  1. 如题,我前两天去参加 MongoDB 用户组交流会时,听讲师说到数据量大的话不要使用 skip 和 limit
    因为,这样会一行一行的数到想到的页数再取 PageSize 的数量。当然他们也提了另外一个方法,但是只略讲了一句。

    我在这里提问是想知道具体怎么做?求思路。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(2)
大家讲道理

「次のページ」または「前のページ」を取得したい場合は、特定の _id より大きい sort+limit をクエリすることで取得できます。
「xxx ページ」を取得したい場合、完全に正確に取得したい場合、実際にはページング自体が「1 つずつカウントする」ロジックであり、この時間のかかるプロセスは避けられません。インデックスがあります。
ページ数が非常に大きい場合、数千万を超える数字を気にする人はあまりいません。redis を使用して、ページ番号ごとに _id リストをキャッシュし、時々更新することができます。
この問題の基本的な点は、「インデックスが依存する b+ 構造はランキング計算に使用できない」ということです。

いいねを押す +0
Ty80

最後のクエリの最後の _id を記録すると、次のクエリは {_id: {$gt: last_id}} になります

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート