Skip to content

Goで自作DBMSを実装した

2023/09/02

Go

目次

目次

  1. はじめに
  2. 実装
  3. 書籍について
    1. 良かった点
      1. 論理から実装まで丁寧に書かれている
      2. 標準ライブラリのみで書かれておりシンプル
    2. イマイチな点
      1. ナイーブな実装になっている
      2. テストケースが少ない
  4. おわりに

はじめに

Database Design and Implementation という本を読みつつ、Go で自作 DBMS を実装しました。

以前、大学の講義で DBMS を実装する YouTube の動画を見つけて、興味が合ったのですが、論理的な部分を理解出来ず挫折してしまったので、改めて本を読みつつ進めました。

実装

書籍では Java で書かれているのですが、あまり Java に詳しくないことと、最近 Go のモチベーションが高かったので Go で実装しました。

DB への接続に書籍では JDBC(Java Database Connectivity)を用いているのですが、Go では標準ライブラリである database/sql を利用できます。

クエリを実行するだけであれば、 database/sql のインターフェイスがシンプルなので雰囲気で実装できます。

リポジトリはこちらです。

https://github.com/kawa1214/simple-db

書籍について

良かった点

論理から実装まで丁寧に書かれている

トランザクション分離や RAID から、ディスクへの書き込みの仕組みまで解説しており、実装方針も複数検討した上で、なぜその方針を採用したのかも解説されています。

理論と実装が 7:3 くらいのバランスになっているので、どちらかに偏ることなく読み進めることが出来ます。

標準ライブラリのみで書かれておりシンプル

標準ライブラリのみのため理解しつつ実装することが出来ます。

Go で書き直していたときに感じたこととしては、Java の Parser がとても便利で単純に置き換えれなかったぐらいで、他はほぼ同じように進めることが出来ました。

イマイチな点

ナイーブな実装になっている

解説のために全体的にナイーブな実装になっています。読み進めていく上で理解はしやすいのですが、前に書き直していた過疎の理解が難しくなることがあり、少しツライです。

Go で再実装する上での問題ですが、循環参照があり、インターフェイスを切るか、構造体をどこに定義しなおすか考える必要があります。

テストケースが少ない

テストはあるのですが、何のテストか理解するのが難しいケースが多く、自分でを考えながら実装する必要がありました。

こちらについては、自分で考えることで、理解が深まったので、あまり問題ではないかもしれません。

テストを最初から書き直しつつ設計を考えているのですが、進捗 5% くらいで止まっています。一度満足してしまうと再開するのにエネルギーが必要なので、なかなか進まないです。

おわりに

フルスクラッチなためブラックボックス感がなく、自作 DBMS 初学者にとってはとても良い本でした。

Amazon で買うと 9000 円ぐらいするのですが、Springer でセールが定期的にあるので安くなったタイミングで購入するのがオススメです。私が買ったときは 2200 円くらいで購入できました。

課題が各章にあるのですが、気になったところ以外手を付けられていないのでいつかやりたい。