Ich habe Mongodb und NodeJs. Die Verbindung erfolgt über mongoosejs.
Was ist der beste Weg, Ajax Infinity Scroll zu entwickeln? Sollte ich Limit und Offset verwenden?Was ist der beste Weg, um Ajax-Seitenumbrüche mit MongoDb und Nodejs durchzuführen?
13
A
Antwort
33
"Überspringen und begrenzen" -Ansatz ist nicht sehr effizient, wenn Sie weit in Datensatz blättern. Es ist effektiv ein Shlemiel the Painter's algorithm.
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 sind auf Seite 1000 und möchten Seite 1001.
, dass Sie 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);
(zur Verfügung gestellt laden haben Index auf created_at
).
Sie erhalten 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.
Was ist zu tun, wenn einige Tweets gleichzeitig von verschiedenen Benutzern erstellt werden, aber ich sie zeigen muss? –
Genau die gleiche Millisekunde? Ich denke nicht. –
Wenn das der Fall ist, sortieren nach 'created_at: -1, user_id: 1' –