众所周知,AppEngine 数据存储是建立在 Bigtable 之上的,Bigtable 本质上是按键排序的。还知道 (somewhat) AppEngine 数据存储如何生成 key :通过“组合”应用程序 ID、实体类型、实例路径和唯一实例标识符(可能通过连接,参见 here)。
不清楚的是,在存储唯一实例标识符之前是否对其进行了转换,例如会使顺序键在存储中不连续(例如,如果我指定 key_name="Test",则“Test”只是串联在键的末尾没有转换?)当然,保留应用程序 ID、实体类型和路径是有意义的,以利用 Bigtable 中的位置/键排序(谷歌的其他主要存储技术,F1 ,与分层键的工作方式类似),但我不知道唯一实例标识符。
我可以依赖 key_name
原样保存在 AppEngine 的数据存储中吗?
最佳答案
key 是使用特殊的 Protocol Buffer 序列化组成的,该序列化保留了它编码的字段的自然顺序。这意味着是的,具有相同种类和父级的两个实体将按键名排序它们的键。
但是请注意,排序顺序首先是实体类型和父键,因此即使两个键是顺序的,不同类型或相同类型但具有不同父实体的两个实体也不会按顺序出现。
关于python - AppEngine 数据存储区 key_names 是否保留/排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19996148/