Neunomizuの日記

俺だけが俺だけじゃない

# CMU DB 3. Database Storage I

tags: CMU DB

今回からDatabaseっぽい内容になってくるみたいです(目次を見た感想)

DJおる...

授業

データベースの概要は分かったので, どうやってデータベースを管理するフトウェアをビルドするかを学ぶ

色んなレイヤーがある. 今回は"Disk Manager"について扱う

Disk-Oriented

DBMSではnon-valatileなストレージを扱う

  • non-volatile
    • sequential access
    • HDD, Network Starage, SSD
    • Slower, Larger, Cheaper
  • volatile
    • random access
    • CPU Registers, CPU Caches, DRAM
    • Faster, Smaller, Expensive

GOALS

  • DBMSがメモリよりも大きいデータベースを扱えるようにする
  • ディスクの読み書きのコストは高いので, 大きなストールとパフォーマンスの低下を避けるようにする

OSとの違い

mmapでメモリマップが出来る(OSの機能). ディスクから持ってきたいデータを仮想記憶と物理メモリに紐付ける.

スレッドを複数立ててmmapファイルにアクセスすればページストールを隠せるように思える. しかしROMアクセスならば上手く行くけど複数の書き込みがある時に対応できない.

解決策は以下の通り

  • `madvise
    • あるページを読むもうとしているとOSに伝える
  • mlock
    • メモリ範囲がページアウトできないとOSに伝える
  • msync
    • メモリ範囲をディスクへフラッシュアウトするように伝える

OSでは足りないのでDBMSはスケジューリングやスレッド・プロセス・ダーティーページや事前読み込みなどを良い感じにする

File Storage

DBMSはディスク上のファイルとしてデータベースを管理する.OSはファイルの中身までは知らない.

ストレージマネジャーはデータベースのファイルに対して責任を持つ. ページの局所性を高めるために読み書きのためにスケジューリングをする. ファイルをページの集まりとして管理する.

データベースページは固定サイズのデータのブロック. 色々なデータを保持できる. 多くのシステはページのタイプを混ぜない.

それぞれのページには固有の識別子が与えられる.

DBMSにおけることなるページの概念

  • ハードウェア...4KB
  • OS...4KB
  • データベース...512B-15KB

DBMS

  • Heap file organization
  • sequential / sorted file organization
  • hashing filie organization

という方法で扱っている(DBMSによって異なる)

Page Layout

全てのページがコンテンツに関するメタデータのヘッダーを持っている.

ページの中に入っているデータを管理する方法を理解するのに

  • tuple-oriented
  • log-structured

という2つのアプローチがある.

  • slotted pages(tuple-oriented)
    • スロット配列にtupleの開始位置オフセットを格納する
    • スロット配列はヘッダーから伸びて, tupleはページの最後から伸びる
  • log-structured file organization
    • どのようにデータベースが変更されたかのログレコードを付け加える
    • レコードを読むために, DBMSはログを後ろから読み込み, 必要とするものを見つけるためにtupleを再作成する

Tuple Layout

バイトの並びがtuple. DBMSの役割はこれらのバイトを属性のタイプと値に解釈すること.

ヘッダーはメタデータを持っている

非正規化(pre join)をすることでI/Oを減らすが, 更新することをよりコストがかかるようにする可能性がある. 古い考え方.

結論

データベースはページで管理されている.

異なる方法でページは追跡される.

異なる方法でページは保存されている.

異なる方法でtupleは保存されている.

感想

OSとMBDSが関連していることが分かって面白かった. ファイルストレージを色々するとなるとOSの機能を使うのかと思ったけど, OSには頼らずにやるのね(実装が大変そう).