我试图弄清楚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.javaKeyFactory.javaKeyTranslator.java似乎都不对密钥的name属性强加任何限制。因此,如果有限制,则可以在其他地方实现。 KeyTranslator调用com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName(),这可能是实现限制的地方,但是不幸的是我无法在任何地方找到该类的源代码...

具体来说,我想知道:

  • 是500个字符的限制,是专门为后端中某个地方的键名强加的硬性限制,还是仅仅是一个建议,应该足以确保完整的键串永远不会超过1500-byte limit of a short text property(无法对具有更多字节的长文本属性进行索引) ,如果我理解正确的话)。
  • 如果是硬限制:
  • 是500个字符还是500个字节(即经过某种编码后的长度)?
  • 密钥名称是否可以使用全部500个字节/字符,还是要从该数字中减去其他密钥组件(种类,父项,应用程序ID等)?
  • 如果是建议:
  • 在所有情况下是否足够?
  • 如果所有密钥都位于应用程序的根目录下并且种类只有一个字母长,我可以使用的最大值是多少?换句话说:在给定其他关键要素的情况下,是否可以使用公式来计算实际限额?
  • 最后,如果我只是尝试通过尝试存储长度增加的密钥直到出现异常,来衡量此限制,那么如果我仅创建具有相同祖先路径和相同长度的密钥,我将能够依靠我发现的限制在同一个应用程序中还是在某些情况下可能向密钥添加了其他可变长度组件,并在某些情况下减小了可用的密钥名称长度?开发服务器和生产服务器是否应该相同?
  • 最佳答案

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

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

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

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

    密钥名称是否可以使用完整的500个字节/字符,还是要从该数字中减去其他密钥组件(种类,父项,应用程序ID等)?

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

    09-30 23:12
    查看更多