Dolt:世界上首个可版本控制的 SQL 数据库

在软件开发的世界里,我们早已习惯了 Git 这样的版本控制系统——它让我们能够追踪代码变更、协作开发、回滚错误提交。然而,数据呢?数据库中的表结构和数据本身,是否也能像代码一样被“版本化”?

Dolt 给出了一个肯定的答案。

dolt

什么是 Dolt?

Dolt 是由 Liquidata(后被 PlanetScale 收购)开发的一款开源、免费的关系型数据库,其最大特点是将 Git 的版本控制能力直接集成到 SQL 数据库中。你可以把它理解为 “Git for Data” —— 一个支持分支、合并、提交、差异比较等操作的 SQL 数据库。

Dolt 兼容 MySQL 协议,使用标准的 SQL 语法,并且完全用 Go 语言编写。这意味着你几乎可以像使用 MySQL 一样使用 Dolt,但同时获得强大的数据版本管理能力。更重要的是,Dolt 采用 Apache 2.0 开源许可证发布,完全免费用于个人、商业和企业场景,无需支付任何授权费用。

核心特性

1. 数据版本控制(Data Versioning)

Dolt 允许你对整个数据库进行 commitcheckoutbranchmerge 等操作,就像操作 Git 仓库一样:

dolt init
dolt add .
dolt commit -m "Initial data import"
dolt checkout -b experiment-branch

每一次提交都会生成一个唯一的哈希值,你可以随时回滚到任意历史状态。

2. 表级差异对比(Diff)

Dolt 提供 dolt diff 命令,可以查看表结构或数据在不同提交之间的差异:

-- 在 SQL 中也可以查询差异
SELECT * FROM dolt_diff('users');

这对于审计数据变更、调试数据问题非常有用。

3. 分支与合并(Branching & Merging)

你可以在不同分支上修改同一张表,然后安全地合并变更。Dolt 会自动处理冲突(如果存在),并提示你解决。

dolt merge feature-branch

这使得 A/B 测试、实验性数据分析、多团队协作变得异常简单。

4. 兼容 MySQL

Dolt 实现了 MySQL 的线协议(wire protocol),因此大多数 MySQL 客户端、ORM(如 SQLAlchemy、Sequelize)和工具(如 TablePlus、DBeaver)都可以直接连接 Dolt,无需修改代码。

5. 可作为嵌入式数据库或服务运行

Dolt 既可以作为命令行工具本地使用(类似 SQLite),也可以通过 dolt sql-server 启动为网络服务,支持多客户端连接。

开源与免费:真正的开放数据基础设施

Dolt 不仅功能强大,更关键的是它的开放性

  • 完全开源:Dolt 的源代码托管在 GitHub,采用 Apache License 2.0 许可证。这意味着你可以自由查看、修改、分发代码,甚至将其集成到自己的产品中。
  • 永久免费:无论是个人项目、学术研究,还是商业应用,使用 Dolt 不需要支付任何许可费或订阅费。核心功能全部开放,无“社区版/企业版”割裂。
  • 活跃的社区:Dolt 拥有活跃的开发者社区,定期发布新版本,修复问题,并接受外部贡献。你不仅可以使用它,还可以参与共建。
  • 透明演进:所有功能路线图、设计决策和问题讨论都在公开渠道进行,确保技术方向由社区共同驱动。

这种“开源 + 免费 + 无隐藏限制”的模式,使其成为构建可信、可审计、可协作数据系统的理想选择。

快速上手示例

  1. 安装 Dolt(macOS/Linux/Windows):

    # macOS / Linux
    curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | sudo bash
    
    # Windows (via PowerShell)
    iwr -useb https://github.com/dolthub/dolt/releases/latest/download/install.ps1 | iex
    
  2. 初始化数据库

    mkdir mydb && cd mydb
    dolt init
    
  3. 创建表并插入数据

    dolt sql -q "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(100));"
    dolt sql -q "INSERT INTO users VALUES (1, 'Alice'), (2, 'Bob');"
    
  4. 提交变更

    dolt add .
    dolt commit -m "Add initial users"
    
  5. 查看历史

    dolt log
    
  6. 启动 SQL 服务(可选):

    dolt sql-server --user root --password '' --host 0.0.0.0
    

现在你就可以用任何 MySQL 客户端连接 localhost:3306 访问这个版本化的数据库了!

与传统方案的对比

特性 传统数据库(如 MySQL) Dolt
数据版本控制 ❌ 需手动实现 ✅ 原生支持
分支/合并 ❌ 不支持 ✅ 类似 Git
差异对比 ❌ 需自定义脚本 ✅ 内置 dolt diff
MySQL 兼容性 ✅(高度兼容)
开源免费 ✅(MySQL 社区版) ✅✅(Apache 2.0,无限制)
分布式协作 ✅(支持 push/pull 到 Dolthub)

注:Dolt 也提供了类似 GitHub 的托管平台 Dolthub,用于共享和协作数据库。Dolthub 提供免费公开仓库,私有仓库也有慷慨的免费额度

局限与注意事项

  • 性能:Dolt 并非为高并发 OLTP 场景设计,更适合分析型、协作型或中小规模应用。
  • 事务支持:支持 ACID 事务,但在复杂并发写入场景下需谨慎评估。
  • 生态系统:虽然兼容 MySQL,但某些高级功能(如存储过程、触发器)尚未完全支持。

结语

Dolt 打破了“数据不可版本化”的传统观念,将软件工程中成熟的版本控制思想引入数据领域。它不是要取代 PostgreSQL 或 MySQL,而是为那些需要可追溯、可协作、可实验的数据场景提供了一种全新范式。

最重要的是,作为一个真正开源且完全免费的数据库,Dolt 降低了创新门槛,让每个开发者、研究者和团队都能无顾虑地使用、学习和扩展它。

如果你正在处理需要频繁变更、多人协作或严格审计的数据项目,不妨试试 Dolt —— 也许它会成为你下一个项目的“数据 Git”。


延伸阅读

未经允许不得转载:海淘实验室 » Dolt:世界上首个可版本控制的 SQL 数据库

赞 (0)

评论 0