1

众所周知,AppEngine 数据存储建立在 Bigtable 之上,Bigtable 本质上是按键排序的。AppEngine 数据存储区如何生成密钥也是众所周知的(有点):通过“组合”应用程序 ID、实体类型、实例路径和唯一实例标识符(可能通过串联,请参见此处)。

尚不清楚的是,是否在存储该唯一实例标识符之前对其进行了转换,例如会使顺序键在存储中不连续(例如,如果我指定 key_name="Test",则“Test”只是在末尾连接没有转换的键?)当然,保留应用程序 ID、实体类型和路径以利用 Bigtable 中的位置/键排序(Google 的其他主要存储技术 F1 的工作方式类似使用分层键),但我不知道唯一的实例标识符。

我可以依赖key_names 在 AppEngine 的数据存储中保持原样吗?

4

2 回答 2

4

键是使用特殊的协议缓冲区序列化组成的,该序列化保留了它编码的字段的自然顺序。这意味着是的,具有相同种类和父级的两个实体的键将按键名排序。

但是请注意,排序顺序首先具有实体类型和父键,因此即使它们的键是顺序的,两个不同类型或相同类型但具有不同父实体的实体也不会顺序出现。

于 2013-11-15T08:29:55.720 回答
0

除了@Nick 解释的内容:

如果您使用自动生成的数字 ID,旧系统过去是半递增的(ID 被分配在递增的块中),但在新系统中它们非常分散。

于 2013-11-15T14:22:09.507 回答