2011-03-14 35 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