Diary

Diary

日々学んだことをアウトプットする場として初めてみました

脱RDBMS超初心者

RDBMS超初心者

  • 想定する読者
    • 簡単な簡単なクエリ文が書けるようになった人
    • RDBMSの中身を知ってみたい人
  • 目標
    • RDBMSが内部で行なっている処理がなんとなく掴める

RDBMSアーキテクチャ

  • RDBMSとは、Relational DataBase Management Systemの略であり、SQLを用いてDBを管理するようなものを指す

  • アーキテクチャはユーザに近い方から以下のようになっている

    1. 構文解析
    2. 実行計画
    3. クエリエクスキュータ
    4. アクセスメソッド
    5. バッファプールマネジャ
    6. ディスクマネージャ

1.構文解析

SQLのクエリ文をパースし、抽象構文木にする

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.ディスクマネージャ

実際にディスクとの読み書きを行う階層