【问题标题】:How to implement EndCursors in GAE/J - JDO如何在 GAE/J 中实现 EndCursors - JDO
【发布时间】:2013-04-14 13:03:37
【问题描述】:

我有一个在数据存储上使用 JDO 的 GAE/J 应用程序,并且我已经能够使用游标对查询结果进行分页。默认实现是我们在我的团队中称为startCursor 的东西(即从这一点开始给我结果)。我现在想要的是我们称之为endCursor 的东西(即给我从一开始到现在的结果)。想象一下某种 Twitter 时间线(不支持 PUSH 的时间线),其中客户端必须轮询某些服务器以获取新内容。现在让我们假设客户端在 5 分钟前获取了一些数据;该数据表示开始(5 分钟前)到光标“X”的某一点。现在客户想要更新时间线,这意味着客户想要提取从现在到 5 分钟前开始的新鲜内容。如何在 GAE/J - JDO 上实现这一点?

[edit:] 假设商店中有 1000 个按时间戳排序的实体。然后我获取了前 20 个。之后,创建了 7 个新实体。如何使用查询仅检索这 7 个新实体?

【问题讨论】:

    标签: java google-app-engine cursor google-cloud-datastore jdo


    【解决方案1】:

    更改 ORDER 以便事情可能会下降

    【讨论】:

    • 假设商店中有 1000 个按时间戳排序的实体。然后我获取了前 20 个。之后,创建了 7 个新实体。如何在查询中仅检索那些新的 7?操纵 ORDER 显然不能解决这个问题。
    • “从这一点”进行查询的唯一方法是知道“点”,并将其放入过滤器中(如最高 id 或时间戳取决于类)。 O/P 不清楚,因此建议您在其中进行澄清
    【解决方案2】:

    将查询排序设置为时间戳升序。当您检索到 5 分钟前 (X) 的查询结果时,获取并保存光标。

    稍后,使用此游标运行相同的查询:可以检索点 X 之后的项目。

    (这个原理和你已经使用的游标有什么不同?)

    【讨论】:

    • 酷。我明白你的意思。但是现在考虑到我有超过 40,000 个实体(并且还在迅速增加),我不确定在我到达底部 20 之前(按升序)阅读所有实体是否有效,然后保存光标。运行时和成本效率都会受到影响,我不知道是否有可能在 AppEngine 规定的 30 秒时间内拉出 100,000 个实体(只是为了获得一个光标以供重用)。还是我错过了什么?
    • 我认为我没有正确理解您的情况。但是.... @DataNucleus 有一点。您可能需要两个按时间戳排序的查询:一个升序,一个降序。每个查询都需要自己的游标。每个查询都必须在没有游标的情况下运行才能生成初始查询。可以保存每个生成的查询游标,然后将其用于后续查询,并保存生成的查询游标。这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多