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

Mar*_* A. 4 java google-app-engine key maxlength

我试图找出Java API中AppEngine 密钥名称的最大长度.

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

数据存储区实体key_name可以有多长(最大字符数)?持有很长的key_names是不是很糟糕?

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

@ryan能够在他的回答中提供相关Python API源代码的链接,并且我一直试图在Java API中找到类似的东西.

Key.java,KeyFactory.javaKeyTranslator.java似乎都没有对name密钥的属性强制执行任何限制.因此,如果存在限制,则在其他地方实施.KeyTranslator调用com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName(),这可能是实现限制的地方,但不幸的是我无法在任何地方找到此类的来源......

具体来说,我想知道:

  • 是500个字符的限制在后端专门处以键名某处的硬限制或者是它只是一个建议,即足以确保完整的密钥字符串不会超过一个简短的文字属性的1500字节的限制(长文本如果我理解正确,则无法索引具有更多字节的属性.
  • 如果是硬限制:

    • 是500个字符还是500 个字节(即某些编码后的长度)?
    • 完整的500字节/字符是否可用于密钥的名称,或者从此编号中扣除其他密钥组件(种类,父级,应用程序ID,...)?
  • 如果是推荐:

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

Pat*_*llo 7

数据存储区在后端实现其所有验证(因为它阻止一个客户端中的成功操作在另一个客户端中失败).数据存储区键具有以下限制:

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

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

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

完整的500字节/字符是否可用于密钥的名称,或者从此编号中扣除其他密钥组件(种类,父级,应用程序ID,...)?

,每字段限制1500字节.