優(yōu)秀數(shù)據(jù)庫模式遷移工具的發(fā)展歷程
譯文譯者 | 李睿
審校 | 重樓
數(shù)據(jù)庫模式遷移可能是應用程序開發(fā)中風險最大的領域——因為這是一個困難的、有風險的和痛苦的過程。數(shù)據(jù)庫模式遷移工具的存在是為了減輕這種痛苦,并且已經(jīng)取得了長足的進步:從基本的CLI工具到GUI工具,從簡單的SQL GUI客戶端到一體化協(xié)作數(shù)據(jù)庫平臺。
命令行客戶端(CLI) - MySQL/PSQL
MySQL和PSQL分別是MySQL和PostgreSQL的本地CLI,可以從命令行直接向MySQL或PostgreSQL服務器發(fā)送命令或查詢。

盡管CLI界面很簡單,但有時它會讓初學者望而生畏。然而,根據(jù)Timescale公司的2022年PostgreSQL狀態(tài)調(diào)查結(jié)果,PSQL是最受歡迎的與PostgreSQL交互的工具,超過了pgAdmin和DBeaver等GUI工具。

GUI
1.PHPMyAdmin和PGAdmin
PHPMyAdmin和PGAdmin是經(jīng)典的SQL客戶端。PHPMyAdmin已經(jīng)是一個管理MySQL和MySQL兼容數(shù)據(jù)庫(例如MariaDB)的工具,而PGAdmin是PostgreSQL的對應工具,現(xiàn)在已經(jīng)發(fā)展到PGAdmin 4。與CLI工具相比,PHPMyAdmin和PGAdmin提供了一個用于運行和執(zhí)行SQL查詢的用戶界面(UI),使它們更加友好。

2.DBeaver
DBeaver的最初版本發(fā)布于2010年,這款開源SQL客戶端支持各種數(shù)據(jù)庫(SQL、NoSQL和云數(shù)據(jù)庫),并通過整合OpenAI公司的GPT功能跟上人工智能領域的最新趨勢,允許將自然語言轉(zhuǎn)換為SQL。

3.Navicat
Navicat于2001年首次發(fā)布。它當時只支持MySQL,但后來增加了更多的數(shù)據(jù)庫。雖然Navicat的UI看起來有點過時,但它具有完整的功能,并且在操作數(shù)據(jù)庫時提供了流暢的整體體驗。

基于GUI的SQL客戶端是對基于CLI的SQL客戶端的良好補充。從根本上講,它們的工作方式是一樣的。用戶可以快速方便連接到數(shù)據(jù)庫并執(zhí)行一些SQL。另一方面,在數(shù)據(jù)庫更改管理和數(shù)據(jù)安全方面缺乏控制。本文將以Navicat為例進行詳細介紹。
Gitops /數(shù)據(jù)庫即代碼
為了更好地管理和控制數(shù)據(jù)庫模式更改,一些工具在數(shù)據(jù)庫更改中引入了代碼更改過程,稱為數(shù)據(jù)庫即代碼(Database-as-Code)。
1.Liquibase
Liquibase創(chuàng)建于2006年,是一個用于跟蹤、管理和應用數(shù)據(jù)庫更改的開源庫。一個有趣的事實是:Liquibase于2012年被一家名為Datical的公司收購,并更名為Datica,但隨后于2020年更名為Liquibase(這是明智之舉,見過有人在論壇上提到過Datica嗎?)。

Liquibase的主要產(chǎn)品是基于Java的CLI,它允許開發(fā)團隊通過CLI將數(shù)據(jù)庫模式遷移集成到他們的CI/CD工作流中。
2.Flyway
Flyway與Liquibase在很多方面有相似之處:它們都是成立時間較長的數(shù)據(jù)庫,擁有客戶群,而且都是開源項目。它的核心產(chǎn)品是CLI和Java庫。
Flyway背后的商業(yè)實體是Redgate(于2019年被收購)。它有3個版本:社區(qū)、團隊和企業(yè)??梢钥闯?,他們在開源和商業(yè)產(chǎn)品之間劃出了一條清晰的界限:Flyway的網(wǎng)站總體上感覺更隨意,而Redgate的方式更專業(yè)。

Liquibase和Flyway并駕齊驅(qū)。兩者的主要區(qū)別在于各自的定位:Liquibase更面向企業(yè),而Flyway更面向開發(fā)者。
3.Sqitch
Sqitch是一個純開源項目,自從2012年以來一直沒有商業(yè)產(chǎn)品上市。它是純粹的CLI,沒有UI。

