Dolt

6个月前发布 188 00

Dolt 是一个你可以像 Git 仓库一样进行 fork、clone、branch、merge、push 和 pull 的 SQL 数据库。像连接任何 MySQL 数据库一样连接到 Dolt 以运行 SQL 查询。使用命令行界面导入 CSV 文件、提交更改、推送到远程仓库或合并团队成员的更改。

所在地:
美国
收录时间:
2026-04-30
其他站点:

在软件开发中,Git 是版本控制的黄金标准。但在数据领域,我们往往缺乏同样的工具。Dolt是一个你可以像 Git 仓库一样进行 fork、clone、branch、merge、push 和 pull 的 SQL 数据库。

Dolt

简单来说,Dolt 是 Git 和 MySQL 的结合体。它既是一个完整的 SQL 数据库(兼容 MySQL 协议),又是一个版本控制系统。你可以像连接任何 MySQL 数据库一样连接 Dolt 运行查询,也可以使用类似 Git 的命令行界面来管理数据的变更历史。

为什么需要 Dolt?

传统数据库难以追踪“谁在什么时候改了什么数据”,而文件系统版本控制又无法处理结构化数据的复杂性。Dolt 解决了这一痛点:

  • 行级版本控制:不仅记录文件变化,更记录每一行数据的增删改。
  • 分支与合并:支持数据分支开发,合并时自动处理冲突,就像合并代码一样。
  • 时间旅行:随时回溯到历史上的任意提交点,查看或恢复数据。
  • 协作友好:通过 push/pull 轻松共享数据集,实现团队间的数据协作。
  • AI 代理记忆:作为多代理工作流中的最佳数据库,Dolt 能为 AI Agent 提供可追溯、可分支的记忆存储。

核心功能:Git 命令,SQL 内核

Dolt 的 CLI 工具提供了与 Git 几乎一致的命令体验,同时通过系统表在 SQL 层面暴露版本控制能力。

🛠️ Dolt CLI 常用命令

$ dolt
Valid commands for dolt are
                init - 创建空的 Dolt 数据仓库
              status - 显示工作树状态
                 add - 添加表变更到暂存区
                diff - 比较表差异
               reset - 移除暂存区的表变更
              commit - 记录变更到仓库
                 sql - 对仓库中的表运行 SQL 查询
          sql-server - 启动 MySQL 兼容服务器
              branch - 创建、列出、编辑、删除分支
            checkout - 切换分支或从 HEAD 覆盖表
               merge - 合并分支
           conflicts - 查看和解决合并冲突
         cherry-pick - 应用现有提交的变更
              revert - 撤销特定提交的变更
               clone - 克隆远程数据仓库
                pull - 拉取并合并远程变更
                push - 推送到远程仓库
               blame - 显示每行数据最后修改的版本和作者

💡 SQL 层面的版本控制

Dolt 将版本控制功能嵌入 SQL,通过系统表和存储过程实现:

  • dolt_log:查看提交历史。
  • dolt_diff_<tablename>:查看特定表的行级差异。
  • dolt_status:查看当前工作集状态。
  • call dolt_commit():提交变更。
  • call dolt_reset():重置工作集。
  • call dolt_undrop():撤销误删数据库的操作(是的,你没看错!)。

快速开始:5 分钟上手 Dolt

1. 安装 Dolt

Dolt 是一个约 103MB 的单二进制文件,安装极其简单。

Mac (Homebrew):

brew install dolt

Linux:

sudo bash -c 'curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | bash'

Windows:
下载 MSI 安装包或使用 Chocolatey:choco install dolt

2. 配置用户信息

就像 Git 一样,你需要配置用户名和邮箱:

dolt config --global --add user.email "you@example.com"
dolt config --global --add user.name "Your Name"

3. 启动服务器并连接

Dolt 内置了 MySQL 兼容服务器。在一个终端启动:

dolt sql-server

在另一个终端使用客户端连接:

dolt -u root -p "" sql

4. 创建数据库与表

mysql> create database getting_started;
mysql> use getting_started;

mysql> create table employees (
    id int, 
    last_name varchar(255), 
    first_name varchar(255), 
    primary key(id)
);

mysql> create table teams (
    id int, 
    team_name varchar(255), 
    primary key(id)
);

5. 提交初始模式

使用 Dolt 特有的存储过程进行提交:

mysql> call dolt_add('employees', 'teams');
mysql> call dolt_commit('-m', 'Created initial schema');

-- 查看提交历史
mysql> select * from dolt_log;

6. 插入数据并查看差异

mysql> insert into employees values (0, 'Sehn', 'Tim');
mysql> insert into teams values (0, 'Engineering');

-- 查看未提交的变更
mysql> select * from dolt_status;
mysql> select * from dolt_diff_employees;

7. 时间旅行与后悔药

场景一:误删表?

mysql> drop table employees;
mysql> call dolt_reset('--hard'); -- 瞬间恢复!

场景二:误删整个数据库?

mysql> drop database getting_started;
mysql> call dolt_undrop(); -- 是的,Dolt 支持撤销删库!

场景三:回溯历史?

-- 查询特定提交时的数据
mysql> select * from employees as of 'ne182jemgrlm8jnjmoubfqsstlfi1s98';

生态系统:DoltHub 与 DoltLab

  • DoltHub:类似于 GitHub,用于分享和发现公共 Dolt 数据库。免费托管公共数据。
  • DoltLab:自托管版的 DoltHub,适合企业内部部署。
  • Hosted Dolt:由官方托管的 Dolt 服务器服务。
  • Doltgres:如果你更喜欢 PostgreSQL 协议,可以尝试 Dolt 的 PG 兼容版本(目前处于 Beta 阶段)。

相关导航