我目前正在将数据库从我以前的GAE应用程序迁移到新的应用程序。 我有一个自制的备份/恢复机制,在我之前的应用程序中已经工作了多年。 由于某些原因,我在序列化的实体之间存在某种关系(我使用Objectify的@Serialize),这就是我需要自定义备份/恢复的原因。
因此,我想在新模型中保留当前自动生成的ID。为此,为了避免冲突,我尝试使用DatastoreService allocateIdRange。 对于我的数据库中的每个ID,我得到“超出最大分配ID”异常。即使是最近创建的实体。
我在其他类似线程中找到的解决方案是不使用此API,并迁移到自定义自动生成的ID(使用UUID.randomUUID())。
如果我没有其他选择,这也是我的解决方案,但是,我看不出为什么allocateIdRange不适合我的情况。
对于您的信息,我尝试分配的ID大约是这个大小: 4925503928532992
谢谢
答案 0 :(得分:0)
我在夜间提出了一个可以工作的想法!有一种方法可以使用应用引擎备份/恢复功能从其他应用程序还原数据库。
我们的想法是首先从另一个应用程序(应保留ID)恢复备份,然后使用我的机制恢复完全相同的备份以更新实体。
编辑:正如本页https://cloud.google.com/appengine/docs/python/console/datastore-backing-up-restoring#backup_and_restore_considerations中所述,此解决方案应该正常运行。我想这是一个很好的解决方法,即使allocateIdRange应该正常工作。