Dolt —— 数据版 Git
Dolt 是 Git for Data!
Dolt 是一个 SQL 数据库,你可以像使用 Git 仓库一样对它进行:
- fork
- clone
- branch
- merge
- push
- pull
你可以像连接任何 MySQL 数据库 一样连接 Dolt,用于读取或修改 schema 和数据。
版本控制功能通过 SQL 系统表、函数和存储过程 暴露。
你也可以使用 类似 Git 的命令行接口 来:
- 导入 CSV 文件
- 提交(commit)修改
- 推送到远程仓库
- 合并团队成员的修改
所有你熟悉的 Git 命令,在 Dolt 中的行为 完全相同。
Git 对文件进行版本控制 Dolt 对表进行版本控制
就像 Git 和 MySQL 生了一个孩子。 ([GitHub][1])
相关产品
我们还构建了:
DoltHub
一个用于 共享 Dolt 数据库的平台。 我们 免费托管公共数据。
DoltLab
如果你想 自托管 DoltHub,可以使用 DoltLab。
Hosted Dolt
如果你希望我们 托管 Dolt 服务器,可以使用 Hosted Dolt。
Doltgres
如果你更喜欢 PostgreSQL 而不是 MySQL,可以尝试 Doltgres(当前为 Beta 版本)。
视频介绍
(项目 README 中包含视频介绍)
Dolt 用来做什么?
Dolt 是一个 通用工具,拥有很多应用场景。
例如:
MySQL 副本(Replica)
Dolt 可以通过 标准 MySQL binlog replication 作为现有 MySQL 数据库的副本。
这样:
- 每一次写入都会变成 一个 Dolt commit
- 你可以获得 数据库版本控制能力
- 同时保持现有 MySQL 运行
Dolt CLI
dolt 命令行工具和 git 几乎完全一致,并增加了一些数据库相关命令。
常见命令:
revert 撤销某个 commit 引入的更改
clone 从远程数据仓库克隆
fetch 从远程更新数据库
pull 获取并合并远程仓库
push 推送到远程仓库
config 配置 Dolt
remote 管理远程仓库
backup 管理服务器备份
login 登录远程 Dolt 主机
creds 管理凭证
ls 列出工作区中的表
schema 查看或导入表 schema
table 复制 / 重命名 / 删除 / 导出表
tag 创建 / 列出 / 删除 tag
blame 查看每一行最后由谁修改
constraints 处理约束
migrate 执行数据库格式迁移
read-tables 在指定 commit 读取表
gc 清理未引用数据
filter-branch 修改 commit 历史
merge-base 查找两个 commit 的共同祖先
version 显示 CLI 版本
dump 导出所有表
安装
Dolt 是一个 单个约 103MB 的程序。
du -h /Users/timsehn/go/bin/dolt
103M
安装非常简单:
下载并放入 PATH 即可。
从最新 Release 安装
在 Linux 或 Mac 上运行:
sudo bash -c 'curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | bash'
该脚本会:
- 下载最新版本
- 安装到
/usr/local/bin/
如果没有 root 权限,可以:
- 手动下载二进制文件
- 解压
- 放到
PATH目录
Linux
Arch Linux
pacman -S dolt
Mac
Homebrew
brew install dolt
MacPorts
sudo port install dolt
Windows
下载 .msi 安装包并运行。
Chocolatey
choco install dolt
Docker
官方 Docker 镜像:
-
dolthub/dolt(CLI 模式) -
dolthub/dolt-sql-server(服务器模式)
从源码编译
需要:
- Go
- C 编译器(cgo 依赖)
步骤:
git clone repo
cd go
go install ./cmd/dolt
生成的二进制:
$GOPATH/bin
测试:
~/go/bin/dolt version
配置
运行:
dolt
如果安装成功,会显示可用命令。
配置用户名和邮箱:
dolt config --global --add user.email YOU@DOMAIN.COM
dolt config --global --add user.name "YOUR NAME"
和 Git 的配置方式完全相同。
快速开始
创建数据库目录
cd ~
mkdir dolt
cd dolt
Dolt 的数据库会存储在这个目录下。
例如:
~/dolt/getting_started
启动 MySQL 兼容数据库服务器
dolt sql-server
默认端口:
3306
使用 MySQL 客户端连接
mysql --host 127.0.0.1 --port 3306 -uroot
连接后:
mysql>
Dolt 支持的数据库特性
- 外键
- 二级索引
- Trigger
- Check constraint
- 存储过程
- 多表 JOIN
最多支持 12 表 JOIN。
因此 Dolt 是一个 完整的现代 SQL 关系数据库。
创建 Dolt commit
示例:
call dolt_add('teams','employees','employees_teams');
然后:
call dolt_commit('-m','Created initial schema');
每次 commit 都会生成 hash。
查看数据库 diff
在 commit 前可以查看修改:
select * from dolt_status;
也可以查看某个表的 diff:
dolt_diff_<tablename>
Dolt 的优势
使用 Dolt 可以让数据库操作更安全:
- 可以回滚修改
- 可以恢复历史状态
- 可以撤销 commit
例如:
dolt_revert()
甚至:
如果你误执行:
drop database
也可以通过:
dolt_undrop()
恢复数据库。
可视化 SQL 工具
如果不喜欢命令行,可以使用 GUI 工具,例如:
TablePlus
连接方式:
- 类型:MySQL
- 数据库:getting_started
- 用户:root
即可获得数据库 GUI。
在分支上修改
使用:
dolt_checkout()
创建分支:
-b
和 Git 一样。
进一步阅读
可以查看:
- 官方文档
- 官方博客
- Roadmap
安全策略
Dolt 的安全策略维护在仓库中。
发现安全问题时:
不要在公开 Issue 中报告 请按照披露流程处理。
致谢
Dolt 大量借鉴了 Noms 项目 的开源代码与思想。
我们非常感谢 Noms 团队。
许可证
Dolt 使用:
Apache License 2.0
详见 LICENSE 文件。
