Dolt:データベースとGitの『結婚』 — データバージョン管理の完全ガイド

Database tutorial - IT technology blog
Database tutorial - IT technology blog

なぜDoltがデータエンジニアリング界隈で注目されているのか?

開発者の皆さんなら、ソースコード管理にGitを使うことには慣れているでしょう。しかし、データベースとなると話は別で、もっと複雑です。以前、MySQLやPostgreSQLを使っていた頃は、新しいスキーマを試すたびにSQLファイルをダンプしたり、数十GBものデータベースをクローンしたりして、リソースを大幅に消費していました。本番環境でWHERE句を忘れたUPDATEコマンドを一つ実行するだけで、一晩中眠れなくなることもありました。

Doltは、そんな悩みを解消するために誕生しました。これはMySQLと100%の互換性を持つSQLリレーショナルデータベースでありながら、GitのDNAを受け継いでいます。データに対して直接dolt commitdolt branchdolt mergeを実行できるのです。

機械学習のデータセットや複雑な設定システムでテストしてみた結果、Doltは絶対的な安全性が求められるステージング環境において救世主となることが分かりました。

クイックスタート:5分で学ぶDoltの基本

Doltは単一のバイナリファイルで構成されているため、インストールは非常に簡単です。

1. Doltのインストール

LinuxまたはmacOSなら、以下のコマンド1行で完了します:

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

2. データベースの初期化

git initと同じように、ディレクトリを作成して環境を初期化します:

mkdir project_db && cd project_db
dolt init

3. 基本的なSQL操作

追加のクライアントをインストールしなくても、ターミナルから直接SQLを実行できます:

dolt sql -q "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50))"
dolt sql -q "INSERT INTO users VALUES (1, 'Hoang IT')"

4. 変更のコミット

ここでデータの「スナップショット」を保存します:

dolt add .
dolt commit -m "usersテーブルを作成し、サンプルデータを追加"

ブランチとマージ:変更を分離して安心してテストする

実際のプロジェクトでは、テーブル構造의変更(スキーママイグレーション)には高いリスクが伴います。従来のMySQLでは、スクリプトを実行する前に祈るような気持ちになることもあったでしょう。しかし、Doltなら新しいブランチを作成して思い切り作業できます。

テスト用のブランチ作成

例えば、phone_numberカラムを追加する必要があるものの、そのスキーマが最適かどうかわからない場合を想定してみましょう:

dolt checkout -b feature/add-phone
dolt sql -q "ALTER TABLE users ADD COLUMN phone VARCHAR(15)"
dolt commit -a -m "個別ブランチにphoneカラムを追加"

mainブランチに戻れば、usersテーブルは元の綺麗な状態のままです。これにより、チームのデータを壊す心配をせずに新機能をテストできます。

スマートなデータマージ

確認して問題がなければ、変更をメインブランチに統合します:

dolt checkout main
dolt merge feature/add-phone

Doltはセルレベルでマージを処理します。二人が別々の行を更新した場合、Doltはコードをマージする時のようにスムーズにデータを統合し、コンフリクト(競合)を発生させません。

Dolt Diffによるデータ比較

dolt diff機能は、個人的に最も気に入っている機能です。高価なデータベース比較ツールを使う代わりに、次のように入力するだけです:

dolt diff

画面には、削除された行(赤)と新しく追加された行(緑)が明確に表示されます。2時間前に発生したデータバグをデバッグする際、この機能を使えば数秒で原因を特定できます。

本物のMySQLサーバーとして接続する

DoltはCLIだけで終わるものではありません。サーバーとして実行し、DBeaverやTablePlusなどのツールから接続することも可能です:

dolt sql-server --host 0.0.0.0 --port 3306

さらに、ストアドプロシージャを介して、SQLコマンドそのものでバージョン管理を行うこともできます:

-- SQLクライアントから直接コミット
CALL DOLT_COMMIT('-am', 'DBeaverからの更新');

実践的なアドバイス:パフォーマンスを忘れずに

私は商品カタログ管理システムにDoltを導入しましたが、そこで気づいた重要な注意点がいくつかあります:

  • パフォーマンス: Prolly Trees構造を通じて履歴を保存する必要があるため、Doltの書き込み(Write)速度はMySQLより2〜3倍遅くなります。ただし、読み取り(Read)速度には大きな差はありません。
  • ストレージ: 履歴を保持するため、データベースの容量は通常より早く膨らみます。ディスク容量を最適化するために、定期的にdolt gcを実行することを忘れないでください。
  • DoltHub: チームがリモートで作業している場合は、DoltHubを活用しましょう。これはデータ版のGitHubのようなもので、プッシュ/プルや変更のレビューを視覚的に行うことができます。

おわりに

Doltはデータベースに強力な「ロールバック(やり直し)」機能をもたらします。プロジェクトで頻繁に設定変更が発生する場合や、データセットのバージョン管理が必要なAI/ML分野において、Doltは外せない選択肢となるでしょう。ぜひインストールして、ソースコード管理のような安心感のあるデータベース運用を体験してみてください。

Share: