数据库新纪元:Dolt——数据的 Git

在数据管理的浩瀚海洋中,Dolt 像一颗耀眼的新星,闪耀着独特的光芒。作为一款 SQL 数据库,Dolt 不仅可以存储和处理数据,还赋予了数据版本控制的能力,让数据管理变得像使用 Git 一样简单。这是一场数据库领域的革命,正如开发者们所言:“Dolt 就是数据的 Git!”

Dolt 的核心理念

Dolt 使得数据的管理变得如同 Git 版本控制那样直观且易于操作。开发者可以通过类似 Git 的命令来进行数据的分支、合并、推送和拉取。无论是连接 Dolt 进行数据的读取和修改,还是通过命令行接口导入 CSV 文件,Dolt 都能轻松应对。所有您熟悉的 Git 命令在 Dolt 中都能如鱼得水。

与 Git 不同的是,Dolt 版本控制的是数据表而非文件。这种设计理念的背后,是对数据管理灵活性的深入思考。

连接 Dolt:如同连接 MySQL

通过与 MySQL 兼容的接口,用户可以像操作传统 MySQL 数据库一样连接到 Dolt。Dolt 在 SQL 中通过系统表、函数和过程展现其版本控制功能,使得用户可以轻松读取和修改数据结构及数据内容。

Dolt 还专门构建了 DoltHub,一个分享 Dolt 数据库的平台,用户可以在这里自由地分享和获取公共数据。如果您想自行托管 DoltHub,我们提供了 DoltLab 的解决方案。如果您希望我们为您运行 Dolt 服务器,您可以选择 Hosted Dolt。此外,我们还推出了 DoltgreSQL 的早期版本,旨在为 Postgres 用户提供类似的功能。

Dolt CLI:更强大的命令行工具

Dolt 的命令行工具 (dolt​) 提供了与 Git 类似的命令集,并增加了一些额外功能。用户可以使用以下命令来管理数据库:

$ dolt
Valid commands for dolt are
                init - Create an empty Dolt data repository.
              status - Show the working tree status.
                 add - Add table changes to the list of staged table changes.
                diff - Diff a table.
               reset - Remove table changes from the list of staged table changes.
               clean - Remove untracked tables from working set.
              commit - Record changes to the repository.
                 sql - Run a SQL query against tables in repository.
          sql-server - Start a MySQL-compatible server.
          sql-client - Starts a built-in MySQL client.
                 log - Show commit logs.
              branch - Create, list, edit, delete branches.
            checkout - Checkout a branch or overwrite a table from HEAD.
               merge - Merge a branch.
           conflicts - Commands for viewing and resolving merge conflicts.
         cherry-pick - Apply the changes introduced by an existing commit.
              revert - Undo the changes introduced in a commit.
               clone - Clone from a remote data repository.
               fetch - Update the database from a remote data repository.
                pull - Fetch from a dolt remote data repository and merge.
                push - Push to a dolt remote.
              config - Dolt configuration.
              remote - Manage set of tracked repositories.
              backup - Manage a set of server backups.
               login - Login to a dolt remote host.
               creds - Commands for managing credentials.
                  ls - List tables in the working set.
              schema - Commands for showing and importing table schemas.
               table - Commands for copying, renaming, deleting, and exporting tables.
                 tag - Create, list, delete tags.
               blame - Show what revision and author last modified each row of a table.
         constraints - Commands for handling constraints.
             migrate - Executes a database migration to use the latest Dolt data format.
         read-tables - Fetch table(s) at a specific commit into a new dolt repo
                  gc - Cleans up unreferenced data from the repository.
       filter-branch - Edits the commit history using the provided query.
          merge-base - Find the common ancestor of two commits.
             version - Displays the current Dolt cli version.
                dump - Export all tables in the working set into a file.

安装 Dolt

Dolt 的安装极其简便,您只需下载并将其放入您的 PATH 中。对于不同平台的用户,Dolt 提供了多种安装方式。

从最新版本安装

在 Linux 或 Mac 系统上,您可以运行以下命令:

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

Windows 用户

您可以下载最新的 Microsoft Installer (.msi​ 文件) 并运行它,或者通过 Chocolatey 安装 Dolt:

choco install dolt

Docker 用户

Dolt 还提供了官方的 Docker 镜像。您可以选择 dolthub/dolt​ 作为 CLI 工具,或使用 dolthub/dolt-sql-server​ 以服务器模式运行 Dolt。

开始使用 Dolt

启动 MySQL 兼容的数据库服务器

Dolt 内置的 MySQL 兼容数据库服务器可以通过 dolt sql-server​ 命令启动,默认在 3306 端口运行。

dolt sql-server
Starting server with Config HP="localhost:3306"|T="28800000"|R="false"|L="info"

连接到数据库

在新的终端中,您可以使用 Dolt 自带的 MySQL 客户端连接到运行中的数据库服务器:

% dolt -u root -p "" sql
# Welcome to the Dolt MySQL client.
# Statements must be terminated with ';'.
# "exit" or "quit" (or Ctrl-D) to exit.
mysql>

Dolt 支持与任何 MySQL 兼容的客户端连接,您只需指定主机和端口即可。

创建数据库和表

接下来,您可以创建一个名为 getting_started​ 的数据库,并在其中建立多个表:

mysql> create database getting_started;
Query OK, 1 row affected (0.04 sec)

mysql> use getting_started;
Database changed

mysql> create table employees (
    id int, 
    last_name varchar(255), 
    first_name varchar(255), 
    primary key(id));
Query OK, 0 rows affected (0.01 sec)

mysql> create table teams (
    id int, 
    team_name varchar(255), 
    primary key(id)); 
Query OK, 0 rows affected (0.00 sec)

mysql> create table employees_teams(
    team_id int, 
    employee_id int, 
    primary key(team_id, employee_id), 
    foreign key (team_id) references teams(id), 
    foreign key (employee_id) references employees(id));
Query OK, 0 rows affected (0.01 sec)

Dolt 支持外键、二级索引、触发器、检查约束和存储过程,是一款现代化的功能丰富的 SQL 数据库。

使用 Dolt 提交和版本控制

Dolt 的版本控制功能使得每个提交都能记录数据的变化。您可以通过 dolt_add​ 和 dolt_commit​ 存储过程来添加和提交更改。

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

每次提交后,您都可以查看提交日志,了解您的每次更改:

mysql> select * from dolt_log;

数据的可追溯性与审计

Dolt 赋予每个单元格强大的审计功能,您可以通过 dolt_history_<tablename>​ 和 dolt_diff_<tablename>​ 来查看数据的历史变化和差异。这种能力使得数据的管理变得透明和可控。

mysql> select * from dolt_history_employees where id=0 order by commit_date;

结论

Dolt 的出现为数据管理带来了全新的视角,结合了 SQL 数据库的强大功能和 Git 的版本控制优势。无论是数据的创建、修改还是版本控制,Dolt 都让一切变得简单、直观且高效。它不仅适合开发者,也适合任何需要管理数据变更的用户。

参考文献

  1. DoltHub: DoltHub
  2. 官方文档: Dolt Documentation
  3. GitHub 页面: Dolt GitHub
  4. 安全政策: Dolt Security Policy
  5. 许可证: Dolt License

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...