数据迁移和AppEngine

str*_*go0 5 python google-app-engine data-migration ruby-on-rails-3

我在rails中做了很多开发,我正在研究使用python和app引擎开发项目.

从演示项目到目前为止我所看到的,我对app引擎项目有疑问/担忧:

如何在app-engine中处理数据迁移?例如,如果我更改实体/表的名称(例如:文本到文档),或更改现有表中的列(例如:age到dob) - 当发生这种情况时,它如何处理旧数据?

谢谢!

Chr*_*loe 8

简短的回答是:它没有处理它.您无法更改实体的名称,您可以更改属性,但您必须手动更新数据.

您的模型定义只是您的应用程序"视图",了解如何解释存储在数据存储区中的实体.如果我的定义如下:

class MyEntity(db.Model):
    text = db.TextProperty()
Run Code Online (Sandbox Code Playgroud)

并运行我的应用程序一段时间填充text我的enties属性,然后将列重命名为:

class MyEntity(db.Model):
    description = db.TextProperty()
Run Code Online (Sandbox Code Playgroud)

我现有的所有数据都将保持原样(数据存储区中的许多实体具有填充text属性.只有当我尝试将实体加载到我的模型实例中时,我才会将它们视为空实体(没有description设置,也没有办法访问text当前存在的数据).然后将我的实体保存(放入)到数据存储区将覆盖旧数据,数据将丢失.

如果您对此架构进行此类更改,或者更有可能只更改字段类型.您可以自行预处理数据以处理更改.如果您尝试加载不再符合模型定义的实体,模型层将引发错误.

为了帮助完成更新数据的手动任务,选择的武器是:

  1. remote_api/remote_api_shell.py
  2. 映射精简库(尤其是"映射"的一部分)

使用remote_api [1]设置,您可以打开与实时数据交互的Python会话,并在本地(大多数情况下)运行脚本,就好像它们直接在生产服务器上运行一样.我发现这是修复/清理小型一次性任务数据的最快最简单的方法.

如果你有一个更大的任务映射器API [2]可以采用,比如改变数以百万计的实体,并想在尽可能平行做尽可能多的这种优势.