在模块化应用程序中使用Flyway

时间:2017-01-21 16:11:56

标签: flyway

我们有一个模块化应用程序,每个应用程序创建自己的表(通常是一个两个)并管理数据。

我们在主应用程序中使用Flyway,但我们的模块也需要它。但是,如果我们将补丁添加到主应用程序,如果未安装相应的模块,ALTER TABLE查询将无法用于某些部署。

解决此问题的一种方法是使用多个Flyway操作执行模式演变,每个模块都有自己的Flyway并自行管理。然而,由于Flyway创建了用于管理状态的表,因此我们现在有大约20个模块,所以我们得到了太多的表。

解决这个问题的优雅方法是什么?

1 个答案:

答案 0 :(得分:0)

我想说,它支持的软件单元管理的迁移是最干净的,并且胜过“太多表”。就这些表的整洁组织而言,您可以使用模式(如果您使用RDBMS支持这些表)来使用它们,并且Flyway允许您命名每个迁移受管应用程序使用的表。

这里的关键是“模块”。根据您的描述,听起来并非所有应用程序都由相同的模块组成。我会问你,如果我们努力使我们的模块专用于创建解耦/可重用软件 - 为什么这些模块的数据库模式应该被区别对待?

为了解决你对“太多桌子”的担忧,让我们尝试揭穿它的成本。

  1. 音量。您的RDBMS可以处理数千个,没有任何成本。
  2. 运算。 Flyway在这里管理所有的管理,它们对你来说实际上是不透明的。
  3. 性能。它们是部署问题,而不是运行时责任。
  4. 组织。使用上述方法隐藏它们/命名它们。
  5. 我们的自然冲动是聚合相关的事情,但并不总能带来最好的结果,所以我们必须务实。在这种情况下,良好/灵活的设计胜过聚合。