鉴于我必须自己编写迁移脚本,Flyway提供什么价值?

时间:2016-05-03 15:15:14

标签: database database-migration flyway

在我的情况下,我使用生成SQL语句的工具来包含所有数据库init / create语句。 Flyway如何提供超出我的工具提供的价值?我为什么要关心编写手工编写的迁移脚本来使用Flyway?

2 个答案:

答案 0 :(得分:1)

上面的问题混合了两个应该分开的东西:数据库创建的概念与迁移的概念相结合。

数据库创建

给定一个完整的数据库和一个空数据库,您可以使用许多工具来生成重新创建不存在任何内容的完整数据库所需的脚本。在Flyway术语中,您只需创建一个基线。这根本不是迁移的概念。当然,给定一个V2.0数据库,您可以看到任何V1.0数据库,将其吹走,并安装V2.0数据库,但现在您已经丢失了数据。

<强>迁移

给定一个完整的数据库V2.0和一个V1.0旧数据库,并且您希望使V1.0数据库得到升级&#34;到V2.0。在数据库领域,这称为迁移,因为现有的1.0数据需要以在V2.0上运行的方式进行重新排列。现在你需要一个不仅创建/改变表的脚本,你需要一个脚本来做一些ETL(提取数据,转换数据以便能够加载到新的表结构中,将旧数据库改为新的表结构,然后将数据加载到数据库中)。取决于,这可能是也可能不是微不足道的。您构建脚本来执行此操作,Flyway将管理执行该脚本。

<强>迁飞

Flyway可实现以下目标:

  • 迁移脚本成为软件资产的一部分。对它们进行了版本化,以便可以在源代码管理中维护基线/迁移脚本,使迁移成为可重复的功能,而不是&#34;一个关闭&#34;脚本工作。
  • Flyway在其使用的每个数据库中维护一个元表,因此它知道已应用了哪些脚本
  • Flyway可以以完全自动化的方式应用迁移,以消除手动执行错误
  • Flyway支持创建迁移脚本作为开发的一部分(如测试驱动开发使单元测试创​​建成为开发的一个组成部分),以便以迁移脚本的形式捕获所有数据库开发(而不是像以下那样构建迁移脚本需要作为一部分&#34;迁移的一部分。
  • 使用Flyway通过单个命令在几秒钟内更新任何以前版本的应用程序时很常见。变得如此容易,从旧DB到新版本的迁移压力消失了,现在,DB的演变变得容易和平常。

要好好使用Flyway,需要更改工作流程:每次在开发人员数据库中进行更改时,请将更改放入迁移脚本中,以便针对世界上存在的所有旧数据库版本执行这些更改。这些脚本会被检入您的应用程序的源代码中,使迁移成为您软件资产的一等公民,就像任何其他功能一样。

答案 1 :(得分:0)

这在很大程度上取决于您的用例,

如果您打算编写一个简单的应用程序,其数据库结构将在应用程序的生命周期内保持静态,那么它将增加很少的价值。

如果期望项目在其生命周期内具有动态设计,并且架构上发生了变化,则Flyway提供了一种正式结构,其中可以表达和查看更改。如果您最终有一个更大的团队在项目上工作,这个正式的结构也会非常有用,因为Flyway可以成为框架的一部分来处理多模式CI工作。

一个关键的事情是你不必从Flyway开始,你可以在以后添加它,通常只有有限的重组,因为那个时间点的模式将成为你未来所有变化的基线添加。