【发布时间】:2012-08-21 14:25:56
【问题描述】:
我们使用带有 Java 和 JDO 2.3 的 GAE。 有没有办法以与创建顺序相反的方式对 JDO 查询的实体进行排序? 我认为如果我们使用索引列而不是时间戳,它将提高性能。对吗?
【问题讨论】:
-
我更新了我的答案,你不能依赖数据存储服务连续分配 id。
标签: google-app-engine jdo datanucleus
我们使用带有 Java 和 JDO 2.3 的 GAE。 有没有办法以与创建顺序相反的方式对 JDO 查询的实体进行排序? 我认为如果我们使用索引列而不是时间戳,它将提高性能。对吗?
【问题讨论】:
标签: google-app-engine jdo datanucleus
您不能依赖数据存储服务不断分配 ID。
但是您可以将时间戳设置为您的键名的一部分,或者使用DatastoreService.allocateIds 分配一个连续的 id 范围,以确保您的键单调递增。
然后您应该能够使用KEY_RESERVED_PROPERTY 对实体键进行排序。
与索引时间戳属性相比,如果您查询完整实体,您将保存额外的索引查找,但对于 key only 查询没有什么不同。
请注意,降序排序将需要额外的索引,如 App Engine JDO Query documentation 中所述
如果您拥有具有单调键或索引的实体的高写入吞吐量,请注意hot tablet 问题。
【讨论】:
如果您在单个时间戳列上进行查询和排序,appengine 将为您创建一个索引,并且查询会非常快。
【讨论】: