2014-09-11 39 views
2

我将在某些并发环境(集群或多线程初始化)中使用liquibase作为应用程序启动插件。并行环境中是否有任何保证正确的数据库更新,这是由liquibase库支持的,或者我必须手动执行? 谢谢!并发环境中的Liquibase

回答

4

Liquibase 确实使用RDBMS的ACID事务特性实现排它锁。这可以防止多个Liquibase实例同时执行模式迁移。它通过对由Liquibase添加到您的模式的DATABASECHANGELOGLOCK表执行事务更新来完成。

但是,这种机制并不能防止Liquibase直接执行的操作可能导致的其他潜在并发问题。考虑集群中的一个节点正在执行模式迁移并且其他节点试图用该模式执行正常业务逻辑的情况。集群中的其他节点看到处于稳定状态的模式A,随后进行一定量的中间变化,然后最终处于稳定状态B。应用程序必须设计为处理这种转换,否则在迁移发生时需要停机。

同样,如果需要这样的环境,“正确”模式版本的概念并不一致,如果需要这样的环境,则应用程序有责任处理混合使用较旧和较新客户端(例如滚动升级期间) 。

+0

谢谢,我明白了。 – hellraiser 2014-09-12 11:58:02