数据存储区 - 如果您删除一个实体,将来是不是可以在新创建的实体上重复使用它的实体 ID?

Posted

技术标签:

【中文标题】数据存储区 - 如果您删除一个实体,将来是不是可以在新创建的实体上重复使用它的实体 ID?【英文标题】:Datastore - If you delete an entity, is it possible for it's entity id to be reused on a newly created entity in the future?数据存储区 - 如果您删除一个实体,将来是否可以在新创建的实体上重复使用它的实体 ID? 【发布时间】:2022-01-21 05:05:31 【问题描述】:

在 Google Datastore(或 Firestore)中,如果您删除了一个实体,它的实体 ID 是否有可能在未来在新创建的实体上重复使用?

例如:

    我创建了一个具有自动分配 ID 的实体。 我删除了那个实体。 将来某个时候,我会创建一个具有自动分配 ID 的新实体。

是否可以为新实体分配一个以前使用过的 id?

【问题讨论】:

【参考方案1】:

是否可以为新实体分配一个以前使用过的 id?

是的,有可能,但极不可能。在您可以想象的任何情况下(也就是说,essentiallyimpossible 发生碰撞),任意两个 ID 被随机生成为相等值的概率相同。 ID 不会以任何方式“保留” - 它们只是由创建它们的 SDK 随机生成的。您也可以生成自己的 ID 并获得相同的效果。

【讨论】:

我担心我删除的实体的id可能会被系统再次使用。但是您说它们无论如何都是随机生成的。因此可以安全地假设已删除实体的 id 很可能不会在该实体中再次使用?因为它的可能性极小? 从上面的答案:“在你可以想象的任何情况下,任何两个 ID 随机生成为相等值的概率相同”。你刚才想象的情况完全一样。担心这些随机 ID 发生碰撞与担心地球在您一生中的任何时候与太阳发生碰撞一样合理。【参考方案2】:

这是可能的,但您可以通过在删除后调用reserveIds 来避免这种情况。

【讨论】:

以上是关于数据存储区 - 如果您删除一个实体,将来是不是可以在新创建的实体上重复使用它的实体 ID?的主要内容,如果未能解决你的问题,请参考以下文章

数据存储区能否生成覆盖我的实体的 ID?

数据存储区 - 单个实体组中的资源争用 -

[Asp.net mvc]实体更新异常:存储区更新插入或删除语句影响到了意外的行数。实体在加载后可能被修改或删除。

请帮助我了解 GAE 数据存储区中的实体层次结构

核心数据迁移是不是必要?

在 Google App Engine 上的数据存储区中更新大量实体