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

坑与注意

  1. 性能不如原生 MySQL:Dolt 额外的版本控制层带来约 10-30% 的写入开销,不适合超高并发写入场景(>10k TPS)
  2. MySQL 兼容性为 5.7 级别:不支持 MySQL 8.0 的某些特性(如窗口函数 CTAS 语法细节),迁移前要测兼容性
  3. 存储占用较大:每个 commit 保留完整数据快照,长期运行的大表仓库会膨胀,用 dolt gc 定期清理
  4. 冲突解决需要 SQL 知识:merge 冲突不像 Git 用文本 diff,而是用 SQL 解决冲突行,需要一定 SQL 基础
  5. DoltHub 私有仓库收费:公开数据集免费,私有仓库按存储量计费;如果只是自己用可以完全本地或自建 DoltLab
  6. Python 3.14 不兼容:如果用 Python 工具链连接,注意当前 Dolt SQL Server 推荐 MySQL 8.4 客户端(Homebrew 安装 mysql@8.4
  7. 分支不等于备份: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 兼容性级别和高写入场景的性能权衡。)