見出し画像

データベースを作りたくてCMU Intro to Database Systemを見ている話


ふと自分でデータベースを作ってみたいと思い作り方を調べていたところ、カーネギーメロン大学(CMU)のAndy Pavlo先生がやっているDatabase Systemsという授業に行き着いたので、見てみることにした

なぜ作ってみたいと思ったかというと、DuckDBやNeon、TiDBなど新興のデータベースの素晴らしさを眼にする機会が増えて、KenさんたちとLondon Tech TalkでDesigning Database Intensive Applicationを読んだ身としても、そこになにかコミットできたらかっこいいなとふと思ったからである。いわゆる憧れというものだ。Shunpocoさんがオブジェクトストレージの開発に行き着いたというエピソードを聞いたことも個人的にはかなり刺激になっている。また、勤めている会社の仕事でもここを深めることが自分の強みになるかもしれないと感じたからである。むしろSRE × 「なにか」に秀でていないと今後のキャリアが難しいとも思う。

とはいえ、なにかコミットしようと思ってDuckDBなどのGitHubを見てみても、できることがなにも思いつかない。考えてみればデータベースを作ったことなんてないので当たり前である。どうしたものかと考えていたところRedditの同じようなことを質問している人のスレッドで、冒頭で述べたAndy先生の授業が紹介されていたので、授業を見ながらまずは自分で作ってみようという気になった。ちなみに元同僚のTeppeiがGeorgia Techの大学院に通ってめきめきと力をつけていることも大学の授業をじっくりと見てみる後押しになった。

当初はRustでOLAPデータベースを作るAdvanced Database Systems (15-721)を受けようと思ったのだが、少し見てみてまだレベルが高いと感じたので、Intro版のDatabase Systems (15-445/645)を見ることにした。

無限にある授業の候補の中からなぜこの授業を選んだかというと、先生がかっこいいしまったく退屈しなそうだと思ったからである。Youtubeをみるとわかるが、大学の授業なのにPVがあって、しかもなんと授業に専任のDJをつけて冒頭と最後に音楽をかけているのも楽しい。この先生の授業はCMUでも受講が難しい人気授業とのことで、それがオンラインで見れるのであれば見ない手はない。各学期の最新の授業がネットにアップされるので、リアルタイム感を味わえるのもいい。宿題もできるだけやって実際に受けた学生と同じような体験ができたら嬉しい。

今年中の目標としてはIntroを見終えて、Advancedに入ってデータベースを作り始めるところまで行けたらいいなと思っている。子育てもあるのでかなりスローではあるが、3月くらいから隙間時間を見つけて動画を見始めていて、ようやくIntroの#3まで見終わった。

これまで見た内容簡単に整理すると、#1 は音質が悪いので途中まで見て飛ばしてしまったが、
#2はSQLの文法の話で、知っているものも多かったが使いこなせていないものも多く勉強になった。
#3 はStorage Part1で、なぜDBMSがメモリOSに依存すべきでないのか、データベースのレコード(Tuple)がPageにどのように保存されるか、Slotted PagesでのCompactionの実行(PostgresのVACUUM)といった内容だった。

各回でSQLiteやPostgres, Oracle、DuckDBなど異なるのデータベースでSQLを実行してみて方言の違いや動作の違いを説明してくれるのも面白い。

長い道のりになりそうだが、Advancedに進んでRustでデータベースを実装することを夢見てじっくりやっていきたい。

もし興味があって一緒に進めていきたいという方がいたら教えてください!

この記事が気に入ったらサポートをしてみませんか?