我们目前计划合并两个App项目,并希望将所有数据从欧盟数据存储转移到美国数据存储。
数据将使用谷歌的导出/导入工具(https://cloud.google.com/datastore/docs/export-import-entities)移动。但是,我们不确定现有的数据存储如何处理具有自动生成ID的插入实体。我们能否确保以后存储的任何实体都使用现有的ID,从而覆盖现有的实体?(数据存储接收器中尚未存在所有复制的实体)
文件中说:
“导入不向实体分配新ID。导入使用导出时存在的ID,并覆盖任何具有相同ID的现有实体。在导入期间,在导入实体时保留ID。如果在运行导入时启用了写入,则此功能可防止与新实体的ID冲突。”
“在导入实体时保留ID”是否意味着它们也会被阻塞,以便将来分配新的自动生成的ID?
示例
在Datastore1 (原产地,EU)中,我有一个具有自动生成的长Ids的实体。假设我保存了10,000个这样的实体,然后删除了其中的1,000个实体。我所确定的是,如果我在datastore1中保存一个新实体(即到目前为止还没有设置Id ),那么它将得到以前从未使用过的Id。因此,Id将不同于现有的9,000个实体,也不同于被删除的1,000个实体。
现在,我将所有实体导出到Cloudstorage (gcloud数据存储导出),然后将它们从Cloudstorage导入到另一个数据存储Datastore2 (gcloud数据存储导入)。当然,这将在Datastore2中创建9,000个给定类型的实体(这类实体以前在Datastore2中不存在)。
我现在的问题是:当我在Datastore2中存储1个(或多个)新实体/ies时,它总是会得到一个新的Id,还是会发生冲突?
有两种方式的身份碰撞。
类型A:一个新实体覆盖现有的9,000个复制实体中的一个。类型B:新实体获得的Id等于Datastore1中被删除的1,000个实体中的一个(显然,在Datastore2中,从来没有一个实体具有这些id,但我想知道导出/导入是否也阻止了这些id)
有人知道A型或B型是否会在某一时刻发生吗?
发布于 2018-09-19 19:56:21
执行从数据库1到数据库2的导入时,在实体被放入新数据库之前保留所有is (有关保留is的更多信息,请参见REST文件 )。
这意味着数据库2不会分配从数据库1导入的ID (类型A不会发生)。
但是,导入将而不是保留它不知道的实体的ie(即已删除的实体)。这些ID可以在数据库2中重新使用。(B类型将发生)。
https://stackoverflow.com/questions/52387310
复制相似问题