5

我正在为一家公司开展一个项目,我需要将其以前的数据迁移到一个新系统中。显然这两种结构是完全不同的,我正在使用休眠进行数据库操作,并且对迁移数据的最佳方法感到困惑。我应该使用休眠,我应该编写存储过程,还是有其他选择?欢迎任何聪明的想法。

4

5 回答 5

7

在过去尝试过这两种方法后,我可以肯定地说这不是 ORM 设计的场景,也不是它蓬勃发展的场景。您最终不得不构建两组不同的对象,并且很难获得大规模迁移所需的效率。我能想到的使用 hibernate 之类的东西的唯一原因是,如果您要构建一个系统,该系统将永久位于两个系统之间以集成它们,但这听起来是相对短期的。

我对 Python 脚本、一堆 SQL 和一些用于转换数据的 Python 对象的结果非常满意。

于 2009-07-24T17:04:37.873 回答
2

Hibernate 不能很好地处理存储过程——它不是“天作之合”。如果您的 ORM 已经被映射出来,并且您已经设置了“原样”和“未来”对象,请使用普通的休眠方法将数据写入新布局。

如果您被迫采用 StoredProcedure 方式,那么您可以决定是否要忍受痛苦,并在存储过程中编码您的转换 - 这样您的所有迁移脚本将保持在一起。

就像另一张海报所说的那样,像 Python 这样的脚本语言在这里可以很好地为您服务——它对我也很有效。

于 2009-07-24T17:06:49.240 回答
2

当我通过各种版本更改代码和数据表示时,我尝试管理数据迁移。每次,我最终都编写了特定的 sql 来查询旧状态的对象,并填充新列。如果有一种直接的方法来管理数据迁移,同时将所有内容都视为对象,我还没有想到,到目前为止,新列总是有简单的解释,我可以在 sql 中计算。

其中一些已经足够简单以至于代码最终在 java 中结束,而其他更改已经足够复杂以至于我想要多个 sql 语句,因此我最终将它们嵌入到 shell 和 python(都是为了可移植性)脚本中。脚本在这里Java 代码的方法名称如 updateDB2008_4()。

于 2009-07-24T20:22:38.083 回答
0

就我个人而言,我可能会为此使用像 SSIS 之类的 ETL 工具(如果您从 SQL Server 前往或前往 SQL Server),大量数据的移动是 ETl 工具的设计和优化目的。

于 2009-07-24T17:46:19.893 回答
0

虽然我不确定“最佳”,但如果我处于您的位置,我更愿意使用 Hibernate 或类似的 ORM。原因是你有一个对象层次结构可以在两个数据库之间使用。如果模式非常相似,那么简单的 SQL 脚本可能会更容易。这实际上取决于您的情况以及具体情况。

编辑:我真的需要一些早晨的咖啡因......

在我之后发帖的两个人注意到了我试图记录的内容。如果模式已定义,您已经拥有对象或擅长逆向工程工具,那么休眠是一种简单的方法。但是,如果它是一次性的,那么脚本绝对是更好的选择。

于 2009-07-24T16:59:00.973 回答