"Spring og begræns"-tilgangen er ikke særlig effektiv, når du bladrer langt ind i datasættet. Det er faktisk en Shlemiel Malerens algoritme.
Områdeforespørgsler er meget mere effektive (når de understøttes af indekser). Lad os for eksempel forestille os, at du viser tweets. Din sidestørrelse er 20, og du er på side 1000 og vil indlæse side 1001.
Denne forespørgsel
db.tweets.find().sort({created_at: -1}).skip(1001*20).limit(20)
er meget mindre effektiv end
db.tweets.find({created_at: {$lt: last_displayed_date}}).
sort({created_at: -1}).limit(20);
(forudsat at du har indeks på created_at
).
Du får ideen:Når du indlæser en side, skal du notere tidsstemplet for det sidste tweet og bruge det til at forespørge på den næste side.