2

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

一些例子

  • Select * from table1 where col1=val1 => query.get() 在 python 中返回空。但是,它适用于数据存储查看器。
  • 从 table1 中选择 *,其中 col1=val1 => query.count()>0。但是 query.get() = 空。
  • Select * from table1 where col1=val1 order by col2 desc => 响应中几乎有一半的行丢失了。数据存储查看器中的相同行为。

如何修复这些表和索引?有什么方法可以让 Google Appengine 团队支持解决这个问题?它是一个 GAE 迁移工具错误。

将不胜感激任何帮助。

4

3 回答 3

4

使用迁移工具时,会分配一个新的 app id,这会使所有的 key 发生变化。

要重新创建自定义索引:

  1. 暂时为空 index.yaml。
  2. 清理索引(查看如何在 Google 应用程序引擎中删除未使用的索引?了解更多信息)。
  3. 等到所有索引都被删除。
  4. 恢复 index.yaml。
  5. 通过重新部署应用程序或运行来创建索引appcfg.py update_indexes <path>(查看文档以获取更多信息)。

如果有的话,您可能还需要手动更新所有其他引用(例如键的 ListProperty)。

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

于 2012-10-07T15:09:48.853 回答
1

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

于 2012-10-11T08:37:28.780 回答
0

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

我和你有同样的问题

查询.count()>0。但是 query.get() 或 fetch() 是空的。

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

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

我希望我的桌子也能在 2-3 天内像你的一样恢复。

于 2014-02-01T02:02:14.643 回答