如果您的解决方案是 ajax-y,您可以将光标(作为字符串)保存在 javascript 客户端的数组中,因此您不需要将其存储在 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