了解 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 键名称的最大长度 的相关文章

  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 给定两个 SSH2 密钥,我如何检查它们是否属于 Java 中的同一密钥对?

    我正在尝试找到一种方法来验证两个 SSH2 密钥 一个私有密钥和一个公共密钥 是否属于同一密钥对 我用过JSch http www jcraft com jsch 用于加载和解析私钥 更新 可以显示如何从私钥 SSH2 RSA 重新生成公钥
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • Java TestNG 与跨多个测试的数据驱动测试

    我正在电子商务平台中测试一系列商店 每个商店都有一系列属性 我正在考虑对其进行自动化测试 是否有可能有一个数据提供者在整个测试套件中提供数据 而不仅仅是 TestNG 中的测试 我尝试不使用 testNG xml 文件作为机制 因为这些属性
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 如何在 javadoc 中使用“<”和“>”而不进行格式化?

    如果我写
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch

随机推荐