- 純粋なGoで書かれたMySQL互換データベースエンジン
- データソースに依存しないSQLエンジンであり、MySQLの構文とプロトコルを使って提供されたデータソースに対してクエリを実行
- シンプルなインメモリデータベース実装が含まれており、独自のバックエンドを実装して任意のデータソースをクエリできる
互換性
- 特定の制限事項を除けば、go-mysql-serverはMySQLの代替として利用可能
- MySQLで動作するクライアントライブラリ、ツール、クエリ、SQL構文、SQL関数などは、go-mysql-serverでも動作するはず
- 機能差異を見つけた場合は、Issueの報告を歓迎
プロジェクトの範囲
- データソースをクエリするためのSQLサーバーおよびエンジン
- テスト用途に適したインメモリデータベースバックエンド実装
- 独自データソースをクエリする新しいバックエンド実装に利用できるインターフェース
- いくつかの注意点を踏まえ、完全なデータベース実装を使えばMySQLデータベースの代替にもなり得る
go-mysql-serverの主なユースケース:
- 組み込みの
memoryデータベース実装を使い、Goのテスト環境でMySQLの代わりに利用する
- いくつかのインターフェースを実装し、任意のデータソースにSQLクエリでアクセスできるようにする
インメモリテストサーバーの利用
- インメモリテストサーバーは、テストにおいて実際のMySQLサーバーを置き換えられる
- 提供されているサンプルコードを使ってサーバーを起動できる
- サーバー起動後は、MySQLクライアントやGo MySQLコネクタ、
mysqlシェルなどで接続可能
インメモリデータベース実装の制限事項
- 同梱されているインメモリデータベース実装は、テスト用途での利用を想定したもの
- 既知の制限事項:
- スレッドセーフではない。同時実行の問題を避けるには、DDLとDML文を単一のgoroutineに制限する必要がある
- トランザクションをサポートしない。
START TRANSACTION、ROLLBACK、COMMIT などの文は動作しない
- 非効率なインデックス実装。インデックス参照とJOINは、内部テーブルに対してフルテーブルスキャンを実行する
カスタムバックエンドの実装
- いくつかのインターフェースを実装することで、独自データソースをクエリするバックエンドを作成できる
- 詳細な手順はバックエンドガイドを参照
go-mysql-serverで動作するプロジェクト
- dolt
- gitbase(開発終了)
- go-mysql-serverでデータベースバックエンドを構築しているなら知らせてほしい
ライセンス
GN⁺の見解
- go-mysql-serverは、Goで書かれた軽量なMySQL互換データベースエンジンであり、テスト環境でMySQLを置き換えたり、独自データソースをSQLでクエリしたりする用途に有用そう
- MySQL互換性を目指しているため、既存のMySQLベースのアプリケーションを大きく修正せずに導入できると期待される
- ただし、まだ実験的なプロジェクトであり、特にインメモリ実装はテスト用途にとどまるため、本番適用時には性能と安定性の面で注意が必要そう
- バックエンド開発者にとっては、インターフェースを自ら実装して任意のデータソースを接続できる点が魅力になりそう。Doltのような実際のプロジェクト事例を参考にするとよい
- 類似のMySQL互換データベースとしては、TiDB、CockroachDB などがある。go-mysql-serverはこれらと異なり、バックエンドを自由に実装できる利点がある一方で、バックエンド開発に追加コストがかかるという欠点もある
1件のコメント
Hacker Newsの意見