與基于Java的Liquibase和Flyway不同,Sqitch是使用Perl開發(fā)的。此外,Sqitch在如何管理數(shù)據(jù)庫模式更改方面有自己的理念:Liquibase和Flyway都使用文件命名約定來安排模式遷移(約定高于配置)。

而Sqitch采用了一種顯式的方法,允許用戶在Sqitch計劃中指定順序。

4.Atlas
Atlas是一個由Ariga構建的開源工具,并推廣了“數(shù)據(jù)庫模式即代碼”這一術語。
可以看出,他們從HashiCorp那里獲得了很多靈感,并在首次出現(xiàn)在Hacker News上時將自己稱為“數(shù)據(jù)庫遷移的Terraform”。他們還發(fā)明了基于HCL (HashiCorp配置語言)的Atlas HCL。
Atlas使用現(xiàn)代編程語言Go(與使用Java的Liquibase/Fireway不同),并以CLI為中心(類似于Liquibase.Fireay/Sqitch),但它也有一個輕量級的UI。Atlas Cloud是一個開源版本的商業(yè)產(chǎn)品。
一體化:GUI + Gitops / Database-As-Code + Collaboration
1.Prisma
像Prisma這樣的ORM針對的是代碼如何與數(shù)據(jù)交互的領域。雖然這更多的是一個后端主題,但Prisma是一個具有前端根的ORM。前端工程師可能不是最精通SQL的。為了降低管理數(shù)據(jù)庫模式的障礙,Prisma發(fā)明了它的DSL來定義數(shù)據(jù)模型。

DSL是基于狀態(tài)的(聲明性的),它描述了數(shù)據(jù)庫模式的最終狀態(tài),而不是增量變化,這與Liquibase/Flyway/Sqitch不同。通過這種方式,Prisma可以在整個應用程序開發(fā)周期中提供更全面的數(shù)據(jù)庫管理視圖。
Prisma ORM是開源的,可以免費使用,他們的數(shù)據(jù)平臺提供了一個基于云的協(xié)作平臺,具有一些高級功能(很明顯,他們的目標不僅僅是一個ORM和模式遷移工具)。
2.Bytebase
Bytebase是一個開源數(shù)據(jù)庫DevOps工具,涵蓋了數(shù)據(jù)庫管理場景,從變更、查詢、安全性到基于Web的可視化協(xié)作工作區(qū)的治理。

Bytebase提供了一個基于Web的UI,開發(fā)人員和DBA可以通過同一個界面協(xié)作處理數(shù)據(jù)庫更改。
3.數(shù)據(jù)庫即代碼(Database-As-Code)
為了更好地適應開發(fā)人員的工作習慣,Bytebase已經(jīng)將功能集成到代碼庫中,例如itLab和GitHub。通過啟用GitOps工作流,開發(fā)人員可以將數(shù)據(jù)庫更改文件提交到熟悉的代碼存儲庫,一旦審查完成并提交到repo, Bytebase將自動觸發(fā)部署。無需在多個工具之間切換。
4.團隊協(xié)作與管理
用戶可以為兩個級別的成員定義不同的角色:工作區(qū)和項目。可以為團隊成員分配不同的角色,以便他們對不同的項目具有不同的權限;或者為每個項目配置審批工作流,例如指定負責此特定項目的特定DBA或QA。
Prisma和Bytebase的區(qū)別在于目標受眾。Prisma主要針對前端/全棧開發(fā)人員,而Bytebase更專注于后端和DBA。這兩款產(chǎn)品都提供協(xié)作功能,Prisma專注于單個項目中開發(fā)人員之間的協(xié)作,而Bytebase針對整個工程組織,即開發(fā)人員和DBA/平臺工程/運營團隊。
結(jié)語

如果用戶以個人身份操作數(shù)據(jù)庫,那么傳統(tǒng)的CLI或GUI SQL客戶端(如Navicat)就足夠了。如果更喜歡與代碼庫集成,有像Liquebase和Flyway這樣的解決方案。然而,對于類似Jira或GitLab的GUI和項目協(xié)作功能,可以選擇Prisma和Bytebase。Bytebase是唯一一個提供組織范圍管理功能的工具,除了使數(shù)據(jù)庫更改更高效和更安全之外,還可以確保數(shù)據(jù)安全和治理。
原文標題:Evolution of Top Database Schema Change Tools,作者:Mila Wu



























