對於大多數工程師來說,版本控制(Version Control)是程式碼開發的標配,我們習慣使用 Git 來進行分支、合併與回滾。然而,當面對資料庫中的結構化數據時,我們通常只能依賴備份或複雜的稽核日誌(Audit Logs)來追蹤變更。Dolt 是一款將 Git 的核心邏輯直接植入 SQL 資料庫的開源產品,而其最新發布的 2.0 版本,重點解決了版本控制資料庫最頭痛的儲存成本與效能問題。
什麼是 Dolt 以及它如何運作
Dolt 是一個與 MySQL 相容的 SQL 資料庫,但它最特殊之處在於內建了 Git 風格的操作。這意味著你可以直接對資料表執行 branch(建立分支)、merge(合併)、clone(複製)以及 diff(比對差異)。
在技術底層,Dolt 並非簡單地將資料快照儲存在磁碟上,而是使用了名為 Prolly Trees 的內容定址儲存結構。這是一種將 B-Tree 與 Merkle Tree 結合的設計,讓資料庫能夠在行級別(Row-level)進行版本管理。當資料變更時,它會利用結構共享(Structural Sharing)機制,只儲存變更的部分而非整個副本,從而實現高效的版本切換與快速的差異比對。
解決 Copy-on-Write 帶來的儲存壓力
對於初學者來說,必須理解 Dolt 採用的是 Copy-on-Write(寫入時複製)機制。簡單來說,每當資料發生變更並提交時,系統會保留之前的狀態以確保可回溯性。雖然這保證了資料的完整性,但副作用是會產生大量的磁碟垃圾(Disk Garbage),尤其是在大量匯入資料時,許多中間狀態會迅速佔滿硬碟空間。
Dolt 2.0 針對此問題引入了自動化的垃圾回收(Garbage Collection)與儲存優化。系統現在能自動識別並清除那些不屬於任何提交紀錄(Commit)的中間狀態。此外,新版本引入了名為 Archives 的磁碟格式,透過字典壓縮(Dictionary Compression)來去除重複的儲存內容,據官方數據顯示,這能將儲存空間佔用降低 30% 到 50%。
效能突破:從慢 20 倍到超越 MySQL
版本控制系統通常會帶來額外的讀寫開銷,因為系統必須處理複雜的樹狀結構而非簡單的線性儲存。在早期版本中,Dolt 的讀取速度比 MySQL 慢 10 倍,寫入速度甚至慢 20 倍。
在 2.0 版本中,開發團隊透過持續的優化,將效能大幅提升。根據 sysbench 的基準測試,Dolt 目前在寫入效能上比 MySQL 快 13%,讀取效能則快 5%。這意味著開發者不再需要在版本控制的便利性與系統效能之間做極端的權衡。
擴展至向量資料與生態系
隨著 AI 應用普及,向量資料庫(Vector Database)成為剛需。Dolt 2.0 推出 Beta 版本的向量索引支援,整合了 MariaDB 的 Vector 型別。這讓 Dolt 成為目前少數能對向量數據進行版本控制的資料庫,讓工程師能像管理程式碼一樣,對 AI 的 Embedding 數據進行實驗、分支與回滾。
此外,除了 MySQL 相容版本,Dolt 也在開發 DoltgreSQL(Postgres 相容版本),旨在將同樣的版本控制儲存引擎擴展到 PostgreSQL 生態系中。
為什麼這對工程實務很重要
在傳統的 CI/CD 流程中,我們能輕易地在分支上測試新功能,但資料庫的變更(Schema Change 或 Data Migration)往往是最高風險的環節。如果能將 Git 工作流引入資料管理,將帶來以下實務好處:
第一,在生產環境數據的副本上直接進行測試,而不會影響主線資料。 第二,當資料遷移出錯時,可以實現秒級的快速回滾(Rollback),而非依賴耗時的備份還原。 第三,讓數據科學家能建立隔離的實驗分支,驗證數據清洗邏輯後再合併回主庫。
雖然市場上也有 LakeFS 或 Nessie 等針對資料湖(Data Lake)的版本控制方案,但 Dolt 的優勢在於它提供的是完整的 SQL 介面,讓開發者無需學習複雜的新工具,即可在熟悉的 SQL 環境中實踐現代化的變更管理。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。