67
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ひとりRDBMS実装Advent Calendar 2019

Day 1

【1日目】一人でRDBMSを実装 -まえがき-

Posted at

まえがき

ふと思い立ち、1人でRDBMSを実装することにしました。RDBMS(Relational DataBase Management System)、つまりOracleとかPostgreSQLとかそういったのを1人で作ってみましょうという企画です。
やりたいことは2つ

  1. 誰でもRDBMSを実装できるように、実装部分を細かく説明すること
  2. マイRDBMSに何か特別な機能を盛り込むこと

誰でもRDBMSを実装できるように

みなさんは「OS自作入門」、「CPUの創りかた」など、難しそうでとっつきにくいものを簡単な機能に分解し、しかも自分で作れるようにしてくれるとても親切な本を読んだことがありますか。しかし残念なことに、RDBMSの作り方を教えてくれる本はなさそうです。無いものは作りましょう。
ここでは、PostgreSQLのソースをひとつひとつ見せながら、ここはこういうことをしている、、、という解説をするつもりはありません。
0からRDBMSと言えるものを作り上げる、その道筋を見せたいのです。初めは小さいシステムを作り、少しずつ拡張していく、そしたらそれっぽいものができあがった。それが理想です。

マイRDBMSに何か特別な機能を盛り込むこと

せっかくRDBMSを自作するならなにか特別な機能を盛り込みたいですね。ここはまだ決定したわけでは無いですが、クエリ実行を途中で停止、途中から再開できる機能。もしくは、トランザクションのタイムアウトを設定できる機能など。実装できるかはわかりませんが、そんな機能を作ってみようと思っています。

実装したいRDBMSの機能

さて、私が作るRDBMSに実装しようと思っている機能のイメージです。フル機能のRDBではなく、RDBと言えるギリギリのところまでとことん機能を削ぎ落とそうと思っています。初めの実装段階では投入できるデータは整数のみ、など。

  • 単純なSQLクエリ
    • INSERT
    • SELECT
    • UPDATE
    • DELETE
    • CREATE TABLE
    • TRUNCATE TABLE
    • DROP TABLE
  • テーブルの結合操作
    • LEFT JOIN
    • INNER JOIN
  • トランザクション
    • ACID特性
    • 障害耐性
  • テーブルのビュー
  • ユーザーの概念
  • 認証・認可

Erlang

何を思ったか、Erlangで実装しようと思っています。今まで一回も触ったことありません。RDBを実装できて、Erlangも書けるようになったら一石二鳥だなと思ったのです。。Erlangの書き方がわからない時は誰か助けてください笑
こう書いた方がいいよーなど、随時ご指摘ください。お願いします。
連載の中ではErlangの文法などについてはあまり触れない方針ですが、意味不明すぎるところは解説するかもです。

まとめ

「正直、RDBMS実装するなんてそんな大変じゃないんじゃね」っていう気分で始めてます。途中で頓挫する可能性もありますし、バグだらけのゴミプログラムになるかもしれません。それでも、小さいプログラムから少しずつ機能を付け足していけばそれっぽいものができると思っています。こうした取り組みは自分や誰かのRDBの理解にも繋がるし、NoSQLなど新しい世界への理解も広がる気がしています。
しばしの間、お付き合いください!

67
33
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?