2011-03-14 75 views
1

我在一個非常早期的項目中使用Hibernate EntityManager和Hibernate Annotations for ORM。該項目需要儘快啓動,但規格不斷變化,我擔心繫統將啓動並收集實時數據,然後規格將再次發生變化,並且我將處於需要更改數據庫模式。處理不斷變化的MySQL模式需求的策略?

我該如何設置以減少這種影響?是否有任何處理這種遷移的開源項目? Hibernate可以自動執行此操作(不擦除數據庫)?

您的建議非常感謝。

回答

4

這是一個功能或組織問題,而不是技術問題。沒有工具會自動猜測如何將數據從一個模式遷移到另一個模式。您最好學習如何編寫存儲過程以遷移數據。

您可能需要禁用約束,創建臨時表和列,複製大量數據,然後刪除臨時表和列並重新啓用約束來遷移數據。

一旦進入維護模式,每個修改模式的新功能都應該帶有腳本,允許從當前模式和生產中的數據遷移到新模式。

1

沒有系統可能只從原始和最終模式自動創建數據遷移腳本。沒有足夠的信息。

考慮例如一個新的列。它是否應該包含默認值?或從其他字段/表中計算出的值。

有一個關於數據庫重構一本好書:http://www.amazon.com/Refactoring-Databases-Evolutionary-Addison-Wesley-Signature/dp/0321774515/ref=sr_1_1?ie=UTF8&qid=1300140045&sr=8-1

但有一點要對這種東西沒有工具的支持。

我認爲你可以事先做的最好的事情:

1

Hibernate可以用數據庫中的數據更新數據庫實體模型。所以,這樣做並編寫用於設置或刪除數據關係的Java遷移代碼。

這個工作,我們已經做了多次。但是,當然,要設法​​遵循靈活的開發流程;讓你知道肯定第一,然後重新評估需求 - 混亂等。

0

就你而言,我會建議一個NoSQL數據庫。我對這類數據庫沒有太多的經驗,所以我不能推薦任何當前的實現,所以你也可以檢查this