Kotlinで自作DBMS
はじめに
データベースの勉強のためにSimpleDB というJavaで書かれたデータベースの実装が書かれている書籍を参考にKotlinで実装を行いました。
どんなものができるか
IntelliJを用いてKotlinを実行してます。コードはこちらのGitHub にあります。
データベース作成
kotlin/simpledb/tools/CreateStudentDB.ktをIntelliJから実行すると、指定したディレクトリがない場合にデータベースの作成、テーブルの作成、データのinsertを行います。
データベース起動
kotlin/simpledb/server/StartServer.ktをIntelliJから実行すると、データベースへの接続を求められるので、接続先を入力します。
作成済みのstudentテーブルをselectします。
whereを用いた条件、他のテーブルとのjoinも行えます。
本の概要
書籍の内容としては全部で15章となっており目次は下記となっています。
章番号 | タイトル |
---|---|
1 | Database Systems |
2 | JDBC |
3 | Disk and File Management |
4 | Memory Management |
5 | Transaction Management |
6 | Record Management |
7 | Metadata Management |
8 | Query Processing |
9 | Parsing |
10 | Planning |
11 | JDBC interfaces |
12 | Indexing |
13 | Materialization and Sorting |
14 | Effective Buffer Utilization |
15 | Query Optimization |
それぞれの章でタイトルの内容の解説が書いてあるだけでなく、FileManager、BufferManager、Plan、Parserなどのクラスの実装が載っているため実際にコードにするとどうなるかを見ながらデータベースの理論について学ぶことができます。
最後まで実装を終えると以下のような内容が実行できるようになります。
- select F1, F2 from T1 where F2 = Value
- select F1, F2 from T1, T2 where F3=F4
- insert into T(F1, F2, F3) values ('a', 'b', 'c')
- delete from T where F1=F2
- update T set F1='a' where F1=F2
- create table T(F1 int, F2 varchar(9))
- create view V as select F1, F2 from T1, T2 where F3=F4
- create index I on T(F)
まとめ
データベースについてどういった基本的な処理が後ろで動いているか想像ができるようになるという点もそうですが、単純に自分で書いたコードでテーブル、インデックスが作れたり、テーブル同士のJOINまでできるのには感動しました。
書籍の中で基本的な実装に加えて、各章の最後には拡張課題が載っているのですが今回はそこには取り組んでいないので、また書籍を見返しつつ拡張課題にも取り組めたらなと思います。
Discussion