【问题标题】:Pagination Techniques using Google App Engine使用 Google App Engine 的分页技术
【发布时间】:2011-06-12 18:45:56
【问题描述】:

我想使用 GAE (Java) 的光标功能为我的网站实现分页。但是,只有一个向前游标;自 App Engine SDK 1.4.0 起未实现后向光标。因此,为了实现前一页功能,建议我将光标页面明智地存储在 memchache 中。但我的问题是 - 当新记录添加到数据存储区时,各个页面的旧游标将变得无效。我该如何处理这种情况?

以前有没有人用 Java 中的游标实现过这个功能?请详细说明此算法。

另外,我还没有在 Java 中看到相同的具体实现/示例。如果可能,请您分享一些链接。

【问题讨论】:

    标签: google-app-engine pagination


    【解决方案1】:

    如果您的解决方案是 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

    【讨论】:

      最近更新 更多