为什么以及何时使用Liquibase?


98

我试图在堆栈溢出时搜索此问题,但找不到与此相关的任何问题。
我是新来的Liquibase,想知道

  • 为什么Liquibase
  • 什么时候应该Liquibase在项目中使用?

我知道这是将所有数据库更改都保留在一个地方,但是可以通过SQL在某个存储库系统中创建一个简单文件并随时间进行更新来完成类似的操作。

Answers:


69

自我管理的模式创建文件和Liquibase(或其他模式迁移工具)之间的主要区别在于后者提供了模式更改日志。这是架构随时间变化的记录。它允许数据库设计人员指定架构中的更改并根据需要以编程方式升级或降级架构。

还有其他好处,例如:

  • 数据库供应商独立性(这是有问题的,但他们会尝试)
  • 自动化文件
  • 数据库架构差异

一种替代工具是飞行通道

您将在需要或需要自动管理模式更新而不会丢失数据时选择使用模式迁移工具。也就是说,您希望在将系统部署到长期存在的环境(例如客户站点或稳定的测试环境)之后,架构会发生变化。


1
但是,假设我们创建了一个文件,并在其中编写了第一个脚本,然后将其提交给git。现在,随着时间的推移,架构将被更新,我们可以返回任意时间间隔,也可以更改架构,不是吗?
Shakeel Shahzad 2015年

1
使用这种方法,您可以重新创建模式,但是不能降级/升级。区别在于数据丢失。
Synesso 2015年

1
但是另一部分,缺少何时使用?
Shakeel Shahzad 2015年

1
Synesso我还没有看到如何在生产数据库使用了一段时间之后如何自动降级生产数据库,并使用新添加的列对数据做出了决定。您不能立即删除它们。我也看不出为什么这比保留在源代码管理中的一系列版本化SQL脚本更好,这些脚本包括在开始时简单插入版本表并在末尾进行更新以跟踪所应用的内容。
Khorkrak

18

在修改架构时,我已经看到liquibase在开发人员中建立了纪律。您只是无法去覆盖其他开发人员的更改并执行。相反,您可以创建自己的变更集并将其添加到要执行的变更序列的末尾。这也清楚地说明了何时以及由谁带来了什么变化。

一种非常“版本化”的模式维护方法。

对于初学者来说,它的确给人以“不必要的工作”的印象。


4
哪一个是我(给我您确切提到的:P印象)+1为该关键决定
Ismail Sahin

没错,我们可以跟踪谁做了最新更改以及何时进行的所有更改。如果我们愿意将其回滚至特定点,那么liquibase会有所帮助
Anoop PS

7

当您在开发,质量保证,生产中有多个数据库实例并且您想要一个工具来自动跟踪更改历史记录并智能地应用更改(应用当前模式和最终模式的差异)时,诸如liquibase或flyway之类的工具将非常有用。


3

当您的想法是数据库是事后的想法时,我相信Liquibase很棒。这种理念已导致生产中的大多数不良数据库-其中大多数是不良的。数据库的设计应具有整个业务系统的完整视图,而不是由每个都在各自的孤岛中工作的应用程序开发人员所组成。后一种方法会导致变通方法,数据规范化,表之间的关系不佳,业务区域重复以及客户在部署后由于其所引起的问题而讨厌的总体混乱,维护成本高的系统。如果设计一个数据库来准确反映业务关系,那么它的寿命将是最零碎地设计的数据库的5倍,并且可以达到其目的的5倍。

Liquibase本身不是问题,但是它使应用程序开发人员可以设计数据库。那就是问题所在。


19
规格更改,添加了新功能,修复了错误。即使假设“数据库旨在准确反映业务关系”,这也是正常现象,并且由于您的业务和业务关系会随着时间而变化,因此您仍需要对数据库进行更改。Liquibase只是可以帮助您管理这些更改。而已。
史蒂文·拜克斯

以我的经验,很少有DBA和大量开发人员使用Liquibase-我认为@ bob-barry在大多数最终结果中都是存在的。使用诸如Liquibase之类的工具的DBA(或仅用于更改历史的普通git)将发现它很有用。
PhillipHolmes

进化数据库实践通常是敏捷的,它鼓励并允许同行评审。对于具有性能需求的数据库,DBA仍然与应用程序团队一起进行数据库更改。与Liquibase之类的工具相比,您的非规范化参数使重构更加容易。10年前,我为安装在20多个客户端上的产品工作,每个客户端都有自己的补丁程序和升级周期。经过2年的噩梦,并尝试手工编写这种工具,我们一听说它就跳入了Liquibase。而且我们的表有2亿条记录,这在当时也不是很大,但是需要DBA。
user6317694

3
我希望有一天在天堂见到你。当然听起来不错。
Bijan


0

作为我的团队的DevOps,我希望将所有SQL文件放在一个位置,即放在我的SCM(源代码管理)中

同样在CI / CD阶段,如果同时创建数据库模式,则可以节省大量时间和资源。您不必再由其他人为该客户端管理数据库。

Flyway,Liquibase,EF等ORM有助于实现这一目标。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.