为什么以及何时使用 Liquibase?

Why and when Liquibase?

我在堆栈溢出上搜索了这个答案,但我找不到任何关于这个的问题。 我是 Liquibase 的新手,想学习

我知道这是为了将所有数据库更改保存在一个地方,但类似的可以通过在某些存储库系统中创建一个简单的SQL文件并保存随着时间更新它。

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

还有其他好处,例如:

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

另一个替代工具是 flyway

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

我看到 liquibase 在修改模式时在开发人员中建立了纪律。您只是不能去覆盖其他开发人员的更改并执行。相反,您创建自己的变更集并将其添加到要执行的变更序列的末尾。这也清楚地说明了什么变化是什么时候发生的,是谁带来的。

一种非常"versioned" 的模式维护方法。

不过对于初学者来说,它确实给人一种 "unnecessary work" 的印象。

我相信 Liquibase 很棒,因为您的理念是数据库是事后才想到的。这种理念导致了生产中的大多数不良数据库——而且大多数都是不良数据库。数据库的设计应该考虑到整个业务系统的完整视图,而不是由每个在自己的孤岛中工作的应用程序开发人员拼凑而成。后一种方法会导致变通、非规范化数据、表之间的不良关系、业务领域的重复以及整体混乱、高维护成本的系统,由于它引起的问题,客户在部署后不久就会讨厌这些系统。如果数据库旨在准确反映业务关系,那么它的生命周期将是 5 倍,并且比以零散方式设计的数据库要好 5 倍,不幸的是,大多数都是这样。

Liquibase 本身不是问题,但它支持应用程序开发人员设计数据库的实践。这就是问题所在。

当你在 dev、qa、production 中有多个数据库实例并且你想要一个工具来自动跟踪更改历史并智能地应用更改(应用当前模式和最终模式的差异)时,liquibase 或flyway 会很有用。

我想如果你阅读下面的文章,就可以回答为什么 liquibase http://shengwangi.blogspot.com/2016/04/liquibase-helloworld-example.html

如果你仔细阅读它,在简单的 mvn 或 CLI 命令的帮助下从较高版本降级到较低版本的能力非常有用,如果你通过提交 sql 文件到 GIT 因为那样你必须手动 运行 这些脚本而且你没有像这样的更改集:- 谁做了更改作者等

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

同样在CI/CD 阶段,如果DB Schema 与它一起创建,它会节省大量时间和资源。您不必让其他人为该客户管理您的数据库。

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

观察了 liquibase 在几个月内被合并到一个大中型项目后,我提出了开发人员必须为 Liquibase 服务而不是相反的观察结果。我了解用例,但在我们的开发过程中没有看到任何质的改进。我们的现实是,Liquibase 让我们的开发团队陷入了构建错误的泥潭。小的变化会引起大麻烦。我不推荐使用它。

我认为在这个主题中添加以下概念很好 进化数据库设计

Over the last decade we've developed and refined a number of techniques that allow a database design to evolve as an application develops. This is a very important capability for agile methodologies. The techniques rely on applying continuous integration and automated refactoring to database development, together with a close collaboration between DBAs and application developers. The techniques work in both pre-production and released systems, in green field projects as well as legacy systems.

这里是Martin Fowler的《进化论》的参考https://martinfowler.com/articles/evodb.html

这是创建数据库的不同方法 这就是 Liquibase 和 Flyway 的原因。