On Dec 14, 2007, at 7:57 PM, James M Snell wrote:

I've implemented paging a number of times.  The easiest approach has
always been to use page and pagesize.  Doing so, however, has it's
disadvantages.  For one, the pages are unstable -- that is, as new
entries are added to the collection, the entries slide through the pages making it difficult for a client to completely and consistently sync up
the changes.  An alternative approach would be to based paging on date
ranges, each each page could represent all entries modified within a
given period of time.  Such pages will generally be much less volatile
over time.

What I did in a similar situation was using the first/last entry id instead. When you generate the first page, you take the id of the last entry and construct the 'next' link by append "before=<id-of- last-entry>". When generating the next page, the server has to look up all entries whose date is less than the date of the entry whose id has been passed as a parameter.

Similarly, you generate a 'previous' link by appending "after=<id-of- first-entry>".

You can also avoid doing date comparisons if you can generate ids that are lexicographically order according to their age.

You can even use a range of ids to have more stable collections, as James suggests.

                Ugo


--
Ugo Cei
Sourcesense - making sense of Open Source: http://www.sourcesense.com



Reply via email to