众所周知,AppEngine数据存储区建立在Bigtable之上,Bigtable本质上是按键排序的。还知道(somewhat)AppEngine数据存储区如何生成密钥:通过“组合”应用程序ID,实体类型,实例路径和唯一实例标识符(可能通过连接,请参阅here )。
不清楚的是在存储之前是否对该唯一实例标识符进行了转换,例如在存储中使顺序键不顺序(例如,如果我指定key_name =“Test”,则是“Test”刚刚连接在没有转换的密钥的末尾?)当然,保留app-id,实体种类和路径是有意义的,以便利用Bigtable中的位置/密钥排序(Google的其他主要存储技术,F1 ,与分层键类似地工作),但我不知道唯一的实例标识符。
我可以依赖于key_name
在AppEngine的数据存储区中保留原样吗?
答案 0 :(得分:4)
使用特殊的协议缓冲区序列化来组成密钥,该序列化保留了其编码的字段的自然顺序。这意味着是的,具有相同种类和父级的两个实体将按密钥名称对其按键进行排序。
但请注意,排序顺序首先具有实体类型和父键,因此,即使其键是顺序的,两个不同类型或相同类型但具有不同父实体的实体也不会按顺序出现。
答案 1 :(得分:0)
除了@Nick解释的内容:
如果您使用自动生成的数字ID,legacy system曾经是半增加的(ID是在增加的块中分配的),但是对于新系统,它们非常分散。