【问题标题】:Sort entities in query by reverse order of creation w/o timestamp. GAE/J按不带时间戳的相反创建顺序对查询中的实体进行排序。 GAE/J
【发布时间】:2012-08-21 14:25:56
【问题描述】:

我们使用带有 Java 和 JDO 2.3 的 GAE。 有没有办法以与创建顺序相反的方式对 JDO 查询的实体进行排序? 我认为如果我们使用索引列而不是时间戳,它将提高性能。对吗?

【问题讨论】:

  • 我更新了我的答案,你不能依赖数据存储服务连续分配 id。

标签: google-app-engine jdo datanucleus


【解决方案1】:

您不能依赖数据存储服务不断分配 ID。

但是您可以将时间戳设置为您的键名的一部分,或者使用DatastoreService.allocateIds 分配一个连续的 id 范围,以确保您的键单调递增。

然后您应该能够使用KEY_RESERVED_PROPERTY 对实体键进行排序。

与索引时间戳属性相比,如果您查询完整实体,您将保存额外的索引查找,但对于 key only 查询没有什么不同。

请注意,降序排序将需要额外的索引,如 App Engine JDO Query documentation 中所述

如果您拥有具有单调键或索引的实体的高写入吞吐量,请注意hot tablet 问题。

【讨论】:

  • 是的,但它们是严格连续的吗?我个人见过 id 是按照 1001、2001、2002、1002 等顺序生成的。似乎前端实例获取 ID 块,然后从这些块中分配。会是这样吗?
【解决方案2】:

如果您在单个时间戳列上进行查询和排序,appengine 将为您创建一个索引,并且查询会非常快。

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 2014-08-21
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多