HRD迁移破坏了数据存储查询&索引

时间:2012-10-07 10:32:29

标签: google-app-engine migration database-migration

Google appengine HRD迁移对我来说是一场噩梦。我昨天将我的55GB数据存储迁移到了HRD。从那时起,许多查询和索引都被破坏了:

一些例子

  • 从table1中选择*,其中col1 = val1 => query.get()返回空 蟒蛇。但是,它适用于数据存储区查看器。
  • 从table1中选择* 其中col1 = val1 => query.count()大于0。但是query.get()=空。
  • 从table1中选择*其中col1 = val1 order by col2 desc =>几乎 响应中有一半的行被遗漏了。同样的行为 数据存储查看器。

如何修复这些表和索引?有任何方式让Google Appengine团队支持解决此问题吗?它是GAE Migration工具的错误。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

使用迁移工具时,会分配一个新的应用ID,这会使所有密钥都发生变化。

要重新创建自定义索引:

  1. 暂时清空index.yaml。
  2. 清空索引(查看How can I remove unused indexes in Google Application Engine?以获取更多信息)。
  3. 等到所有索引都被删除。
  4. 恢复index.yaml。
  5. 通过重新部署应用程序或运行appcfg.py update_indexes <path>来创建索引(请查看the documentation以获取更多信息)。
  6. 如果您有任何其他引用(例如KeyProperty),您可能还需要手动更新。

    修改
    在放置属性时,将创建/更新由App Engine自动管理的简单单属性索引 要重新生成它们,我建议创建并运行一个简单的MapReduce任务来放置每个现有实体。此过程应重建所有索引(包括index.yaml中定义的索引) 由于这是一个代价高昂的过程,首先要手动使用几个实体来查看它是否能解决问题。

答案 1 :(得分:1)

表格会在大约2-3天内自动修复。这是一个HRD问题。我的问题现在已经解决了。

答案 2 :(得分:0)

更新:最后它会在24小时内自行修复=)

我遇到和你一样的问题

query.count()大于0。但是query.get()或fetch()为空。

奇怪的是,有些表工作正常但有些表有这个问题

我认为从迁移非常大的表(模型)来看是Google App Engine的问题。

我希望我的餐桌也会在2-3天内恢复过来。