dolthub/dolt · 上手攻略
- 仓库:dolthub/dolt
- 链接:https://github.com/dolthub/dolt
- 分类:ai
- 作者:Tom
- 更新:2026-07-13
这是什么
Dolt 是一个带版本控制的 SQL 数据库——把 Git 的协作模型带入了数据世界。你可以 fork、clone、branch、merge、push、pull 数据库表,就像对代码仓库操作一样。数据以 MySQL 兼容的 SQL 表形式存储,版本控制功能通过 SQL 内的系统表和存储过程暴露出来。
官方 slogan:"Git for Data"。
本质上是 MySQL 5.7 兼容的数据库引擎,加上完整的 Git 风格 DVCS 层。它不是 Git + 数据库的简单粘合,而是从存储引擎层就融为一体的版本化关系数据库。
核心定位:数据的 GitHub。当团队需要协作编辑同一份数据、追踪数据变更历史、回滚错误修改、对比分支差异时,Dolt 是最接近 Git 体验的解决方案。
解决什么问题
- 数据协作:多人可以同时在各自分支修改数据,再合并(merge)——这在普通数据库里需要手工写 merge 脚本
- 数据版本历史:每次变更都是可查询的 commit,可看 diff、可回滚(revert)、可 blame 每行数据的历史
- 数据分享:通过 DoltHub(类似 GitHub)分享公共数据集,star、fork、数据 PR 机制一应俱全
- 渐进式数据导入:CSV 文件直接导入成表,commit 后推送到远程
- AI Agent 记忆:Dolt 官方文档特别推荐作为多 Agent 系统的共享记忆存储,因为分支机制天然隔离不同 Agent 的上下文
典型场景:爬虫数据管理、机器学习数据集版本化、配置数据协作、产品数据库的 staging/prod 对比、BI 数据源的版本化上游。
快速安装
macOS
brew install dolt
Linux / Mac(脚本安装)
sudo bash -c 'curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | bash'
安装后验证:
dolt version
# dolt version 1.x.x (或更新版本)
Docker(无安装)
# CLI 工具
docker run --rm -v "$PWD:/data" dolthub/dolt dolt version
# SQL Server 模式
docker run -d -p 3306:3306 -v "$PWD/db:/var/lib/dolt" dolthub/dolt-sql-server
核心用法
1. 初始化数据库
dolt init
# 初始配置用户名和邮箱(类似 git config)
dolt config --global --add user.email "you@example.com"
dolt config --global --add user.name "Your Name"
2. 创建表 & SQL 操作
启动 SQL Server(在另一个终端窗口运行):
dolt sql-server
# Starting server with Config HP="localhost:3306"|T="28800000"|R="false"|L="info"
然后用 MySQL 客户端连接(默认用户 root,无密码):
dolt sql
# 或任意 MySQL 客户端:
mysql --host 127.0.0.1 --port 3306 -uroot
# 在 SQL shell 内:
CREATE DATABASE myapp;
USE myapp;
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(255),
price DECIMAL(10,2)
);
3. 版本控制命令(与 Git 完全对应)
# 查看工作区状态
dolt status
# 添加表变更到暂存区
dolt add products
# 提交变更
dolt commit -m "Updated product prices"
# 查看提交历史
dolt log
# 创建分支
dolt branch new-pricing
# 切换分支
dolt checkout new-pricing
# 合并分支
dolt checkout main
dolt merge new-pricing
# 对比差异
dolt diff products
4. SQL 内的版本控制(高级用法)
Dolt 在每个数据库里创建了系统表,可直接在 SQL 中查询版本信息:
-- 查看表的历史版本
SELECT * FROM myapp.dolt_history_products;
-- 查看变更日志
SELECT * FROM myapp.dolt_log;
-- 查看某行的最后修改commit
SELECT * FROM myapp.dolt_blame_products WHERE id = 1;
-- 通过存储过程执行版本控制操作
CALL dolt_add('products');
CALL dolt_commit('-m', 'Updated product prices');
5. 远程协作(与 GitHub 完全对应)
# 添加远程仓库
dolt remote add origin https://github.com/username/my-data
# 推送数据
dolt push origin main
# 克隆别人的数据仓库
dolt clone https://github.com/username/my-data
dolt clone dolthub/username/my-database
# 拉取合并
dolt pull origin
6. CSV 导入导出
# 导入 CSV 为表
dolt table import products --file products.csv --types "int,varchar(255),decimal(10,2)"
# 导出表为 CSV
dolt table export products --file products_backup.csv
# 全库导出
dolt dump -u root
7. DoltHub 分享数据
DoltHub 是数据的 GitHub,公开数据集免费托管:
dolt login # 注册 DoltHub 账号
dolt hub create # 在 DoltHub 创建远程仓库
dolt push origin main # 推送
访问 https://www.dolthub.com/explore 可以浏览数千个公开数据集。
典型适用场景
| 场景 | 为什么用 Dolt |
|---|---|
| 爬虫数据管理 | 每次爬取 commit一次,可追溯、可对比、可回滚 |
| ML 数据集版本化 | 分支实验不同清洗策略,合并好的结果 |
| 产品配置数据库 | 多环境(dev/staging/prod)用不同分支管理 |
| 多人数据标注协作 | 各自在分支工作,通过 merge 处理冲突 |
| AI Agent 记忆 | 多 Agent 隔离分支,互不干扰,最终合并结果 |
| 公共数据分享 | 在 DoltHub 上架数据集,用户可 fork 和 PR |
坑与注意
- 性能不如原生 MySQL:Dolt 额外的版本控制层带来约 10-30% 的写入开销,不适合超高并发写入场景(>10k TPS)
- MySQL 兼容性为 5.7 级别:不支持 MySQL 8.0 的某些特性(如窗口函数 CTAS 语法细节),迁移前要测兼容性
- 存储占用较大:每个 commit 保留完整数据快照,长期运行的大表仓库会膨胀,用
dolt gc定期清理 - 冲突解决需要 SQL 知识:merge 冲突不像 Git 用文本 diff,而是用 SQL 解决冲突行,需要一定 SQL 基础
- DoltHub 私有仓库收费:公开数据集免费,私有仓库按存储量计费;如果只是自己用可以完全本地或自建 DoltLab
- Python 3.14 不兼容:如果用 Python 工具链连接,注意当前 Dolt SQL Server 推荐 MySQL 8.4 客户端(Homebrew 安装
mysql@8.4) - 分支不等于备份:Dolt 分支是逻辑隔离,不是物理复制,删除分支会丢失未合并的数据
与同类对比
| 工具 | 定位 | SQL 支持 | 版本控制方式 | 协作模式 |
|---|---|---|---|---|
| Dolt | Git for Data | MySQL 5.7 兼容 | 内置 DVCS(表级) | Git-like + DoltHub |
| Doltgres | Postgres 版 Dolt | PostgreSQL 兼容 | 内置 DVCS | 同上(Beta) |
| Git + CSV | 数据版本化 | 无 | 文件级 | Pull Request |
| DataLad | 数据集版本化 | 无 | Git + 符号链接 | Git-annex |
| LakeFS | 数据 Lake 版本化 | 无(API) | 对象存储层 | Git-like |
| Delta Lake | 数据湖版本化 | Spark SQL | 事务日志 | ACID 表 |
| 普通 MySQL + 工单 | 协作数据管理 | 完全 | 无内置 | 人工流程 |
Dolt 的核心优势:真正的 SQL + 真正的 Git 体验,不需要额外的 ETL 或工具层。如果你的团队已经习惯 Git 工作流,Dolt 是门槛最低的数据版本化方案。
一句话推荐结论
如果你曾经为"数据能不能像代码一样做分支、PR 和回滚"而苦恼,Dolt 就是答案——一个 MySQL 兼容的、Git 式的版本控制数据库,适合团队数据协作、AI Agent 记忆和数据集管理,生产可用。(⚠️ 注意其 MySQL 5.7 兼容性级别和高写入场景的性能权衡。)