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

时间:2015-10-09 17:45:58

标签: java google-app-engine key maxlength

我试图弄清楚AppEngine key name在Java API中的最大长度。

这个问题之前的问题要少得多:

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.javaKeyFactory.javaKeyTranslator.java似乎都没有对密钥的name属性强制执行任何限制。因此,如果存在限制,则在其他地方实施。 KeyTranslator调用com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName(),这可能是实施限制的地方,但遗憾的是我无法在任何地方找到此类的来源...

具体来说,我想知道:

  • 500字符限制是否是对后端某处的密钥名称特别强加的硬限制,或者只是建议 足以确保完整的密钥字符串永远不会超过{{ 3}}(如果我理解正确的话,不能索引具有更多字节的长文本属性。)
  • 如果是硬限制:

    • 字符还是500 字节(即某些编码后的长度)?
    • 密钥名称可以使用完整的500个字节/字符,还是从这个号码中扣除其他关键组件(kind,parent,app-id,...)?
  • 如果是推荐:

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

1 个答案:

答案 0 :(得分:7)

数据存储区在后端实现所有验证(因为它阻止一个客户端中的成功操作在另一个客户端中失败)。数据存储区键具有following restrictions

  • 一个密钥最多可以有100个路径元素(这些是类型,名称/ ID对)
  • 每种类型最多可以包含1500个字节。
  • 每个名称最多可以包含1500个字节。

500字符限制已转换为1500字节限制。所以你之前看过500个字符限制的地方(如链接问题中@ ryan的回答)现在是1500字节。字符串使用UTF-8编码。

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

  

密钥名称可以使用完整的500个字节/字符,还是从这个号码中扣除其他关键组件(kind,parent,app-id,...)?

,每个字段限制为1500字节。