处理不断变化的MySQL模式需求的策略?

时间:2011-03-14 21:54:55

标签: java mysql hibernate

我在一个非常早期的项目中使用Hibernate EntityManager和Hibernate Annotations进行ORM。该项目需要尽快启动,但规格不断变化,我担心系统将启动并收集实时数据,然后规格将再次改变,我将处于需要更改数据库架构。

如何设置以最大限度地减少这种影响?是否有任何开源项目可以处理这种迁移? Hibernate可以自动执行此操作(不擦除数据库)吗?

非常感谢您的建议。

4 个答案:

答案 0 :(得分:4)

这比功能问题更具功能性或组织性问题。没有工具会自动猜测如何将数据从一个模式迁移到另一个模式。您最好学习如何编写存储过程以迁移数据。

您可能需要禁用约束,创建临时表和列,复制大量数据,然后删除临时表和列,并重新启用约束以迁移数据。

一旦进入维护模式,修改架构的每个新功能也应该附带允许从生产中的当前架构和数据迁移到新架构的脚本。

答案 1 :(得分:1)

没有系统可以从原始模式和最终模式自动创建数据迁移脚本。没有足够的信息。

例如考虑一个新列。它应该只包含默认值吗?或者从其他字段/表格计算的值。

有一本关于重构数据库的好书:http://www.amazon.com/Refactoring-Databases-Evolutionary-Addison-Wesley-Signature/dp/0321774515/ref=sr_1_1?ie=UTF8&qid=1300140045&sr=8-1

但是这种东西几乎没有工具支持。

我认为你可以提前做的最好的事情是:

答案 2 :(得分:1)

Hibernate可以使用数据库中的数据更新数据库实体模型。这样做并在java中编写迁移代码,用于设置或删除数据关系。

这很有效,我们已多次完成。但当然,尝试遵循灵活的开发过程;首先确定你所知道的,然后重新评估要求 - scrum等。

答案 3 :(得分:0)

在您的情况下,我会推荐一个NoSQL数据库。我对这类数据库没有太多经验,因此我不推荐任何当前实现,因此您可能也想检查this