Der „Skip and Limit“-Ansatz ist nicht sehr effizient, wenn Sie weit in den Datensatz hineinblättern. Es ist effektiv ein Algorithmus von Shlemiel dem Maler.
Bereichsabfragen sind viel effizienter (wenn sie von Indizes unterstützt werden). Stellen wir uns zum Beispiel vor, dass Sie Tweets anzeigen. Ihre Seitengröße ist 20 und Sie befinden sich auf Seite 1000 und möchten Seite 1001 laden.
Diese Abfrage
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
ist viel weniger effizient als
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(vorausgesetzt, Sie haben einen Index auf created_at
).
Sie haben die Idee:Wenn Sie eine Seite laden, notieren Sie sich den Zeitstempel des letzten Tweets und verwenden Sie ihn, um die nächste Seite abzufragen.