2011-07-27 46 views
0

我目前在使用Spring/JPA/Google App Engine,並且存在一個令我擔憂的問題。Google App Engine,BigTable和模型演變

GAE很酷的事情是,一旦我的映射被定義,我只需要插入數據,並且與它相關的所有內容都被存儲起來。

但是,如果我碰巧改變了我的映射,那我該如何處理以前的數據呢?每次有變化時,我是否必須創建遷移腳本?在這種情況下,有沒有辦法使用Liquibase或類似的東西?還是有另一種方法來處理現有數據的這些變化?

非常感謝您的幫助! Rolf

回答

1

這取決於這些變化的性質,但在大多數情況下,至少需要更新燈光。需要牢記的一件事是親子關係(更多詳細信息請參見this previous question)以及設計時的實體組;因爲父母成爲實體關鍵的一部分,他們是非常不變的。與鍵名相同。

另一件事是,應用程序引擎實體是無模式的;例如,如果您有一些類Foo,並且您突然向其中添加了一個屬性prop = db.BooleanProperty(default=True),則所有現有的Foo實體都不會將prop設置爲True(雖然新的會)。同樣,您將不得不手動管理ReferenceProperty s和ListProperty(db.Key)。 App Engine確實有一個_set運營商來幫助解決這個問題,但說實話,我發現它有點不可靠,當我知道他們不應該這樣做時,_set就空了。無論如何,這裏的documentation關於使用_set功能。

+0

嗨,感謝您的回答,但鏈接與Python相關,而不是Java。 – Rolf

+0

啊,對不起。這個問題沒有明確標註爲Java,所以我認爲兩者都可以。如果你使用Java,'_set'這個東西不適用於你,但是我提出的觀點仍然有效,即使處理它們的代碼看起來不一樣。 –