一般来说,数据库迁移系统会使用以下方法或变体
。 往数据库里增加一张表,用于存放数据库的版本。
。 把数据库变更的命令统一存放到带版本信息的变更集中。在Liquibase里,这些变更被保存为XML文件。Flyway实现方式有点儿不太一样,这些变更集被保存为SQL文件。万一过于复杂,也可以是单独的Java类。
。 Liquibase需要升级一个数据库时,它会查看元数据表并决定这些变更集的顺序以将数据库升级成最新版本。
如前文所述,许多数据库管理系统都如此运转。它们最主要的不同一般是变更集的保存方式,以及如何决定运行哪一个变更集。它们可能会像Liquibase那样保存为XML文件,也可能像Flyway那样保存为SQL文件。原生系统更经常使用后者,它还有一些优点。Clojure的生态系统也至少有一个类似的数据库迁移系统,称为Migratus。
滚动升级
在迁移数据库时另一个需要考虑的事是如何配合滚动升级。这种类型的部署非常常见,尤其是在你不想让最终用户面临停机,或者只允许极低停机时间时。
这里有一个滚动升级企业客户数据库的例子。
一开始时,我们有一个运行中的系统,一个数据库和两台服务器。在两台服务器前面有一个负载均衡设备。
我们正准备推出一个数据库结构的变更,它会同时影响到服务器。我们准备把数据库中的客户名字段分成姓和名两个单独的字段。
想了解更多IT资讯,请访问中培伟业官网:中培伟业