まえがき
それではさっそくシンプルデータベースの実装に入ります。目標は以下の機能を実装することです。
- テーブルを作成する
- データを挿入する
- データを取得する
- データを更新する
- データを削除する
- テーブルを削除する
テーブルデータの保持形式
テーブルデータをシステム内部でどのように保持するか。今回はデータが挿入されたら少し加工してから保持する。挿入性能は落ちるが、検索性能が上がるはず。テーブルにデータを挿入した時の内部の動作は↓みたいになる。
- データが挿入される
- オブジェクトIDを振り出す
- オブジェクトIDをキー、挿入されたデータをバリューとして保存する(キーバリューストア)
- 各カラムの値をキー、オブジェクトIDをバリューとして保存する(インデックスを張る)
- データ挿入完了
3番と4番が内部にデータを保存する操作になる。例として、挿入したいデータは果物の値段で、[りんご,100円]、[みかん,80円]、[ぶどう,300円]の3レコードとする。
まず、これらのデータはそれぞれオブジェクトIDを振り出して、オブジェクトIDをキー、果物の値段をバリューとするキーバリューストアに保存する。(3番の操作)
次に、各カラムごとにカラムの値をキー、オブジェクトIDをバリューとするカラムインデックスを作成する。(4番の操作)
お分かりとは思いますが、検索するときはカラムインデックスからオブジェクトIDを取得して、キーバリューストアにデータを探しにいく、という流れになります。
まとめ
挿入されたデータはオブジェクトIDによるキーバリューストアに格納され、各カラムに張られているインデックスから、オブジェクトIDを特定してアクセスするという構成としてみました。
今回は挿入と検索のところだけ説明しました。