该工具所用到的脚本既可以用纯SQL(支持多种SQL语法),又能够用Java(主要用于更复杂的转换)来进行编写。同时,它既带有命令行客户端,又提供支持Maven和Gradle的插件。此外,它的Java API,还适用于<em>Android</em>系统。Flywa
2021-05-17 13:00:48
眾所周知,對於那些使用著關係型資料庫引擎的各類應用程式而言,資料庫遷移工具的選用是至關重要的。它們不但能夠讓各種複雜且重複的過程更加自動化,而且可以讓我們更加輕鬆且準確地完成各種大型的遷移任務。
下面,我將對兩種最常見的開源遷移工具--Flyway和Liquibase,進行介紹與比較,以方便您在實際項目中做出合理的選擇。
Flyway的介紹
Flyway是由Redgate公司帶來的一款開源式的資料庫遷移工具。該工具注重規則上的簡約性,而非繁瑣的配置。
目前,它能夠支援諸如Postgres、Oracle、SQL Server、DB2、H2、以及MariaDB等大多數主流資料庫引擎。同時,Flyway還可以支援諸如:Amazon RDS、Google Cloud SQL、以及Heroku等基於雲端業務的資料庫服務。
該工具所用到的指令碼既可以用純SQL(支援多種SQL語法),又能夠用Java(主要用於更復雜的轉換)來進行編寫。同時,它既帶有命令列客戶端,又提供支援Maven和Gradle的插件。此外,它的Java API,還適用於Android系統。
Flyway的Evolve非常適用於習慣了使用.NET和C#的使用者。因此,如果您對其有興趣的話,請檢視文末列出的它在GitHub上的連結頁面。
Liquibase的介紹
作為於2006年推出的、可用於資料庫遷移的開源類工具,Liquibase是基於變更日誌(changelog)和變更集(changesets)檔案的相關概念實現的。這些檔案可以由SQL、XML、YAML、以及JSON編寫而成。它們通過儲存那些針對資料庫結構的更改,以便將其應用到任何其他資料庫的例項上。
目前,Liquibase支援的資料庫種類包括:Postgres、Oracle、DB2、H2、MariaDB、SQL Server、以及SQLite等。同時,它還支援諸如:Azure SQL、Amazon RDS、以及Amazon Aurora等許多基於雲的資料庫。
您可以使用諸如Maven、Gradle、甚至是Ant之類的構建工具,從Shell中運行Liquibase的遷移指令碼。此外,您可以一次生成純粹的SQL查詢,以便您的DBA、Ops、DevOps團隊、或負責資料庫的任何人,可以進一步執行此類查詢。
有了對於上述兩種工具的基本概念,下面讓我們來討論一下它們之間的相同點和不同之處。
Flyway和Liquibase之間的相似之處
在某種程度上,兩者都屬於開源的,並且能夠免費提供各種功能。當然它們也都具有提供更多高階功能的付費版本。兩者都可以使用簡單、傳統的SQL,來編寫出遷移指令碼。兩者都能完美地「面向Java」,並且都內建了針對Maven和Gradle之類基本構建工具的支援,以及可以與諸如:Spring Boot等最常見的Java框架相整合。兩者都可以從命令列處運行簡單的shell指令碼。雖然兩者支援的資料庫版本和驅動程式,可能存在著一些細微的差異,但是從整體而言,它們能夠支援的資料庫品種大致相似。在處理資料庫更改時,兩者用到了相同的方法,即:基於遷移的資料庫交付。兩種工具都實現了由Martin Fowler提出和詮釋的資料庫重構(Evolutionary database) 的概念(詳見本末連結)。
Flyway和Liquibase之間的不同之處
下面,讓我們從橫跨多個數據庫引擎來運行相同指令碼的角度,來討論Flyway和Liquibase的不同之處。
首先,我們會碰到的一個實際問題是:如何針對例項生產差異(diff)。您會發現,我們可以直接使用Liquibase來生成相關差異;卻無法使用Flyway來實現,而且即便是其付費版本也無法達到。這便是我們往往在項目中選擇Liquibase,而非Flyway的主要原因之一。
其次,我們來看看Java客戶端。Flyway擁有原生的Java API,它可以幫助我們進行諸如BLOB和CLOB的更改、以及高階批量資料的修改等較為複雜的遷移。這些功能在某些受限制的遷移場景中,是非常實用的。因此這反過來成為了使用者選用Flyway,而非Liquibase的主要原因之一。
接著,我們來討論兩種工具是如何處理回滾的。我們設定Liquibase的changelog檔案相對比較容易。實際上,changelog的XML結構甚至已經為回滾程式碼定義好了一個特殊的欄位。而Flyway僅在其付費版本中提供了回滾處理的服務。因此,如果您不介意使用付費工具的話,可以考慮使用Flyway的相關功能。當然,據說Liquibase的付費版本,對於不同類型的回滾,具有更完備的支援。您如果有時間和精力的話,可以去試用一下。
最後,讓我們來看看更改順序的管理。對此,兩種工具有著完全不同的處理方法。Flyway採取的是線性資料庫版本控制的概念。這意味著,應用更改的順序,取決於遷移指令碼的名稱順序。實際上,Flyway的遷移指令碼有著一個完整的命名規則。如果您希望它能夠按照預期執行的話,就必須遵循該規則。而在Liquibase中,資料庫例項的更改順序,基於整個changelog檔案中的特定更改位置。也就是說,如果您將更改按照某種特定的順序放在changelog中的話,那麼對於資料庫的更改也將以完全相同的順序執行並完成。
小結
綜上所述,我們對Flyway和Liquibase兩種資料庫遷移工具進行了綜合比較。總的說來,Flyway的優點在於,其遷移指令碼更具有可讀性。如果您非常熟悉SQL的話,那麼它用起來更加便捷、更加順手。當然,它的缺點是無法實現跨平臺的使用。而Liquibase正好相反,其優點在於可以跨平臺被使用,其不足之處在於,由於它功能強大,因此我們可能需要花費一定的精力,去維護它的遷移指令碼。
相關文章
该工具所用到的脚本既可以用纯SQL(支持多种SQL语法),又能够用Java(主要用于更复杂的转换)来进行编写。同时,它既带有命令行客户端,又提供支持Maven和Gradle的插件。此外,它的Java API,还适用于<em>Android</em>系统。Flywa
2021-05-17 13:00:48
配合耳机使用的“Bose音乐” APP 无论是 <em>Android</em> 还是 iOS 党,都可以在手机中提前设置好自定义快捷键,设置好后,无需拿起手机,用手指即可完成:调节消噪等级、接听/挂断电话、播放/暂停音乐和呼叫语音助手等
2021-05-17 13:00:43
微软将在今年发布代号为“ <em>Windows 10</em> version 21H2”的年度首个重大更新。除了新的“开始”菜单之外,还对现有功能(例如Windows设置应用程序)进行许多改进。以下是有望在今年推出的新的功能变化。HDR对色彩管
2021-05-17 13:00:19
https://answers。microsoft。com/zh-hans/<em>windows</em>/forum/all/%E6%B0%B8%E4%B9%85%E5%85%B3%E9%97%ADwin<em>10</em>%E8%87%AA/29ebb211-8189-4c96-abab-31a851cc75a9(句号改成点)来自csdn博客教程:Win<em>10</
2021-05-17 13:00:06
今年3月份,统信UOS推出首款自研邮件客户端,可以在全国产<em>CPU</em>和整机中使用。统信UOS的易用性和实用性再次提高。 作为国内领先的操作系统厂家,统信软件成立于2019年,统信软件推出的统信UOS已经跨过“可用”的
2021-05-17 12:31:53
对于我们日常用来办公娱乐的主机来说,<em>CPU</em>的散热表现对于性能的发挥确实很重要,很多用了一年半载的主机,都容易积灰,而灰尘则会对散热造成不小的负面影响。此外,作为散热器与<em>CPU</em>之间的关键介质,导热硅脂也
2021-05-17 12:31:46