2014-09-11 32 views
2

我將在某些併發環境(集羣或多線程初始化)中使用liquibase作爲應用程序啓動插件。並行環境中是否有任何保證正確的數據庫更新,這是由liquibase庫支持的,或者我必須手動執行? 謝謝!併發環境中的Liquibase

回答

4

Liquibase 確實使用RDBMS的ACID事務特性實現排它鎖。這可以防止多個Liquibase實例同時執行模式遷移。它通過對由Liquibase添加到您的模式的DATABASECHANGELOGLOCK表執行事務更新來完成。

但是,這種機制並不能防止Liquibase直接執行的操作可能導致的其他潛在併發問題。考慮集羣中的一個節點正在執行模式遷移並且其他節點試圖用該模式執行正常業務邏輯的情況。集羣中的其他節點看到處於穩定狀態的模式A,隨後進行一定量的中間變化,然後最終處於穩定狀態B。應用程序必須設計爲處理這種轉換,否則在遷移發生時需要停機。

同樣,如果需要這樣的環境,「正確」模式版本的概念並不一致,如果需要這樣的環境,則應用程序有責任處理混合使用較舊和較新客戶端(例如滾動升級期間) 。

+0

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