こつつみ

コツコツ積み上げる

自作RDBMSをやってみた

タイトルの通りRDBMSをGo言語で自作してみました。

GitHub - ue-sho/ohako: 自作DBMS

はじめた動機

自分は業務ではNoSQL(DynamoDB)しか使ったことがなく、RDBMSは遊びで触ったことしかなかったです。 それもORMを使っていたため、特に仕組みを詳しく知ることなく扱っていました。 エンジニアとしてそれはまずいと思い、自作RDBMSを作って中身を知っていこうと考えました。

使ってみたい言語だったので実装はGo言語でやっています。

やったこと

最初は簡単な概要を知るために、データベースシステム自作入門を読んで簡単に実装してみました。 著者はセキュリティキャンプのデータベースゼミの講師もしている星野さんで、実際にセキュリティキャンプで使っていた本(?)です。

github.com

この本のおかげである程度DBMSの仕組みを理解することができました。

具体的な実装は、当初はカーネギーメロン大学の以下の資料と動画を見ながら進めました。

15445.courses.cs.cmu.edu

こちらの講義では BusTub という C++ で書かれたDBMSを、受講生が穴埋めで実装していく形式です。 かなり深い内容まであり、正直理解できない部分もかなりありました。

ディスクマネージャーとバッファプールマネージャーを実装して、メイン機能であるBTree+を実装しようと思ったのですが、難しく実装がしんどかったです。 なので、より簡単にできないかと調べていたところWEB+DB PRESS Vol.122に日本語で解説があるということで買ってみました。

gihyo.jp

上記の自作DBMS(Relly)はRustで実装されているのですが、何やっているのかコードを読み解きやすかったです。そのため、方針を変えてアクセスメソッド(BPlusTree)、クエリエクスキューター、セカンダリインデックスの実装はRellyを参考に実装しました。

現在の実装では、Rellyと同じく以下の機能は実装できていないです。

最後に

目的であったRDBMSの大まかな仕組みは理解することができたので良かったです。ただ調べれば調べるほどトランザクション周りは沼と感じます、、、笑

CMUの講義や以下の資料とかもあるので、SQLで操作したり、トランザクションの実装もおこなっていきたいなと思います。

github.com