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