まえがき
さて、今回からはトランザクションをサポートする機能を持ったデータベースを実装していきます。
正直なところ、実装と記事投稿を同時並行で進めているため、あとから大きく実装方針を変えたりすることがあるかもしれません。最終的に25日間の記事を読めば、スムーズにRDBMSを実装できるようにしたいと思っています。
Basically Available, Soft-state and Eventual consistency.
トランザクションサポートデータベースで実装したい機能は下記の想定です。
- ACID特性
- 障害耐性
実装戦略
まずいくつか制約を付けます。4つのDML(INSERT, SELECT, UPDATE, DELETE文)は必ずトランザクションの中でのみ実行できるとします。そのため、BEGINで始まりCOMMITまたはROLLBACKで終わる下記のようなトランザクションが想定されます。
BEGIN→INSERT→SELECT→UPDATE→COMMIT
次に、トランザクションは同時には実行できないものとします。複数のクライアントがトランザクションを開始しようとした場合、後からトランザクションを開始したクライアントは、先に開始されているトランザクションが終了するまで待機させられます。そのため実行されるトランザクションは常に高々一本のみです。複数トランザクションの同時実行はAC後半の方で実装予定です。
さて、これらの制約の中で、どのようにトランザクションをサポートするプログラムを実装していくか。今の想定では、ACID特性のそれぞれについて実装していく予定です。
その次に、障害発生時の回復動作について実装していきます。
最後に複数トランザクションの同時実行制御などについて実装する予定です。
まとめ
トランザクションサポートデータベースの実装がおそらく一番難しく、一番面白いところだと思います。様々な方法を試しつつ、実装していけたらと思います。