# CMU DB 3. Database Storage I
tags: CMU DB
今回からDatabaseっぽい内容になってくるみたいです(目次を見た感想)
DJおる...
授業
データベースの概要は分かったので, どうやってデータベースを管理するフトウェアをビルドするかを学ぶ
色んなレイヤーがある. 今回は"Disk Manager"について扱う
Disk-Oriented
DBMSではnon-valatileなストレージを扱う
- non-volatile
- volatile
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
Tuple Layout
バイトの並びがtuple. DBMSの役割はこれらのバイトを属性のタイプと値に解釈すること.
ヘッダーはメタデータを持っている
非正規化(pre join)をすることでI/Oを減らすが, 更新することをよりコストがかかるようにする可能性がある. 古い考え方.
結論
データベースはページで管理されている.
異なる方法でページは追跡される.
異なる方法でページは保存されている.
異なる方法でtupleは保存されている.
感想
OSとMBDSが関連していることが分かって面白かった. ファイルストレージを色々するとなるとOSの機能を使うのかと思ったけど, OSには頼らずにやるのね(実装が大変そう).