3

我是数据迁移领域的新手,正在研究如何将使用 OurApp 1.0 的客户数据迁移到具有与 OurApp 2.0 兼容的架构的新数据库中。我见过不少人推荐 Liquibase 用于数据库更改管理和数据库重构任务,在我的新手耳中,这听起来可能接近我们的需要。

然而,在阅读了 www.liquibase.org 上的资料后,我感觉 Liquibase 更多的是保持模式更新,而不是转换大量现有数据以便可以将其保留在新模式中。

假设我想将 Employee 表中名为 name 的列拆分为 firstname 和 lastname 列。Liquibase 将能够通过删除 name 列并添加 firstname 和 lastname 列来更改表。但是,我觉得 Liquibase 并不是真正为我构建的,它可以插入转换代码,将数据库中现有记录的名称字段解析为名字和姓氏,并将它们存储在各自的列中。

例如,假设我的桌子看起来像这样

id | name             | position
*********************************
12   Horace Slughorn    Professor
13   Albus Dumbledore   Headmaster

在我运行 Liquibase 之后,name 列将被 firstname 和 lastname 列替换,因此我的数据库架构是正确的。但我猜 Liquibase 不是一个框架,它允许我插入一些代码,将“Horace Slughorn”解析为“Horace”和“Slughorn”,并将这些值存储在该记录的名字和姓氏列中。

id | firstname   |  lastname  | position
*****************************************
12   Horace         Slughorn         Professor
13   Albus          Dumbledore       Headmaster

因此,Liquibase 使您的架构保持最新,但并非旨在帮助您转换现有数据以使其与新架构匹配。是对的吗?

4

2 回答 2

6

Liquibase 的目标是允许您将数据库从一个版本移动到新版本。它有许多内置的数据库“重构”,但它没有像您描述的那样拆分数据,因为如何分解现有字符串非常依赖于您的实现。

Liquibase 确实允许您在 1.9 中创建自定义更改类 ( http://www.liquibase.org/manual/custom_refactoring_class ),并在 2.0 ( http://liquibase.org/extensions )中提供更强大的自定义更改支持。它是基于 java 的,所以你的脚本需要用 java 编写,但你可以做任何你需要的数据读取和操作。

注意:如果你有很多数据,将记录读入java,然后将它们写回会很慢。在这种情况下,您可以使用 liquibase 的标签并创建基于数据库的 sql 语句和/或存储过程,以在数据库中进行拆分。Liquibase 仍将非常有助于跟踪拆分已完成且不应再次执行。

于 2010-09-03T05:14:47.067 回答
1

如果要编写自定义 SQL,也可以使用 dbdeploy。Liquibase 也支持编写自定义 SQL,有 DBMaintain 或 iBatis Migrator。

于 2010-09-03T05:42:31.173 回答