如题,我前两天去参加 MongoDB 用户组交流会时,听讲师说到数据量大的话不要使用 skip 和 limit
因为,这样会一行一行的数到想到的页数再取 PageSize 的数量。当然他们也提了另外一个方法,但是只略讲了一句。
我在这里提问是想知道具体怎么做?求思路。
大家讲道理2017-04-24 09:12:31
「次のページ」または「前のページ」を取得したい場合は、特定の _id より大きい sort+limit をクエリすることで取得できます。
「xxx ページ」を取得したい場合、完全に正確に取得したい場合、実際にはページング自体が「1 つずつカウントする」ロジックであり、この時間のかかるプロセスは避けられません。インデックスがあります。
ページ数が非常に大きい場合、数千万を超える数字を気にする人はあまりいません。redis を使用して、ページ番号ごとに _id リストをキャッシュし、時々更新することができます。
この問題の基本的な点は、「インデックスが依存する b+ 構造はランキング計算に使用できない」ということです。