【问题标题】:Do App Engine datastore queries have a default sort order?App Engine 数据存储区查询是否有默认排序顺序?
【发布时间】:2015-01-23 20:44:04
【问题描述】:

App Engine 数据存储区查询的返回值是否有默认排序顺序?如果有,那是什么?

【问题讨论】:

    标签: google-app-engine google-cloud-datastore


    【解决方案1】:

    默认情况下,您会获得密钥顺序,而密钥顺序取决于您是采用默认 id 还是提供密钥名称,如果是前者,则取决于您是否使用默认策略进行密钥分配。 The doc 表示“默认策略会生成一个随机的 ID 序列,这些 ID 大致均匀分布。每个 ID 最多可以有 16 位十进制数字。”

    “16 位”部分很有趣。基本上,密钥是 53 位——IEEE 双精度的小数部分。 JavaScript 使用 IEEE 双精度,因此 53 位是您可以安全地通过 JSON 往返的最大整数值。

    【讨论】:

    • 所以默认排序顺序Person.all() 相当于Python 中的Person.all().order('__key__'),其中Person 是一个实体?
    • 这是我的理解。
    【解决方案2】:

    Datastore write costs 表示数据存储实体包含内置的EntityByKinds 索引。 This index 包含实体键。

    每次添加任何类型的新实体时,都会使用新实体的键自动将新行添加到此表中,以便以后查询。

    所以我猜如果没有提供订单,数据存储区会返回按键排序的实体。

    实体键被存储,因此如果实体本身作为执行查询的结果返回,则可以有效地检索它。

    我找不到关于asc/desc的文档,但是当我在下面查询时,默认顺序是asc

    >SELECT * FROM Model order by __key__ asc
    >SELECT * FROM Model
    success and same result
    >SELECT * FROM Model order by __key__ desc
    no matching index found
    

    所以我的研究结论是默认顺序是

    order by __key__ asc
    

    如果我遗漏了什么,请纠正我。

    【讨论】:

      【解决方案3】:

      这取决于您过滤的参数。基本上,排序顺序始终是 ASC,具体取决于它的过滤方式。看看this document 它可能会有所帮助。基本上,您使用的任何过滤器都将确定排序顺序。另一个有趣的文档是 this one,它更详细地解释了索引。

      如果您不使用过滤器,我相信使用的索引是基于键的索引,因此您将使用升序键作为您的顺序。

      【讨论】:

      • 不使用过滤器怎么办?
      • 编辑了答案以添加它,即使其他人已经回答了它:)
      • 谢谢。从其他答案看来,默认排序顺序始终是升序,而不是降序。
      • 哇,你完全正确。我不知道为什么我把它们混在一起了。我将进行编辑以反映这一点,以确保答案实际上是有效的。谢谢指出(我不知道为什么我确信它是 desc)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2017-08-14
      • 2013-05-17
      • 1970-01-01
      • 2012-06-13
      • 2015-04-19
      • 1970-01-01
      相关资源
      最近更新 更多