使用对象数据库时,如何处理对象模型的重大更改?

如果使用对象数据库,当需要更改对象模型的结构时会发生什么? 例如,我正在玩Google App Engine。当我正在开发我的应用程序时,我意识到在某些情况下,我错误地命名了一个类,我想更改名称。我认为我需要巩固两个班级。 但是,我认为我不能,因为类的名称直观地绑定到数据存储区中,并且存在这些类名下存储的实际数据。 我认为从数据存储中抽象出对象模型的“旧方法”的好处是数据存储对对象模型一无所知 - 这只是数据。因此,您可以更改对象模型,只是以不同方式从数据存储区加载数据。 因此,一般来说,当使用与您的数据模型密切相关的数据存储时...您如何改变周围的事物?     
已邀请:
如果它只是您关注的类命名,则可以在不更改类型(数据存储区中使用的标识符)的情况下更改类名称:
class Foo(db.Model):
  @classmethod
  def kind(cls):
    return 'Bar'
如果要重命名类,只需实现上面的
kind()
方法,并让它返回旧的类名。 如果需要更改数据存储区中数据的实际表示,则必须运行mapreduce来更新旧数据。     
与关系数据库中的方法相同,除非没有简单的SQL脚本:http://code.google.com/appengine/articles/update_schema.html 此外,就像过去一样,没有属性的对象不会自动获取默认值,并且架构中不存在的属性仍然作为对象中的幻像出现。 要重命名属性,我希望您可以删除旧属性(幻像挂起)添加新名称,使用旧(幻影)属性中的副本填充数据。重写的对象只有新属性     
您可以按照我们在项目中的方式执行此操作: 在我们更新对象模型(模式)之前,我们使用自定义导出函数和顶部的版本标记将数据导出为json格式的文件或blob。在更新模式之后,我们使用另一个自定义函数导入json,该函数创建新实体并使用旧数据填充它们。当然导入版本需要知道与每个版本号相关联的json格式。     

要回复问题请先登录注册