了解 Java API 中 AppEngine 键名的最大长度
Understanding maximum length of an AppEngine key-name in the Java API
我想弄清楚 Java API.
中 AppEngine key name 的最大长度是多少
这个问题以前被问得不够深入:
How long (max characters) can a datastore entity key_name be? Is it bad to haver very long key_names?
并收到了两个相互矛盾的答案(我认为不太可信的答案是被接受的答案...)
@ryan 能够在 his answer 中提供指向相关 Python API 源的链接,我一直试图在 Java API.
但是 Key.java, nor KeyFactory.java, nor KeyTranslator.java 似乎都没有对密钥的 name
属性 施加任何限制。因此,如果有限制,它会在其他地方实施。 KeyTranslator
调用com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName()
,这可能是实施限制的地方,但不幸的是我无法在任何地方找到这个class的来源...
具体来说,我想知道:
- 500 个字符的限制是专门针对后端某处的键名施加的硬性限制,还是只是建议 应该 足以确保完整的键字符串永远不会超过 1500-byte limit of a short text property(如果我理解正确的话,不能为具有更多字节的长文本属性编制索引)。
如果是硬限制:
- 是 500 字符 还是 500 字节(即编码后的长度)?
- 密钥名称是否有完整的 500 bytes/characters 或其他密钥组件(类型、父级、应用程序 ID...)是否从该数字中扣除?
如果是推荐:
- 是否在所有情况下都足够?
- 如果所有键都位于我的应用程序的根目录中并且类型只有一个字母长,我最多可以使用多少?换句话说:是否有一个公式可以用来计算给定其他关键组件的 real 限制?
最后,如果我只是尝试通过尝试存储增加长度的密钥来测量此限制,直到我遇到一些异常,我是否能够依赖我发现的限制,如果我只创建在同一应用程序中具有相同祖先路径和相同长度类型的密钥?或者在某些情况下,是否有可能添加到密钥的其他可变长度组件并减少可用的密钥名称长度?开发服务器和生产服务器应该一样吗?
Datastore 在后端实现其所有验证(因为它防止一个客户端中的成功操作在另一个客户端中失败)。数据存储键具有 following restrictions:
- 一个键最多可以有 100 个路径元素(这些是种类,name/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 API.
中 AppEngine key name 的最大长度是多少这个问题以前被问得不够深入:
How long (max characters) can a datastore entity key_name be? Is it bad to haver very long key_names?
并收到了两个相互矛盾的答案(我认为不太可信的答案是被接受的答案...)
@ryan 能够在 his answer 中提供指向相关 Python API 源的链接,我一直试图在 Java API.
但是 Key.java, nor KeyFactory.java, nor KeyTranslator.java 似乎都没有对密钥的 name
属性 施加任何限制。因此,如果有限制,它会在其他地方实施。 KeyTranslator
调用com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName()
,这可能是实施限制的地方,但不幸的是我无法在任何地方找到这个class的来源...
具体来说,我想知道:
- 500 个字符的限制是专门针对后端某处的键名施加的硬性限制,还是只是建议 应该 足以确保完整的键字符串永远不会超过 1500-byte limit of a short text property(如果我理解正确的话,不能为具有更多字节的长文本属性编制索引)。
如果是硬限制:
- 是 500 字符 还是 500 字节(即编码后的长度)?
- 密钥名称是否有完整的 500 bytes/characters 或其他密钥组件(类型、父级、应用程序 ID...)是否从该数字中扣除?
如果是推荐:
- 是否在所有情况下都足够?
- 如果所有键都位于我的应用程序的根目录中并且类型只有一个字母长,我最多可以使用多少?换句话说:是否有一个公式可以用来计算给定其他关键组件的 real 限制?
最后,如果我只是尝试通过尝试存储增加长度的密钥来测量此限制,直到我遇到一些异常,我是否能够依赖我发现的限制,如果我只创建在同一应用程序中具有相同祖先路径和相同长度类型的密钥?或者在某些情况下,是否有可能添加到密钥的其他可变长度组件并减少可用的密钥名称长度?开发服务器和生产服务器应该一样吗?
Datastore 在后端实现其所有验证(因为它防止一个客户端中的成功操作在另一个客户端中失败)。数据存储键具有 following restrictions:
- 一个键最多可以有 100 个路径元素(这些是种类,name/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 字节限制。