Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

まえがき

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

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

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

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

  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を特定してアクセスするという構成としてみました。
今回は挿入と検索のところだけ説明しました。

Shoyu_N
読書系プログラマ。 私的時間で読んだ本について、「一人読書」というタグで記事を投稿中。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away