如果您的解决方案是ajax-y,您可以将游标(作为字符串)保存在客户端的数组中,因此您不需要将其存储在memcache中。
当数据被添加(或删除/更改)时,旧游标不会失效。你仍然可以使用它们。就你而言,它们基本上代表了页面上的第一项。因此,唯一可能发生的情况是,如果您在结果的第3页上,然后导航回去然后转发,则可能看不到第3页中完全相同的实体。
例如,如果您从第2页第3页:
- 第2页(光标= X2)的结果:[d,E,F,...,G]
- 第3页(光标= X3)的结果:[H,I,J ,...]
然后,如果'e'被删除。向后走,第2页(cursor = x2)现在将显示[d,f,...,g,h],并且我们更新光标x3,因为它改变了(我们在第2页的每次fetch()后检查它)。现在,第3页现在将具有[i,j,...]
类似地,如果在'e'之后添加'e2',回到第2页,我们将会有[d,e,e2, f,...]和x3被更新。接下来,第3页将包含[g,h,i,j,...]
唯一的警告是第一页永远不要使用游标(如果元素在第一个之前添加),以及您应该始终允许用户“尝试”进入下一页,以防元素在最后结果之后被添加。
因此,页码不会非常具体,但是在处理分页数据时,它们不可能是可以更新的。一个窍门是不使用页码,但将页面标记为“以元素x开头的数据”或类似的东西。
我不知道任何实现,但它应该是相当海峡实施。游标功能在文档中描述得非常好:http://code.google.com/appengine/docs/java/datastore/queries.html#Query_Cursors