84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
如题,我前两天去参加 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}} になります