【问题标题】:Google App Engine, BigTable and model evolutionGoogle App Engine、BigTable 和模型演变
【发布时间】:2011-07-27 21:46:37
【问题描述】:

我目前正在使用 Spring/JPA/Google App Engine,有一个我担心的问题。

GAE 很酷的一点是,一旦我的映射被定义,我只需要插入数据并且与之相关的所有内容也会被存储。

但是,如果我碰巧更改了我的映射,我该如何处理我以前的数据?每次发生变化时我都必须创建迁移脚本吗?在这种情况下有没有办法使用 Liquibase 或类似的东西?还是有其他方法可以处理现有数据的这些更改?

非常感谢您的帮助! 罗尔夫

【问题讨论】:

    标签: spring google-app-engine jpa bigtable


    【解决方案1】:

    这取决于这些更改的性质,但在大多数情况下,至少需要进行一些轻微的更新。要记住的一件大事是设计时的父子关系(有关更多详细信息,请参阅this previous question)和实体组;由于父母成为实体密钥的一部分,因此它们非常不可变。与键名相同。

    另一件事是应用引擎实体是无模式的;例如,如果您有某个类 Foo 并且您突然添加一个属性 prop = db.BooleanProperty(default=True) 到它,则所有现有的 Foo 实体都不会将 prop 设置为 True(尽管新的实体会)。同样,您必须手动管理ReferencePropertys 和ListProperty(db.Key)。 App Engine 确实有一个 _set 运算符来帮助解决这个问题,但老实说,我发现它有点不可靠,当我知道它们不应该存在时,_sets 会出现空洞。不管怎样,这里是documentation 使用_set 功能。

    【讨论】:

    • 您好,感谢您的回答,但链接与 Python 相关,而不是 Java。
    • 啊,对不起。这个问题没有明确标记为 Java,所以我认为两者都可以。如果您使用 Java,_set 的内容不适用于您,但我提出的观点仍然有效,即使处理它们的代码看起来不同。
    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2011-05-06
    • 2010-12-04
    相关资源
    最近更新 更多