ホームページ  >  記事  >  データベース  >  mongoDB はページングをどのように実装しますか?

mongoDB はページングをどのように実装しますか?

零下一度
零下一度オリジナル
2017-07-03 16:39:201776ブラウズ

この記事では、主に mongoDB の pagination を実装する 2 つの方法を詳しく紹介します。興味のある方は、limit()、skip()、sort()、これら 3 つの関数を組み合わせてページング クエリを実行します。

以下は私のテストデータです

db.test.find().sort({"age":1});

最初の

メソッド

最初のページのデータをクエリします: db .test.find().sort({"age":1}).limit(2);

2 ページ目のデータをクエリします: db.test.find().sort({"age" :1}).skip(2).limit(2);

他のページ数などをクエリします。 。 。

2 番目のメソッド

最初のページのデータをクエリします: db.test.find().sort({"age":1}).limit(2);

上記の番号に従います同じ方法です。

2 番目のページのデータをクエリします:

これは、最初のページの最後のレコードの値を取得し、前のレコードを除外して新しいレコードを取得します

要約すると、データが非常に大きい場合は、最初の方法を使用できます。結局のところ、データの量が比較的大きい場合は、2 番目の方法を使用することをお勧めします。 Skip はレコードをスキップしすぎるため、効率が少し低くなります

慎重に検討した結果、2 番目の方法は確かにページジャンプには適しておらず、効率はあまり高くありません

大量のデータの場合、特別な処理を行う必要があります。

次の 2 つの方法があります

これは、Baidu のページング処理に似ています。最初の 700 レコードなので、パフォーマンスの問題を考慮する必要はありません。結局のところ、ほとんどの人は最初の 10 ページを見るだけで必要なものを見つけることができます

レコードの合計数は推定できるはずです。見つかったこれらのレコードの割合に基づいて

2番目の一方通行

IDに従ってソートされていると仮定して、これを行うことができ、IDとそのIDが配置されているページのシリアル番号を保存できますredis/MemberCached、

これと同じように、各ページに 10 個のレコードがあると仮定します

id page

1 1

2 1。 。 。 10 1

11 2

12 2

。 。 。 。

20 2

このようにして、最初のページを確認すると、直接10個のデータを取得することができます

データが1億個あり、1つのレコードIDが4バイト、その他の情報が1バイトを占有し、 1 つのレコードは 5 バイトを占有します

1 0000 0000 *5/(1024*1024)=476MB

このアプローチでは、一般に、データベースのクエリ時間のほとんどがデータベースへの接続に費やされます。キャッシュによりクエリが大幅に高速化されます

以上がmongoDB はページングをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。