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

了解Java API中AppEngine密钥名的最大长度,java,google-app-engine,key,maxlength,Java,Google App Engine,Key,Maxlength,我试图找出JavaAPI中AppEngine的最大长度 这个问题以前被问得不够深入: 并收到了两个相互矛盾的答案(其中一个在我看来不太可信的答案是公认的答案…) @ryan能够在中提供相关Python API源代码的链接,我一直在尝试在Java API中找到类似的内容 但是,无论是,还是,似乎都不对键的名称属性实施任何限制。因此,如果有限制,它将在其他地方实施KeyTranslator调用com.google.storage.onestore.v3.OnestoreEntity.Path.El

我试图找出JavaAPI中AppEngine的最大长度

这个问题以前被问得不够深入:

并收到了两个相互矛盾的答案(其中一个在我看来不太可信的答案是公认的答案…)

@ryan能够在中提供相关Python API源代码的链接,我一直在尝试在Java API中找到类似的内容

但是,无论是,还是,似乎都不对键的
名称
属性实施任何限制。因此,如果有限制,它将在其他地方实施
KeyTranslator
调用
com.google.storage.onestore.v3.OnestoreEntity.Path.Element.setName()
,这可能是实现限制的地方,但不幸的是,我在任何地方都找不到此类的源代码

具体而言,我想知道:

  • 500个字符的限制是对后端某个地方的键名专门施加的硬限制,还是仅仅是一个建议,足以确保完整的键字符串永远不会超过(如果我理解正确,则无法索引具有更多字节的长文本属性)
  • 如果是硬限制:

    • 是500个字符还是500个字节(即编码后的长度)
    • 密钥名称是否有完整的500字节/字符,或者其他关键组件(种类、父项、应用程序id等)是否从该数字中扣除
  • 如果是建议:

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


数据存储在后端实现其所有验证(因为它防止一个客户端中的成功操作在另一个客户端中失败)。数据存储密钥具有以下特性:

  • 一个键最多可以有100个路径元素(它们是种类、名称/id对)
  • 每种类型最多可以是1500字节
  • 每个名称最多可包含1500个字节。
500个字符的限制已转换为1500字节的限制。因此,您以前看到的500个字符的限制(如链接问题中的@ryan的答案)现在是1500字节。字符串使用UTF-8编码

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

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


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

感谢您的深入回答!这是个好消息!听到消息来源也是件好事。要是我也能联系到安卓计费团队的人就好了……;)介意我向你指出我的另一个问题(老问题,但仍然相关),关于我认为在官方文档中是“bug”(或至少是不可靠的建议)的问题吗?与此同时,我找到了一份工作,但这可能会引起您或您团队中从事此主题的人员的兴趣:哦,哇!刚刚在链接的源代码中发现了一些其他重要的内容:
一个与regex'...*.'.'匹配的名称是保留/只读的
很高兴知道!嗨,帕特里克·科斯特洛。我仍然对价值观感到困惑。上面您共享的代码是关于服务器API的。但是,根据Android上使用的依赖性,在创建密钥时有一个明确的500个字符的限制。这不是问题所说的限制吗?