我正在为一家公司开展项目,我需要将以前的数据迁移到新系统中。显然,这两种结构完全不同,我正在使用hibernate进行数据库操作,并且混淆了什么是迁移数据的最佳方法。我应该使用休眠,我应该编写存储过程,还是有其他选择?欢迎任何好主意。
答案 0 :(得分:7)
过去尝试过这两种方法,我可以肯定地说,这不是ORM设计的场景,也不是繁荣的场景。您最终必须构建两组不同的对象,并且很难获得大规模迁移所需的效率。我可以想到使用像hibernate这样的东西的唯一原因就是你要构建一个系统,它将永久地放在两个系统之间进行整合,但听起来这是相对短期的。
我对python脚本,一堆SQL和一些用于转换数据的python对象的结果非常满意。
答案 1 :(得分:2)
Hibernate对存储过程的效果不是很好 - 它不是'天生适合'。如果您的ORM已经映射出来,并且您已经设置了“原样”和“将来”对象,请使用普通的hibernate方法将数据写入新布局。
如果您被迫采用StoredProcedure方式,那么您可以决定是否想要吞下痛苦,并在存储过程中对转换进行编码 - 这样您的所有迁移脚本都将保持在一起。
就像其他海报所说的那样,像Python这样的脚本语言可以很好地为你服务 - 它也适合我。
答案 2 :(得分:2)
我尝试通过各种版本更改代码和数据表示来管理数据迁移。每次,我最终编写特定的sql来查询旧状态中的对象,并填充新列。如果有一种简单的方法来管理数据迁移,同时将所有内容都视为一个对象,我还没有想到它,到目前为止,新列总是有简单的解释,我可以在sql中计算。
其中一些已经非常简单,代码已经在java中结束,而其他更改已经足够复杂,我想要多个sql语句,所以我最终将它们嵌入shell和python中(两者都是为了便携性)脚本。脚本为here和the java code,方法名称为updateDB2008_4()。
答案 3 :(得分:0)
虽然我不确定“最佳”,但如果我在你的位置,我宁愿使用Hibernate或类似的ORM。原因是您有一个在两个数据库之间使用的对象层次结构。如果模式非常相似,那么简单的SQL脚本可能会更容易。这实际上取决于你的情况和具体情况。
编辑:我真的需要一些早晨的咖啡因...
我试图注意的是,跟在我后面的两个人注意到了。如果定义了模式,你已经拥有对象或者使用逆向工程工具,那么休眠是一种简单的方法。但是,如果它是一次性的话,脚本肯定是更好的方法。
答案 4 :(得分:0)
就我个人而言,我可能会使用像SSIS这样的ETL工具(如果你要从SQL Server到SQL Server),大量数据的移动就是ETl工具的设计和优化。