【发布时间】:2015-01-23 20:44:04
【问题描述】:
App Engine 数据存储区查询的返回值是否有默认排序顺序?如果有,那是什么?
【问题讨论】:
标签: google-app-engine google-cloud-datastore
App Engine 数据存储区查询的返回值是否有默认排序顺序?如果有,那是什么?
【问题讨论】:
标签: google-app-engine google-cloud-datastore
默认情况下,您会获得密钥顺序,而密钥顺序取决于您是采用默认 id 还是提供密钥名称,如果是前者,则取决于您是否使用默认策略进行密钥分配。 The doc 表示“默认策略会生成一个随机的 ID 序列,这些 ID 大致均匀分布。每个 ID 最多可以有 16 位十进制数字。”
“16 位”部分很有趣。基本上,密钥是 53 位——IEEE 双精度的小数部分。 JavaScript 使用 IEEE 双精度,因此 53 位是您可以安全地通过 JSON 往返的最大整数值。
【讨论】:
Person.all() 相当于Python 中的Person.all().order('__key__'),其中Person 是一个实体?
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
如果我遗漏了什么,请纠正我。
【讨论】:
这取决于您过滤的参数。基本上,排序顺序始终是 ASC,具体取决于它的过滤方式。看看this document 它可能会有所帮助。基本上,您使用的任何过滤器都将确定排序顺序。另一个有趣的文档是 this one,它更详细地解释了索引。
如果您不使用过滤器,我相信使用的索引是基于键的索引,因此您将使用升序键作为您的顺序。
【讨论】: