B木とB+木:データベースインデックスはなぜこんなに速いのか
二分探索木から始めよう。なぜノードがディスクページに一致する必要があるのか、B木がいかに木の高さを極限まで抑えるか、そしてRDBが最終的にB+木を選んだ理由(葉ノードの連結リストにより範囲クエリが繰り返しの上下走査から順次読み取りに変わる)、最後にノード分割アルゴリズムを解説する。
もっと見る internals
ホーム二分探索木から始めよう。なぜノードがディスクページに一致する必要があるのか、B木がいかに木の高さを極限まで抑えるか、そしてRDBが最終的にB+木を選んだ理由(葉ノードの連結リストにより範囲クエリが繰り返しの上下走査から順次読み取りに変わる)、最後にノード分割アルゴリズムを解説する。
単一ファイルで ACID をどう実現するか。ページと B+tree のレイアウト、ロールバックジャーナルから WAL への進化、並行アクセスを制御する 5 つのロック状態、性能を引き出す 4 つの PRAGMA 設定(WAL を有効化、synchronous を下げる、cache_size を増やす、mmap を有効化)を扱う。

IBM の ARIES から今日まで。先に順序ログを書いてからデータページを書き込む方式が停電に耐えられる理由、checkpoint と group commit がそれぞれ何を解決するのか、物理 WAL と論理 WAL の違い、よくある 2 つの誤用(長いトランザクションを閉じない、速度のために fsync を切る)を扱う。 commit
Postgresに手書きでテーブルアクセスメソッド(TAM)を書く連載第3回。3つの共有メモリ機構の選び方、DSAのポインタ間接参照がなぜシーケンシャルスキャンを4〜5倍遅くするのか、pinするのはセグメントかマッピングか、そして_PG_initとshmem_startup_hookの役割分担。