5
2

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 3

【3日目】シンプルデータベース実装①

Last updated at Posted at 2019-12-03

まえがき

それではさっそくシンプルデータベースの実装に入ります。目標は以下の機能を実装することです。

  • テーブルを作成する
  • データを挿入する
  • データを取得する
  • データを更新する
  • データを削除する
  • テーブルを削除する

テーブルデータの保持形式

テーブルデータをシステム内部でどのように保持するか。今回はデータが挿入されたら少し加工してから保持する。挿入性能は落ちるが、検索性能が上がるはず。テーブルにデータを挿入した時の内部の動作は↓みたいになる。

  1. データが挿入される
  2. オブジェクトIDを振り出す
  3. オブジェクトIDをキー、挿入されたデータをバリューとして保存する(キーバリューストア)
  4. 各カラムの値をキー、オブジェクトIDをバリューとして保存する(インデックスを張る)
  5. データ挿入完了

3番と4番が内部にデータを保存する操作になる。例として、挿入したいデータは果物の値段で、[りんご,100円]、[みかん,80円]、[ぶどう,300円]の3レコードとする。

image.png

まず、これらのデータはそれぞれオブジェクトIDを振り出して、オブジェクトIDをキー、果物の値段をバリューとするキーバリューストアに保存する。(3番の操作)
image.png

次に、各カラムごとにカラムの値をキー、オブジェクトIDをバリューとするカラムインデックスを作成する。(4番の操作)
image.png
image.png

お分かりとは思いますが、検索するときはカラムインデックスからオブジェクトIDを取得して、キーバリューストアにデータを探しにいく、という流れになります。

まとめ

挿入されたデータはオブジェクトIDによるキーバリューストアに格納され、各カラムに張られているインデックスから、オブジェクトIDを特定してアクセスするという構成としてみました。
今回は挿入と検索のところだけ説明しました。

5
2
0

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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?