14

私はmongodbとNodeJを持っています。接続はmongoosejsを介して行われます。
ajaxインフィニティスクロールを開発するための最良の方法は何ですか?制限とオフセットを使用する必要がありますか?

4

1 に答える 1

36

「スキップアンドリミット」アプローチは、データセットに深くページングしている場合はあまり効率的ではありません。これは事実上、画家のアルゴリズムであるシュレミエルです

範囲クエリははるかに効率的です(インデックスでサポートされている場合)。たとえば、ツイートを表示しているとしましょう。ページサイズが20で、ページ1000にいて、ページ1001をロードしたいと考えています。

このクエリ

db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)

よりもはるかに効率が悪い

db.tweets.find({created_at: {$lt: last_displayed_date}}).
          sort({created_at: -1}).limit(20);

(にインデックスがある場合created_at)。

ページをロードするときに、最後のツイートのタイムスタンプをメモし、それを使用して次のページを照会するというアイデアが得られます。

于 2012-04-09T11:37:16.440 に答える