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