如何确保来自备份的 Datastore 项目中的唯一 ID?
How do I ensure unique ids in a Datastore project that comes from a backup?
如果我使用 Google 数据存储 backup utility 进行备份和恢复,数字 ID 将被复制到新的数据存储。
恢复 "manually" 分配数字 ID -- 即,它没有使用自动分配。
然后,如果我使用默认 ID 自动分配创建新实体,我似乎有冲突的风险。如前所述 here:
[A]dvanced applications may sometimes wish to assign their own numeric
IDs manually to the entities they create. Be aware, however, that
there is nothing to prevent Datastore from assigning one of your
manual numeric IDs to another entity.
如何避免此类碰撞?我宁愿不切换到使用 name
s,以保持与我现有的基于 id
的代码的兼容性。
如果还原到同一个项目中,只是重新分配现有的 ID,而不是手动分配 'new' ID。在这种情况下,您不会 运行 遇到任何自动分配问题。作为相关说明,我们跟踪每个实体组的自动分配 ID,因此您不能将子实体从一个组复制到另一个组。
由于我们可以调用内部 API,这适用于跨项目。
没有办法做到这一点。
Google 的备份实用程序在 Google App Engine API 中使用 allocateIdRange
保留 ID。但是,通过 Google 云数据存储 API,此功能不可用。
如果您不分配 ID 范围,则可能会使 Datastore 处于不一致状态,在这种情况下,当您创建具有自动分配 ID 的新实体时会出现异常。
(您可能会找到一些仅使用 GAE API 的方法,但这仅适用于单个项目;它不能从一个项目复制到另一个项目。)
如果我使用 Google 数据存储 backup utility 进行备份和恢复,数字 ID 将被复制到新的数据存储。
恢复 "manually" 分配数字 ID -- 即,它没有使用自动分配。
然后,如果我使用默认 ID 自动分配创建新实体,我似乎有冲突的风险。如前所述 here:
[A]dvanced applications may sometimes wish to assign their own numeric IDs manually to the entities they create. Be aware, however, that there is nothing to prevent Datastore from assigning one of your manual numeric IDs to another entity.
如何避免此类碰撞?我宁愿不切换到使用 name
s,以保持与我现有的基于 id
的代码的兼容性。
如果还原到同一个项目中,只是重新分配现有的 ID,而不是手动分配 'new' ID。在这种情况下,您不会 运行 遇到任何自动分配问题。作为相关说明,我们跟踪每个实体组的自动分配 ID,因此您不能将子实体从一个组复制到另一个组。
由于我们可以调用内部 API,这适用于跨项目。
没有办法做到这一点。
Google 的备份实用程序在 Google App Engine API 中使用 allocateIdRange
保留 ID。但是,通过 Google 云数据存储 API,此功能不可用。
如果您不分配 ID 范围,则可能会使 Datastore 处于不一致状态,在这种情况下,当您创建具有自动分配 ID 的新实体时会出现异常。
(您可能会找到一些仅使用 GAE API 的方法,但这仅适用于单个项目;它不能从一个项目复制到另一个项目。)