了解 Java API 中 AppEngine 键名称的最大长度

2024-01-29

我想弄清楚 AppEngine 的最大长度是多少key name https://cloud.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Key#getName--位于 Java API 中。

这个问题以前曾被问过,但深度要低得多:

数据存储实体 key_name 可以有多长(最大字符数)? key_name 太长是不是不好? https://stackoverflow.com/questions/2557632/how-long-max-characters-can-a-datastore-entity-key-name-be-is-it-bad-to-haver

并收到了两个相互矛盾的答案(对我来说似乎不太可信的一个是被接受的答案......)

@ryan 能够提供相关 Python API 源的链接他的回答 https://stackoverflow.com/questions/2557632/how-long-max-characters-can-a-datastore-entity-key-name-be-is-it-bad-to-haver/4813780#4813780我一直在尝试在 Java API 中找到类似的东西。

但两者都没有Key.java https://code.google.com/p/googleappengine/source/browse/trunk/java/src/main/com/google/appengine/api/datastore/Key.java, nor KeyFactory.java https://code.google.com/p/googleappengine/source/browse/trunk/java/src/main/com/google/appengine/api/datastore/KeyFactory.java, nor 密钥翻译器.java https://code.google.com/p/googleappengine/source/browse/trunk/java/src/main/com/google/appengine/api/datastore/KeyTranslator.java似乎对name密钥的属性。因此,如果有限制,则在其他地方实施。KeyTranslator calls com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName(),这可能是实现限制的地方,但不幸的是我在任何地方都找不到此类的来源......

具体来说,我想知道:

  • 500 个字符的限制是专门针对后端某个键名称施加的硬性限制,还是只是一个建议should足以确保完整的密钥字符串永远不会超过短文本属性的 1500 字节限制 https://cloud.google.com/appengine/docs/java/datastore/entities#Java_Properties_and_value_types(如果我理解正确的话,无法对具有更多字节的长文本属性进行索引)。
  • 如果是硬限制:

    • 是500吗人物 or 500 bytes(即某种编码后的长度)?
    • 是否有完整的 500 个字节/字符可用于密钥名称,或者是否从该数字中扣除其他关键组件(种类、父级、应用程序 ID 等)?
  • 如果是推荐:

    • 在所有情况下都足够吗?
    • 如果所有密钥都位于我的应用程序的根目录中并且类型只有一个字母长,我可以使用的最大值是多少?换句话说:是否有一个公式可以用来计算real给定其他关键组件的限制?
  • 最后,如果我只是尝试通过尝试存储长度不断增加的密钥来测量此限制,直到遇到一些异常,那么如果我只创建具有相同祖先路径和相同长度类型的密钥,我是否能够依赖我发现的限制在同一个应用程序中?或者是否有其他可变长度的密钥组件可能会被添加并在某些情况下减少可用的密钥名称长度?开发服务器和生产服务器应该相同吗?


数据存储区在后端实现其所有验证(因为它可以防止一个客户端中的成功操作在另一客户端中失败)。数据存储密钥具有以下限制 https://github.com/google/googleapis/blob/master/google/datastore/v1beta3/entity.proto#L54:

  • 一个键最多可以有 100 个路径元素(这些是种类、名称/ID 对)
  • 每种最多 1500 字节。
  • 每个名称最多可为 1500 字节。

500 个字符的限制已转换为 1500 个字节的限制。因此,您之前看到的 500 个字符限制的地方(如链接问题中 @ryan 的答案)现在是 1500 个字节。字符串使用 UTF-8 编码。

重要的是回答您问题中的一些细节:

是否有完整的 500 个字节/字符可用于密钥名称,或者是否从该数字中扣除其他关键组件(种类、父级、应用程序 ID 等)?

No,每个字段的 1500 字节限制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 Java API 中 AppEngine 键名称的最大长度 的相关文章

随机推荐