升级GAE应用程序时,升级数据模型的最佳方法是什么?
应用程序的版本号允许分隔多个版本,但这些应用程序版本使用相同的数据存储(根据如何在部署到Google App Engine后更改应用程序?).那么当我上传一个具有不同数据模型的应用程序版本时会发生什么(我在想这里的python,但问题也应该对Java有效)?我想如果更改添加一个可空字段和一些新类,这应该不是问题,因此可以扩展现有模型而不会造成伤害.但是,如果数据模型的变化更加深刻呢?如果现有数据与新数据模型不一致,我是否真的丢失了?
我目前看到的唯一选择是将数据存储置于维护只读模式,将数据转换为脱机并再次部署整个数据.
处理这种情况的方法很少,而且它们不是相互排斥的:
getattr(entity, "field_name", default_value)而不是为旧实体entity.field_name导致它AttributeError.逐渐将实体转换为新格式.这很简单:如果您发现仍然使用旧模型的实体,请进行适当的更改.在上面的示例中,您可能希望将实体放回,并添加新字段:
if not hasattr(entity, "field_name"):
entity.field_name = default_value
entity.put()
val = entity.field_name # no getattr'ing needed now
Run Code Online (Sandbox Code Playgroud)
理想情况下,您的所有实体最终都将以这种方式处理,您可以在某些时候删除转换代码.实际上,总会有一些残留物需要手动转换 - 这就把我们带到了第三个选项......
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |