一般來說,數(shù)據(jù)庫遷移系統(tǒng)會使用以下方法或變體
。 往數(shù)據(jù)庫里增加一張表,用于存放數(shù)據(jù)庫的版本。
。 把數(shù)據(jù)庫變更的命令統(tǒng)一存放到帶版本信息的變更集中。在Liquibase里,這些變更被保存為XML文件。Flyway實現(xiàn)方式有點兒不太一樣,這些變更集被保存為SQL文件。萬一過于復(fù)雜,也可以是單獨的Java類。
。 Liquibase需要升級一個數(shù)據(jù)庫時,它會查看元數(shù)據(jù)表并決定這些變更集的順序以將數(shù)據(jù)庫升級成最新版本。
如前文所述,許多數(shù)據(jù)庫管理系統(tǒng)都如此運轉(zhuǎn)。它們最主要的不同一般是變更集的保存方式,以及如何決定運行哪一個變更集。它們可能會像Liquibase那樣保存為XML文件,也可能像Flyway那樣保存為SQL文件。原生系統(tǒng)更經(jīng)常使用后者,它還有一些優(yōu)點。Clojure的生態(tài)系統(tǒng)也至少有一個類似的數(shù)據(jù)庫遷移系統(tǒng),稱為Migratus。
滾動升級
在遷移數(shù)據(jù)庫時另一個需要考慮的事是如何配合滾動升級。這種類型的部署非常常見,尤其是在你不想讓最終用戶面臨停機,或者只允許極低停機時間時。
這里有一個滾動升級企業(yè)客戶數(shù)據(jù)庫的例子。
一開始時,我們有一個運行中的系統(tǒng),一個數(shù)據(jù)庫和兩臺服務(wù)器。在兩臺服務(wù)器前面有一個負載均衡設(shè)備。
我們正準備推出一個數(shù)據(jù)庫結(jié)構(gòu)的變更,它會同時影響到服務(wù)器。我們準備把數(shù)據(jù)庫中的客戶名字段分成姓和名兩個單獨的字段。
想了解更多IT資訊,請訪問中培偉業(yè)官網(wǎng):中培偉業(yè)