ホームページ  >  に質問  >  本文

MongoDB中数据量大的话,不推荐使用 skip 和 limit,那其它方式怎么实现?

  1. 如题,我前两天去参加 MongoDB 用户组交流会时,听讲师说到数据量大的话不要使用 skip 和 limit
    因为,这样会一行一行的数到想到的页数再取 PageSize 的数量。当然他们也提了另外一个方法,但是只略讲了一句。

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

迷茫迷茫2734日前583

全員に返信(2)返信します

  • 大家讲道理

    大家讲道理2017-04-24 09:12:31

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

    返事
    0
  • PHP中文网

    PHP中文网2017-04-24 09:12:31

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

    返事
    0
  • キャンセル返事