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