我想弄清楚 Java API 中 AppEngine key name 的最大长度是多少。
这个问题之前被问得不够深入:
并收到两个相互矛盾的答案(我认为不太可信的答案是被接受的答案......)
@ryan 能够在 his answer 中提供相关 Python API 源的链接,我一直在尝试在 Java API 中找到类似的东西。
但是 Key.java 、 KeyFactory.java 和 KeyTranslator.java 似乎都没有对 key 的 name
属性施加任何限制。因此,如果有限制,它会在其他地方实现。 KeyTranslator
调用com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName()
,这可能是实现限制的地方,但不幸的是我在任何地方都找不到此类的源...
具体来说,我想知道:
- 500 个字符的限制是专门针对后端某处的键名施加的硬性限制,还是只是建议应该足以确保完整的键字符串永远不会超过 1500-byte limit of a short text property (如果我理解正确的话,不能为具有更多字节的长文本属性编制索引。
如果是硬限制:
- 是 500 个字符 还是 500 个字节(即编码后的长度)?
- 是否有完整的 500 个字节/字符可用于 key 名称或其他 key 组件(类型、父级、应用程序 ID 等)是否从该数字中扣除?
如果是推荐:
- 是否在所有情况下都足够?
- 如果所有键都位于我的应用程序的根目录中并且类型只有一个字母长,我最多可以使用多少?换句话说:是否有一个公式可以用来计算给定其他关键组件的实际限制?
最后,如果我只是尝试通过尝试存储长度增加的 key 来测量此限制,直到我遇到一些异常,如果我只创建具有相同祖先的 key ,我是否能够依赖我发现的限制同一应用程序中的路径和相同长度的类型?或者在某些情况下,是否有可能添加到 key 的其他可变长度组件并减少可用的 key 名称长度?开发服务器和生产服务器应该一样吗?
最佳答案
Datastore 在后端实现其所有验证(因为它防止一个客户端中的成功操作在另一个客户端中失败)。数据存储 key 具有 following restrictions :
- 一个键最多可以有 100 个路径元素(这些是类型、名称/ID 对)
- 每种类型最多 1500 字节。
- 每个名称最多 1500 个字节。
500 个字符的限制已转换为 1500 个字节的限制。因此,您之前看到 500 个字符限制的地方(例如@ryan 在链接问题中的回答)现在是 1500 个字节。字符串使用 UTF-8 编码。
重要的是回答您问题的一些细节:
Are the full 500 bytes/characters available for the name of the key or do the other key-components (kind, parent, app-id, ...) deduct from this number?
否,每个字段有 1500 字节的限制。
关于java - 了解 Java API 中 AppEngine 键名的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33044281/