優(yōu)秀數(shù)據(jù)庫模式遷移工具的發(fā)展歷程
譯文譯者 | 李睿
審校 | 重樓
數(shù)據(jù)庫模式遷移可能是應(yīng)用程序開發(fā)中風(fēng)險(xiǎn)最大的領(lǐng)域——因?yàn)檫@是一個(gè)困難的、有風(fēng)險(xiǎn)的和痛苦的過程。數(shù)據(jù)庫模式遷移工具的存在是為了減輕這種痛苦,并且已經(jīng)取得了長足的進(jìn)步:從基本的CLI工具到GUI工具,從簡(jiǎn)單的SQL GUI客戶端到一體化協(xié)作數(shù)據(jù)庫平臺(tái)。
命令行客戶端(CLI) - MySQL/PSQL
MySQL和PSQL分別是MySQL和PostgreSQL的本地CLI,可以從命令行直接向MySQL或PostgreSQL服務(wù)器發(fā)送命令或查詢。
盡管CLI界面很簡(jiǎn)單,但有時(shí)它會(huì)讓初學(xué)者望而生畏。然而,根據(jù)Timescale公司的2022年P(guān)ostgreSQL狀態(tài)調(diào)查結(jié)果,PSQL是最受歡迎的與PostgreSQL交互的工具,超過了pgAdmin和DBeaver等GUI工具。
GUI
1.PHPMyAdmin和PGAdmin
PHPMyAdmin和PGAdmin是經(jīng)典的SQL客戶端。PHPMyAdmin已經(jīng)是一個(gè)管理MySQL和MySQL兼容數(shù)據(jù)庫(例如MariaDB)的工具,而PGAdmin是PostgreSQL的對(duì)應(yīng)工具,現(xiàn)在已經(jīng)發(fā)展到PGAdmin 4。與CLI工具相比,PHPMyAdmin和PGAdmin提供了一個(gè)用于運(yùn)行和執(zhí)行SQL查詢的用戶界面(UI),使它們更加友好。
2.DBeaver
DBeaver的最初版本發(fā)布于2010年,這款開源SQL客戶端支持各種數(shù)據(jù)庫(SQL、NoSQL和云數(shù)據(jù)庫),并通過整合OpenAI公司的GPT功能跟上人工智能領(lǐng)域的最新趨勢(shì),允許將自然語言轉(zhuǎn)換為SQL。
3.Navicat
Navicat于2001年首次發(fā)布。它當(dāng)時(shí)只支持MySQL,但后來增加了更多的數(shù)據(jù)庫。雖然Navicat的UI看起來有點(diǎn)過時(shí),但它具有完整的功能,并且在操作數(shù)據(jù)庫時(shí)提供了流暢的整體體驗(yàn)。
基于GUI的SQL客戶端是對(duì)基于CLI的SQL客戶端的良好補(bǔ)充。從根本上講,它們的工作方式是一樣的。用戶可以快速方便連接到數(shù)據(jù)庫并執(zhí)行一些SQL。另一方面,在數(shù)據(jù)庫更改管理和數(shù)據(jù)安全方面缺乏控制。本文將以Navicat為例進(jìn)行詳細(xì)介紹。
Gitops /數(shù)據(jù)庫即代碼
為了更好地管理和控制數(shù)據(jù)庫模式更改,一些工具在數(shù)據(jù)庫更改中引入了代碼更改過程,稱為數(shù)據(jù)庫即代碼(Database-as-Code)。
1.Liquibase
Liquibase創(chuàng)建于2006年,是一個(gè)用于跟蹤、管理和應(yīng)用數(shù)據(jù)庫更改的開源庫。一個(gè)有趣的事實(shí)是:Liquibase于2012年被一家名為Datical的公司收購,并更名為Datica,但隨后于2020年更名為Liquibase(這是明智之舉,見過有人在論壇上提到過Datica嗎?)。
Liquibase的主要產(chǎn)品是基于Java的CLI,它允許開發(fā)團(tuán)隊(duì)通過CLI將數(shù)據(jù)庫模式遷移集成到他們的CI/CD工作流中。
2.Flyway
Flyway與Liquibase在很多方面有相似之處:它們都是成立時(shí)間較長的數(shù)據(jù)庫,擁有客戶群,而且都是開源項(xiàng)目。它的核心產(chǎn)品是CLI和Java庫。
Flyway背后的商業(yè)實(shí)體是Redgate(于2019年被收購)。它有3個(gè)版本:社區(qū)、團(tuán)隊(duì)和企業(yè)??梢钥闯?,他們?cè)陂_源和商業(yè)產(chǎn)品之間劃出了一條清晰的界限:Flyway的網(wǎng)站總體上感覺更隨意,而Redgate的方式更專業(yè)。
Liquibase和Flyway并駕齊驅(qū)。兩者的主要區(qū)別在于各自的定位:Liquibase更面向企業(yè),而Flyway更面向開發(fā)者。
3.Sqitch
Sqitch是一個(gè)純開源項(xiàng)目,自從2012年以來一直沒有商業(yè)產(chǎn)品上市。它是純粹的CLI,沒有UI。
與基于Java的Liquibase和Flyway不同,Sqitch是使用Perl開發(fā)的。此外,Sqitch在如何管理數(shù)據(jù)庫模式更改方面有自己的理念:Liquibase和Flyway都使用文件命名約定來安排模式遷移(約定高于配置)。
而Sqitch采用了一種顯式的方法,允許用戶在Sqitch計(jì)劃中指定順序。
4.Atlas
Atlas是一個(gè)由Ariga構(gòu)建的開源工具,并推廣了“數(shù)據(jù)庫模式即代碼”這一術(shù)語。
可以看出,他們從HashiCorp那里獲得了很多靈感,并在首次出現(xiàn)在Hacker News上時(shí)將自己稱為“數(shù)據(jù)庫遷移的Terraform”。他們還發(fā)明了基于HCL (HashiCorp配置語言)的Atlas HCL。
Atlas使用現(xiàn)代編程語言Go(與使用Java的Liquibase/Fireway不同),并以CLI為中心(類似于Liquibase.Fireay/Sqitch),但它也有一個(gè)輕量級(jí)的UI。Atlas Cloud是一個(gè)開源版本的商業(yè)產(chǎn)品。
一體化:GUI + Gitops / Database-As-Code + Collaboration
1.Prisma
像Prisma這樣的ORM針對(duì)的是代碼如何與數(shù)據(jù)交互的領(lǐng)域。雖然這更多的是一個(gè)后端主題,但Prisma是一個(gè)具有前端根的ORM。前端工程師可能不是最精通SQL的。為了降低管理數(shù)據(jù)庫模式的障礙,Prisma發(fā)明了它的DSL來定義數(shù)據(jù)模型。
DSL是基于狀態(tài)的(聲明性的),它描述了數(shù)據(jù)庫模式的最終狀態(tài),而不是增量變化,這與Liquibase/Flyway/Sqitch不同。通過這種方式,Prisma可以在整個(gè)應(yīng)用程序開發(fā)周期中提供更全面的數(shù)據(jù)庫管理視圖。
Prisma ORM是開源的,可以免費(fèi)使用,他們的數(shù)據(jù)平臺(tái)提供了一個(gè)基于云的協(xié)作平臺(tái),具有一些高級(jí)功能(很明顯,他們的目標(biāo)不僅僅是一個(gè)ORM和模式遷移工具)。
2.Bytebase
Bytebase是一個(gè)開源數(shù)據(jù)庫DevOps工具,涵蓋了數(shù)據(jù)庫管理場(chǎng)景,從變更、查詢、安全性到基于Web的可視化協(xié)作工作區(qū)的治理。
Bytebase提供了一個(gè)基于Web的UI,開發(fā)人員和DBA可以通過同一個(gè)界面協(xié)作處理數(shù)據(jù)庫更改。
3.數(shù)據(jù)庫即代碼(Database-As-Code)
為了更好地適應(yīng)開發(fā)人員的工作習(xí)慣,Bytebase已經(jīng)將功能集成到代碼庫中,例如itLab和GitHub。通過啟用GitOps工作流,開發(fā)人員可以將數(shù)據(jù)庫更改文件提交到熟悉的代碼存儲(chǔ)庫,一旦審查完成并提交到repo, Bytebase將自動(dòng)觸發(fā)部署。無需在多個(gè)工具之間切換。
4.團(tuán)隊(duì)協(xié)作與管理
用戶可以為兩個(gè)級(jí)別的成員定義不同的角色:工作區(qū)和項(xiàng)目??梢詾閳F(tuán)隊(duì)成員分配不同的角色,以便他們對(duì)不同的項(xiàng)目具有不同的權(quán)限;或者為每個(gè)項(xiàng)目配置審批工作流,例如指定負(fù)責(zé)此特定項(xiàng)目的特定DBA或QA。
Prisma和Bytebase的區(qū)別在于目標(biāo)受眾。Prisma主要針對(duì)前端/全棧開發(fā)人員,而Bytebase更專注于后端和DBA。這兩款產(chǎn)品都提供協(xié)作功能,Prisma專注于單個(gè)項(xiàng)目中開發(fā)人員之間的協(xié)作,而Bytebase針對(duì)整個(gè)工程組織,即開發(fā)人員和DBA/平臺(tái)工程/運(yùn)營團(tuán)隊(duì)。
結(jié)語
如果用戶以個(gè)人身份操作數(shù)據(jù)庫,那么傳統(tǒng)的CLI或GUI SQL客戶端(如Navicat)就足夠了。如果更喜歡與代碼庫集成,有像Liquebase和Flyway這樣的解決方案。然而,對(duì)于類似Jira或GitLab的GUI和項(xiàng)目協(xié)作功能,可以選擇Prisma和Bytebase。Bytebase是唯一一個(gè)提供組織范圍管理功能的工具,除了使數(shù)據(jù)庫更改更高效和更安全之外,還可以確保數(shù)據(jù)安全和治理。
原文標(biāo)題:Evolution of Top Database Schema Change Tools,作者:Mila Wu