【问题标题】:HRD migration broke datastore queries & indexesHRD 迁移破坏了数据存储查询和索引
【发布时间】:2012-09-27 21:27:34
【问题描述】:

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

一些例子

  • Select * from table1 where col1=val1 => query.get() 在 Python。但是,它适用于数据存储查看器。
  • 从表 1 中选择 * 其中 col1=val1 => query.count()>0。但是 query.get() = 空。
  • Select * from table1 where col1=val1 order by col2 desc => 差不多 响应中遗漏了一半的行。相同的行为 数据存储查看器。

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

将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

    重新创建自定义索引:

    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 了解更多信息)来创建索引。

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

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

    【讨论】:

    • 对于上面的前两个示例,我在 index.yaml 中没有任何索引。
    • @SaurabhSahni 很抱歉忽略了这一点。我已经用有关自动索引的信息更新了我的答案。请检查它是否有帮助,如果没有,请告诉我。
    • 谢谢。但是,这将是很多工作!有什么方法可以让 Google Appengine 团队支持解决这个问题?它是一个 GAE 迁移工具错误。
    • 这不是很多工作。您可以下载the mapreduce library 并用几行代码完成它。但是,这将花费很长时间,并且肯定会花费您很多钱。 Try filing a production issue.
    • 谢谢,这救了我的服务器。我在部署到新实例之前开始复制数据,但我的索引已损坏。我已经使用这个答案修复了它们。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      更新:终于在 24 小时内自行修复=)

      我和你有同样的问题

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多