gpt4 book ai didi

google-app-engine - 我可以将 AllocateIDs 用作 "string"吗?数据存储

转载 作者:IT王子 更新时间:2023-10-29 01:59:30 25 4
gpt4 key购买 nike

我需要为数据存储中的每个实体分配一个唯一标识符。我找到了 AllocateIDs但问题是它生成整数,而我使用字符串作为键。将整数转换为字符串是否安全或存在冲突风险(即数据存储返回我当前用作字符串键的相同整数)。 ?

最佳答案

让我们先弄清楚一些事情:

identifier实体 key 的一部分可以是

  • 一个键名字符串
  • 或一个整数数字ID

但不是两者。因此,当您保存一个实体时,它的键要么有一个名为 namestring id,要么(异或)一个名为 intID 的 int64 id .

这 2 个可选标识符字段是不同的:如果您有一个带有 name="1234" 的实体,它不同于带有 intID=1234 的实体。

当您在未明确指定名称intID 的情况下保存新实体时,数据存储将为其分配一个新的唯一intID 标识符。数据存储永远不会自行分配 string name。如果您自己指定一个 string name,则您只能拥有具有 string name 标识符的实体。

数据存储知道它自己生成的自动生成的 intID,并且永远不会生成相同的 intID 两次(良好的行为)。但是,如果您自己指定 intID 保存新实体,则必须注意它的唯一性。这将需要首先检查您希望使用的 intID 是否尚未使用(例如,首先查询它以查看是否没有实体拥有该 intID )但即使这并不能 100% 保证当您最终实际用它保存一个实体时,该实体仍未被使用。 AllocateIDs()函数可用于获取 intID 的连续范围,数据存储以后不会使用该范围自行生成 intID,因此您可以自由使用分配的范围intID 安全。这也意味着如果有并发请求也试图保存新实体(在同一实例中或在其他实例中),如果标识符生成留给它们,它们也永远不会最终使用这些 intID数据存储区。

回到你的问题

您真的需要手动分配标识符吗?在大多数情况下,仅当您已经拥有实体的唯一属性且对于 2 个不同的实体而言不能相同时才使用/需要此属性(例如实体是 Person,它具有属性 IdentityCardId 已经是每个人唯一的了)。

如果您拥有这样一个独特的属性,您可以使用它本身就可以确保唯一性的属性。如果你没有这样的属性,那么你不应该首先使用手动标识符分配,你可以使用/依赖数据存储的自动 intID 分配。

请注意,您可以混合使用同一类型的不同实体的标识符(例如,您可以使用 intIDPerson 和另一个 Person使用名称)。

如上所述,intIDname 是不同的。因此 AllocateIDs() 不会仅仅因为 name 包含有效数字而将具有 name 标识符的实体考虑在内。从数据存储中,您无法获得“分配”name 标识符的帮助(类似于 AllocateIDs() 来分配 intID),因此应用程序逻辑必须确保分配的 name 是唯一的,否则您最终将“覆盖”/替换现有实体。

关于google-app-engine - 我可以将 AllocateIDs 用作 "string"吗?数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29567819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com