タイトルの通りRDBMSをGo言語で自作してみました。
はじめた動機
自分は業務ではNoSQL(DynamoDB)しか使ったことがなく、RDBMSは遊びで触ったことしかなかったです。 それもORMを使っていたため、特に仕組みを詳しく知ることなく扱っていました。 エンジニアとしてそれはまずいと思い、自作RDBMSを作って中身を知っていこうと考えました。
使ってみたい言語だったので実装はGo言語でやっています。
やったこと
最初は簡単な概要を知るために、データベースシステム自作入門を読んで簡単に実装してみました。 著者はセキュリティキャンプのデータベースゼミの講師もしている星野さんで、実際にセキュリティキャンプで使っていた本(?)です。
この本のおかげである程度DBMSの仕組みを理解することができました。
具体的な実装は、当初はカーネギーメロン大学の以下の資料と動画を見ながら進めました。
こちらの講義では BusTub という C++ で書かれたDBMSを、受講生が穴埋めで実装していく形式です。 かなり深い内容まであり、正直理解できない部分もかなりありました。
ディスクマネージャーとバッファプールマネージャーを実装して、メイン機能であるBTree+を実装しようと思ったのですが、難しく実装がしんどかったです。 なので、より簡単にできないかと調べていたところWEB+DB PRESS Vol.122に日本語で解説があるということで買ってみました。
上記の自作DBMS(Relly)はRustで実装されているのですが、何やっているのかコードを読み解きやすかったです。そのため、方針を変えてアクセスメソッド(BPlusTree)、クエリエクスキューター、セカンダリインデックスの実装はRellyを参考に実装しました。
現在の実装では、Rellyと同じく以下の機能は実装できていないです。
最後に
目的であったRDBMSの大まかな仕組みは理解することができたので良かったです。ただ調べれば調べるほどトランザクション周りは沼と感じます、、、笑