我们还没有使用 Flyway,但我现在正在研究它,希望在未来几个月内实施它。
我们希望应用程序在启动时运行迁移检查。然而,我们有两个不同的应用程序在同一个数据库中协同工作,并且每个应用程序都有多个实例。我的希望是第一个通过大门的人会在历史表中添加一个Pending记录,而其他人看到这一点也不会尝试升级。
这是一个现实的期望吗?
我们可以依靠这个机制吗?
其他人如何处理这个问题?
谢谢。
这取决于数据库。那些支持通过 JDBC 驱动程序显式获取和释放表锁的人应该在迁移开始时锁定历史表,从而阻止任何其他 Flyway 实例继续进行,并在结束时释放锁。我们知道有几个数据库(CockroachDB 就是其中之一)不允许这样做,对于它们来说,数据库中的待处理行会被插入然后删除。
根据 Flyway 的官方faq,它们完全支持集群(多节点应用程序实例)。
是的! Flyway 使用数据库的锁定技术来协调多个节点。这可以确保即使应用程序的多个实例同时尝试迁移数据库,它仍然可以工作。完全支持集群配置。
flyway 下载页面声称“并行多个节点安全”是其功能之一。我读过他们使用锁来实现这一点。