まえがき
まずは、RDBMSを実装するまでの、実装戦略(?)について説明します。実装戦略としては小さいシステムから徐々に機能拡張して大きくしていこう、という話をしました。具体的には3段階に分けてステップアップしていく予定です。ホップ・ステップ・ジャンプ戦略です。
- シンプルデータベース
- トランザクションサポートデータベース
- リレーショナルデータベース
シンプルデータベース
シンプルデータベースは、データをインメモリで保持するキーバリューストアである。単発のCRUD処理ができる。少しイレギュラーな実装かもしれないが、データへのアクセスはDB側で振り出すオブジェクトIDのみでしか許されない。そのため、各カラムに対して、カラムの値からオブジェクトIDへのマップを保持する。シンプルデータベースでは、
- テーブルを作成する
- データを挿入する
- データを取得する
- データを更新する
- データを削除する
- テーブルを削除する
といった操作ができれば十分。
(初めて触るErlangと格闘するためのフェーズでもある。)
トランザクションサポートデータベース
トランザクションサポートデータベースはその名の通り、トランザクションの機能をサポートする。具体的には、複数のSQL文をAtomicに実行できる。もし、障害が発生したら、その直前までにコミットされたデータは守られているし、コミットされていないトランザクションはロールバックする、などなど。いわゆるACID特性をサポートする。データの永続化、ログ書き込みなんかが必要になる予定。巨大システムにおいてRDBMSを使う大きな理由は、トランザクション機能をアプリではなくDBにやらせたいから、だと思うので、トランザクションサポートはRDBMSの中核機能と考えられる。ここをどう実装するかが一番面白いと思う。(2日目時点で実装方針すら考えられておらず。。助けて。。。)
リレーショナルデータベース
最終段階はリレーショナルデータベースって言えるように、ユーザーとかスキーマとかビューとか、テーブルジョインの効率化とか、少し複雑なSQLでも実行できるとか、キーの制約とか、カラムドメインの制約とか、あとはマイRDBMSのための特別な機能を盛り込む予定。(無理予定)
まとめ
思考段階での実装戦略について説明しました。段階踏んでいかないと迷子になると思ったので笑
果たしてこの戦略でうまくいく保証かわかりませんが、それもお楽しみです!