脱RDBMS超初心者
RDBMSのアーキテクチャ
RDBMSとは、Relational DataBase Management Systemの略であり、SQLを用いてDBを管理するようなものを指す
アーキテクチャはユーザに近い方から以下のようになっている
- 構文解析
- 実行計画
- クエリエクスキュータ
- アクセスメソッド
- バッファプールマネジャ
- ディスクマネージャ
1.構文解析
2.実行計画
「どのようなクエリを発行するか」といった、実行計画を立てる。
EXPLAIN のコマンドを打ち込むことで確認できる
EXPLAIN SELECT * FROM users;
3.クエリエクスキュータ
実行計画をクエリエクスキュータで実行する
この際にIndexが貼られていたらそれに似合った挿入方法や検索方法にする
セカンダリインデックス(PK以外におけるもので高速検索したいもの)があれば、ここで指定しておく。基本的にIndexによる高速スキャンは、key・valueのペアによって保存されたものに対するスキャンで行われている。
4.アクセスメソッド
どのような方法でデータ構造にアクセスするかのアルゴリズムの指定
RDBMSでは、B-Tree(B+Tree)というものが使われる
B+Tree
- 平衡N分木のデータ構造。N分木は2分木をNに拡張したもの。
- 値はkey・valueのペアによって保存されている
- keyのペアによってソートされたものをN本に分割する
- valueに対応しそうなものが複数ありそうなら、うまく結合して1つにする
- RDBMSのページ対応と非常に相性が良い
5.バッファプールマネジャ
ディスクアクセスの遅さを隠蔽するための処理
通常はファイルシステムが必要そうな情報を判断してメモリ上にキャッシュを残すが、それを独自仕様でやるための処理階層
どの情報をキャッシュとして残すかのアルゴリズムとしては、Clock-sweepなどがある(PostgreSQL等で採用)
6.ディスクマネージャ
実際にディスクとの読み書きを行う階層