如果我在Google AppEngine中使用create a named key,那么键名是什么类型的字符串?它是使用Unicode字符还是二进制字符串?
更具体地说,如果我想让我的密钥名由8位二进制数据组成,我有办法吗?如果没有,我至少可以使用7位二进制数据吗?或者有任何保留值?是否使用NULL作为End-Of-String标记,例如?
答案 0 :(得分:3)
GAE文档未指定对键名字符串的任何限制。因此,任何内容的字符串都应该有效。
如果要将二进制数据用作标识符,则应将其编码为String。您可以使用任何binary-to-text encoding方法:最常用的似乎是Base64(3个字节= 4个字符)和BinHex(1个字节= 2个字符)。
答案 1 :(得分:2)
我同时有一些时间通过生成一堆带有二进制名称的密钥然后执行一个只有类型的查询来获取所有密钥来实际测试它。结果如下:
"\x00\x13\x127\x255"
的实体,查询将找到此实体,其键名将返回相同的字符串"\x00test"
和\x00\x00test
都将显示为单独的实体,但它们的键是均显示为"test"
由此,我将得出以下建议:
旁白:
我会接受@ PeterKnego的答案而不是这个答案,因为这个答案基本上只是确认并扩展了他已经正确假设的内容。
通过查看Base85,我认为密钥名称的UTF-8编码发生在API中(同时构建source code of the Java API)而不是在BigTable中,所以如果你真的想在存储空间最大化上坚持下去,可能可以构建自己的协议缓冲区并存储完整的8位数据而不会产生开销。但这可能是在寻找麻烦......