データベース
データベース
PostgreSQL・MySQL・MongoDB・Redis などの製品比較から、SQL・インデックス・トランザクションといった考え方まで。まず TL;DR で。
コレクション 01
リレーショナル(RDB)(5)
Oracle Database
リレーショナル(RDB)
商用 RDB の代表格。大規模・高信頼な基幹システムで長年の実績を持ち、RAC によるクラスタや高度な機能を備える。エンタープライズで根強い。
Microsoft SQL Server
リレーショナル(RDB)
Microsoft の商用 RDB。Windows/.NET との統合や BI(SSIS/SSRS/SSAS)が強く、GUI 管理(SSMS)が充実。企業の業務システムで広く使われる。
MySQL
リレーショナル(RDB)
世界で最も普及した OSS リレーショナル DB。Web アプリ(LAMP)の定番で、速くて扱いやすく情報も豊富。
PostgreSQL
リレーショナル(RDB)
標準準拠で高機能な OSS リレーショナル DB。拡張性・信頼性が高く、複雑なクエリや JSON、全文検索、地理空間まで幅広く扱える。
SQLite
組込み RDB(ファイル)
サーバ不要で 1 ファイルに収まる組込み RDB。ゼロ設定で軽量。アプリ・モバイル・テストに最適で、世界で最も使われている DB エンジン。
| 項目 | Oracle Database | Microsoft SQL Server | MySQL | PostgreSQL | SQLite |
|---|---|---|---|---|---|
| 種別 | リレーショナル(RDB) | リレーショナル(RDB) | リレーショナル(RDB) | リレーショナル(RDB) | 組込み RDB(ファイル) |
| クエリ | SQL / PL-SQL | T-SQL | SQL | SQL | SQL |
| ライセンス | 商用(プロプライエタリ) | 商用(無償版 Express あり) | オープンソース(GPL)+ 商用 | オープンソース(PostgreSQL License) | パブリックドメイン |
| 一番の強み | 大規模・高信頼で実績豊富 | Windows / .NET と高度に統合 | 普及度 No.1・情報が豊富 | 標準 SQL 準拠で高機能 | サーバ不要・1 ファイルで完結 |
| 主な用途 | 基幹・ミッションクリティカル | 企業の業務システム | Web アプリのバックエンド | 汎用の業務 DB | モバイルアプリ(iOS / Android) |
コレクション 02
NoSQL(4)
Apache Cassandra
ワイドカラム
複数ノードに分散して大量の書き込みを捌くワイドカラム型 NoSQL。マスターレスで単一障害点がなく、線形にスケールする。
MongoDB
ドキュメント
JSON ライクなドキュメントを格納する NoSQL。スキーマが柔軟で開発が速く、シャーディングで水平にスケールしやすい。
Redis
キーバリュー(インメモリ)
メモリ上で動く超高速なキーバリューストア。キャッシュ・セッション・キュー・ランキングなど、速さが要る用途に広く使われる。
Elasticsearch
検索エンジン(全文検索)
全文検索と分析に特化した分散検索エンジン。サイト内検索やログ分析(ELK)の定番で、大量データを高速に検索・集計する。
| 項目 | Apache Cassandra | MongoDB | Redis | Elasticsearch |
|---|---|---|---|---|
| 種別 | ワイドカラム | ドキュメント | キーバリュー(インメモリ) | 検索エンジン(全文検索) |
| クエリ | CQL | 独自(MQL / 集約パイプライン) | コマンド | Query DSL(JSON) |
| ライセンス | オープンソース(Apache 2.0) | SSPL(ソース公開・商用) | オープンソース(一部 RSAL/SSPL) | Elastic License / SSPL |
| 一番の強み | 書き込みに非常に強い | スキーマ柔軟で開発が速い | インメモリで超高速(μs〜ms) | 高速な全文検索・あいまい検索 |
| 主な用途 | 大量書き込み(IoT / ログ / 時系列) | スキーマが変わるアプリ | キャッシュ / セッション | サイト内検索 / 全文検索 |
操作して学ぶ
データベースの系譜
1970年のCoddの関係モデルとSystem Rから、Oracle・PostgreSQL・MySQL、 Dynamo/Bigtable論文が生んだNoSQL、Spannerに連なるNewSQLまで。 実線は直接の派生・後継、 破線は論文・設計思想の影響。 ドラッグとズームで探検し、気になるDBをクリックすると解説が出ます。
ノードをクリックすると、そのOSの解説と関連記事がここに表示されます。
操作して学ぶ
SQLプレイグラウンド — ブラウザで本物のSQLiteを実行
サンプルのEC表に対してJOIN・GROUP BY・集計を手を動かして体験。インストール不要・送信なし。
操作して学ぶ
B-Tree vs LSM-Tree — 書き込み対決
同じキー列を両構造に流し、ランダムI/O+分割 と 追記+コンパクションの違いを可視化。なぜNoSQLは書き込みが速いか。
操作して学ぶ
CAP定理可視化 — 分断時にCとAどちらを犠牲にするか
3ノードで実際に分断を発生させ、CP/APの挙動差をGET/PUTで体感。結果整合性の収束まで確認できる。
操作して学ぶ
WAL可視化 — 書き込み・コミット・クラッシュ・リカバリ
メモリとディスクのページ状態を並べて表示。実際にクラッシュさせ、解析→redo→undoのリカバリをステップ再生で確認できる。
操作して学ぶ
デッドロック検出可視化 — 待機-forグラフの閉路
ロック要求を実際に発生させ、待機-forグラフに閉路ができた瞬間デッドロックが確定する様子を確認。犠牲者アボートで解消も試せる。
操作して学ぶ
Sagaパターン可視化 — コレオグラフィ/オーケストレーション
4ステップの分散トランザクションを2方式で比較。失敗させると補償が逆順に実行される様子を確認できる。
解説記事
考え方・概念
SQL・インデックス・トランザクションなど、製品をまたいで効く DB の土台。まず TL;DR で。
2相コミット(2PC)と分散トランザクション
複数DBにまたがる更新を、全部成功か全部取消にそろえる仕組みがわかります。prepare/commit の2段階と、なぜブロッキングが起きるのかを原理から押さえます。
2相ロックと直列化可能性
ロックを正しく取れば並行実行が「1件ずつ順番に流したのと同じ」結果になる――その理論的な裏付けを、2PL と先行グラフで腹落ちさせます。
3値論理とNULLの意味論・落とし穴
NULL のせいで件数が合わない、IN が空を返す、UNIQUE が重複を通す。直感に反する結果を3値論理の原理から一掃し、確実に意図どおりのクエリを書けるようになります。
ACID 特性
途中で落ちてもデータが壊れない、を支えるのがトランザクションの ACID。原子性・一貫性・独立性・永続性の4つを、銀行振込の例で直感的に理解できます。
ARIES リカバリアルゴリズム
クラッシュしても DB が必ず正しい状態に戻るのはなぜか。Analysis・Redo・Undo の3フェーズと LSN・CLR の仕掛けを原理から押さえれば、商用 DBMS の復旧機構が腑に落ちます。
B+Tree vs LSM-Tree 比較図
読み・書き・空間の3つの増幅で、B+Tree と LSM-Tree の得手不得手が一枚で腑に落ちます。どちらをいつ選ぶか、採用DBの理由まで原理から掴めます。
B+Tree インデックスの内部構造
なぜほとんどの DB インデックスが B+Tree なのか、その理由が原理から腑に落ちます。ノード分割・葉のリンク・ディスク I/O 最適化まで内部動作を解説します。
Bw-Tree とラッチフリーインメモリ索引
メニーコアでロック待ちに詰まる索引を、ラッチを一切持たずに捌けます。マッピングテーブルと delta record でページを物理更新せず CAS だけで B+Tree を更新する Bw-Tree の原理が分かります。
CAP 定理
分散 DB の設計で必ず迫られる選択を整理。一貫性・可用性・分断耐性は同時に全ては満たせず、ネットワーク分断時に C と A のどちらを取るかを判断できます。
CRDT(衝突なしレプリケーション型データ構造)
複数拠点で同時に書き込んでも、後でマージするだけで全レプリカが自動的に同じ状態へ収束する。合意プロトコル抜きで結果整合を実現する代数的な仕組みを原理から理解できます。
DBプロキシによるクエリルーティング
アプリのSQLは変えず、プロキシ層が読み書き振り分けとシャード解決を肩代わり。透過的フェイルオーバーまで含めた内部動作が分かります。
FLP不可能性とビザンチン耐性合意(PBFT)
なぜ合意アルゴリズムは必ずタイムアウトを使うのか、なぜ悪意ノードに耐えるには3f+1台が要るのか。FLP定理とPBFTを理論から押さえれば、分散システムの限界線が見えます。
GIN 逆引きインデックスと配列・JSONB の検索
配列・全文・JSONB の「含む」検索が GIN でなぜ速いのかが分かります。複合値を要素キーへ展開する posting list 構造と、pending list による挿入最適化まで内部から解説します。
GiST・SP-GiST 汎用インデックスフレームワークの内部
空間・全文・範囲型の索引を一つの仕組みで作れる理由が分かります。探索木を抽象化し、consistent/penalty/picksplit という少数の演算子だけ実装すれば新しい索引が生まれる原理を内部から解説します。
HTAP アーキテクチャと行/列デュアルストア
更新の速いトランザクションと重い分析を一つのシステムで同時にこなす HTAP の仕組みが分かります。行/列デュアルストアの delta/main 構造と差分マージ、実行リソース分離の設計判断を原理から押さえられます。
JOIN(テーブルの結合)
正規化でバラバラに分けたテーブルを、共通のキーでつなぎ合わせて1つの結果として取り出す操作。INNER / OUTER の違いが肝。
JSON/半構造化データの物理格納とシュレッディング
JSON 列が遅い・重い理由が物理レイアウトから腑に落ちます。BSON/JSONB のバイナリ表現、パス索引、shredding による列展開まで、スキーマレス文書の格納とクエリ最適化を内部から解説します。
LSM-Tree とログ構造化ストレージ
書き込みが詰まる DB の裏側にある LSM-Tree。メモリ上の追記とディスクへの一括書き出しで書き込みを速くする原理と、B+Tree との増幅トレードオフが分かります。
LSMコンパクション戦略:Leveled vs Tiered vs FIFO
LSMの書き込み・読み取り・空間の増幅は、コンパクション戦略の選択でほぼ決まります。Leveled・Tiered・FIFO を定量的に対比し、RocksDB と Cassandra での選定基準が掴めます。
MVCC の内部実装
MVCC が読み取りを止めない理由を、行に隠れたバージョン情報と可視性判定まで分解して理解できます。PostgreSQL と InnoDB の実装差を押さえれば、肥大化やパージ遅延の原因も見抜けます。
NVMeとSSDを意識したストレージエンジン設計
ストレージエンジンの書き込み性能と寿命は、SSDの内部動作を無視すると頭打ちになります。FTL・書き込み増幅・GC・並列キューの原理から、ページサイズ・コンパクション・zoned配置の勘所が掴めます。
ORM(オブジェクト関係マッピング)
SQL を直接書かずにオブジェクト感覚で DB を扱える ORM。生産性が上がる一方で、N+1 問題など見落としやすい落とし穴とその回避策まで解説します。
Percolatorスタイルの分散SI(MVCC+2PC)
中央コーディネータを置かずに分散環境でスナップショット分離を成立させる仕組みがわかります。タイムスタンプオラクルとロック列で2PCを行に埋め込む Percolator 方式の原理を押さえます。
Raft 状態遷移図
Raft の Follower・Candidate・Leader がどの条件で切り替わるかを、選挙タイムアウトとログ複製の流れに沿って図解で追えます。状態遷移の全分岐を文章と表で腹落ちさせます。
RDB と NoSQL の違い
表とスキーマで整合性を守る RDB と、形を選んで柔軟・水平にスケールさせる NoSQL。どちらが上ではなく、データの形とアクセスの仕方で選ぶ。
Sagaパターン(分散トランザクションの代替)
マイクロサービス間の一貫性を、ロックを長時間握らず保てます。補償トランザクションで巻き戻す発想と、2PCを避ける理由が原理から分かります。
SQL の基礎(SELECT / WHERE)
「どんなデータが欲しいか」を宣言的に書くと、DB が取り方を考えて返してくれる言語。SELECT で選び、WHERE で絞り込むのが基本。
SSTable・ブロックフォーマットとデータブロックキャッシュ
LSM系DBの読み取りコストは、SSTableの中身を知ると一気に見通せます。data/index/filterブロックの構造、restart pointによるキー圧縮、ブロックキャッシュとの噛み合い方が原理から分かります。
WAL(先行書き込みログ)の仕組み
コミットしたデータが障害でも消えないのはなぜか。データ本体より先にログを書く WAL の原理を、クラッシュリカバリ・チェックポイント・fsync・グループコミットまで一気に解き明かします。
インデックス(なぜ速くなるか)
インデックスは“本の巻末索引”。目的の行へ一直線でたどり着けるようにする仕組みで、検索を劇的に速くする代わりに、書き込みと容量のコストを払う。
インメモリDBのアンチキャッシングと退避戦略
メモリが足りなくなった瞬間に性能が崩れる不安を、冷データだけをディスクへ逃がす仕組みで解けます。従来バッファプールと逆向きの「アンチキャッシング」の原理を押さえれば、容量超過に強い設計が見通せます。
インメモリOCC:Silo とエポックベースコミット
メニーコアで集中ロックがボトルネックになる――Silo はエポック単位でコミット順を確定し、共有カウンタを排した OCC でほぼ線形にスケールします。その検証フェーズと TID 設計を原理から解説します。
ウィンドウ関数の実行内部とフレーム計算
ウィンドウ関数がなぜ速くも遅くもなるのかが分かります。PARTITION・ORDER・フレームの物理実行と、累積/スライディングの増分計算、ソート共有の最適化原理を押さえれば、重い集計クエリの正体が読めます。
オートバキュームとテーブル膨張
テーブルが際限なく肥大化する前に、autovacuumのしきい値調整と長時間トランザクション対策を押さえれば、性能劣化とディスク圧迫を未然に防げます。
オプティミスティック並行性制御とタイムスタンプ順序
競合がまれなワークロードでは、ロックで待たせるより「先に走らせて後で検証する」方が速い――OCC とタイムスタンプ順序の原理を 2PL と対比して腹落ちさせます。
カーディナリティ推定とヒストグラム・スケッチ
実行計画の推定行数がどう算出されるかを根本から理解できます。ヒストグラム・MCV・HyperLogLog の数理と、独立性仮定が崩れて誤差が増幅する仕組みまで押さえられます。
カバリングインデックスとインデックスオンリースキャン
インデックスを引いたのに本体テーブルまで読みに行く無駄を、必要列を索引に詰め込んで消し去る技法が分かります。可視性マップという落とし穴まで押さえれば、なぜ効かない時があるのかも腑に落ちます。
ガベージコレクション:MVCC バージョンのvacuumとpurge
テーブルが原因不明に膨らむ謎を、不要バージョンを回収する仕組みから解けます。PostgreSQL の VACUUM・HOT と InnoDB の purge スレッドの判断基準を押さえれば、長時間トランザクションが招く膨張を予防できます。
カラムストアの遅延更新:delta-mainとマージ
更新が苦手なはずの列ストアが、なぜ高速に書き込めるのかが分かります。書き込み用 delta と読み取り用 main を分け、トゥームストーンと周期マージで畳む SAP HANA 流の仕組みを原理から押さえられます。
クエリオプティマイザの内部
EXPLAIN の数字がどう決まるのかを根本から理解できます。パースから論理・物理プラン、コスト見積もり、探索空間の枝刈りまでを原理から追います。
クエリコンパイル実行とデータ中心コード生成
大量集計でクエリを専用ネイティブコードへ落とすと、解釈オーバーヘッドが消えて桁で速くなります。HyPer 流の produce/consume モデルと分岐削減の原理を、内部動作から押さえられます。
クエリ最適化
遅い SQL を速くするための考え方を解説します。実行計画(EXPLAIN)の読み方、インデックスが効く・効かない条件、典型的な直し方を扱います。
クエリ実行モデル(Volcano とベクトル化)
同じプランでも実行モデルが違うだけで集計が桁違いに速くなる理由が分かります。Volcano・ベクトル化・コンパイル実行の違いを CPU 効率の原理から押さえられます。
クォーラムと読み書き整合性(R+W>N)
結果整合性のデータストアでも、R+W>N という一本の不等式を満たすだけで「最新値が読める」保証を取り戻せます。N・R・W を回すだけで整合性と可用性を自在に調整する原理をつかめます。
クラスタ化インデックスと非クラスタ化インデックスの内部差
セカンダリインデックスがなぜ遅くなりがちなのか、その「二段参照」の正体が原理から腑に落ちます。InnoDB の物理整列とヒープ+RID 方式を対比し、設計判断の根拠まで掴めます。
グラフDBの内部:隣接リストとインデックスフリー隣接
なぜグラフDBは多段のホップを速く辿れるのか、その正体が原理から腑に落ちます。物理ポインタで隣接を直結する index-free adjacency を、隣接行列・CSR と対比して掴めます。
グラフクエリ言語(Cypher・Gremlin)
グラフをJOINの連鎖で書く辛さから解放されます。宣言的パターンマッチ(Cypher)と命令的トラバーサル(Gremlin)の発想の違いと最適化の仕組みが分かります。
グループコミットとfsyncバッチングの内部
コミットが遅いのは fsync が遅いから。複数トランザクションの WAL フラッシュを束ねて同期回数を減らすグループコミットで、レイテンシとスループットのトレードオフを内部から解き明かします。
コネクションとセッション状態・プロトコルパイプライン
DB が遅い原因の多くはクエリ自体でなく往復回数です。ワイヤプロトコルのプリペア・バインド・実行、セッション状態、カーソル、パイプライン化でラウンドトリップを削る原理がつかめます。
コネクションプーリング
重い DB 接続を使い回して待ち時間を減らすコネクションプーリング。プールの動き、接続枯渇の防ぎ方、上限やタイムアウト設定の勘所がつかめます。
コンシステントハッシュ法
ノードを足し引きするたびに全データが再配置される地獄から抜け出すための定石。リング構造と仮想ノードの原理を押さえれば、分散キャッシュやシャーディングの再配置コストを最小化できます。
サブクエリのデコリレーションとフラット化
相関サブクエリが遅い理由と、それを結合へ書き換えて桁違いに速くする原理がわかります。デコリレーションの代数規則と、反復評価よりセットベース実行が勝つ理由を内部から押さえられます。
シャーディング方式:レンジ vs ハッシュ vs ディレクトリ
シャードキーの分け方を誤ると、再配置で停止したりホットスポットで分散が無に帰します。レンジ・ハッシュ・ディレクトリの再分散コストと範囲クエリ適性を対比し、選定の軸が分かります。
スキーマ変更のオンライン化(online DDL)の内部
巨大テーブルへの ALTER でサービスを止めずに済みます。影テーブル・トリガー捕捉・バックフィル・カットオーバーという外部 online DDL の四段構えを、gh-ost と pt-osc の違いまで内部から解き明かします。
ストアドプロシージャ
処理ロジックを DB 側に置いて呼び出すだけで実行。通信を減らして高速化し、ロジックを一元化できる一方、移植性や可読性の弱点も。使いどころの判断を解説。
ストレージエンジンの系統樹
InnoDB や RocksDB はどこから来たのか。主要ストレージエンジンを B+Tree 系と LSM 系の二大系統に分け、年代と分岐をたどると、性能特性の理由まで一気につながります。
スナップショット分離と並行性アノマリー
Repeatable Read なのに在庫が二重に引き当てられる謎が、スナップショット分離の原理から腑に落ちます。Write Skew の正体と SSI の解決法まで一気に理解できます。
スプリットブレインとフェンシング・STONITH
ネットワーク分断で複数ノードが同時に主を名乗ると、二重書き込みでデータが壊れます。クォーラム・フェンシング・STONITH がなぜ破損を止められるのか、原理から腹落ちできます。
タイムシリーズDBの内部:ダウンサンプリングとロールアップ
メトリクスが膨れても安く速く保つ時系列DBの裏側が分かります。追記専用ストレージ・時刻パーティション・ダウンサンプリングと delta-of-delta 圧縮の原理を押さえられます。
データウェアハウスと OLTP / OLAP
業務処理と分析処理を分けるとなぜ速くなるのか。OLTP と OLAP の違い、列指向や ETL/ELT、分析専用のデータウェアハウス(DWH)の役割が一気に整理できます。
テーブルパーティショニングの内部とパーティションプルーニング
巨大表でも、述語に合うパーティションだけを読めば走査量は桁で減ります。レンジ・リスト・ハッシュの物理分割と、プルーニング・パーティションワイズ結合が効く条件を原理から押さえられます。
テーブル圧縮の内部:辞書・RLE・デルタ・ビットパッキング
列指向DBが集計を桁で速くする圧縮の中身が分かります。辞書・RLE・デルタ・ビットパッキングの符号化原理と、復号せずスキャンするベクトル化との噛み合わせを原理から押さえられます。
デッドロック検出と待機グラフ・タイムアウト
膠着して進まないトランザクションを、いつ・どれを巻き戻せば全体が動き出すのか――待機グラフのサイクル検出と犠牲者選定の原理を、予防アルゴリズムまで含めて腹落ちさせます。
トランザクションと ACID
「途中で落ちてもデータが壊れない」を支える仕組み。複数の処理を全部成功か全部取消にまとめる考え方と、それを支える ACID を図解でやさしく。
トランザクションモードの外部コネクションプーラー
接続数千でもDBを詰まらせない切り札、外部プーラーのトランザクションモード。壊れる機能を先に知れば事故らずに済みます。
トランザクションログとレプリケーション(物理 vs 論理)
レプリカが追従する仕組みを物理と論理の二層で正しく理解できます。WALシッピング・行/文ベース複製・CDCの原理と整合性保証を内部から解き明かします。
トランザクション分離レベル
並行するトランザクションに途中経過をどこまで見せるかで、速度と安全のバランスが決まります。分離レベルごとの trade-off と起こりうる不整合を解説します。
トリガとルールの実行モデルと副作用順序
トリガが「いつ・どの順で・何回」発火するかを正確に把握できれば、二重更新や無限再帰の事故を未然に防げます。BEFORE/AFTER/INSTEAD OF の発火順序とルール書き換えの意味論を整理します。
パーティショニング
巨大なテーブルを小さく分割して扱いやすくするパーティショニング。水平・垂直の違い、シャーディングとの関係、効く場面と注意点が分かります。
パイプラインブレーカとブロッキングオペレータ
ソートやハッシュ構築でクエリのメモリが跳ね上がる理由が分かります。実行計画を分断するブロッキングオペレータの正体と、確保メモリ・並列スケジューリングへの影響を原理から押さえられます。
ハイブリッド検索(ベクトル×キーワード)
意味は分かるが型番に弱いベクトル検索と、語彙一致は強いが同義語に弱いキーワード検索を、RRFで安全に統合する設計原理が分かります。
ハイブリッド論理クロック(HLC)とTrueTime
分散DBで「あの更新の後にこの読み取り」を正しく並べたいとき、物理時計は時計ずれで嘘をつきます。HLC と Spanner の TrueTime が、時刻の不確実性をどう飼いならして外部一貫性を保証するのかをつかめます。
バックアップとリカバリ
障害や誤操作でデータを失っても元に戻せる備え。バックアップの種類、どこまで戻すかの復元目標、いざという時に効く復元テストの勘所までを解説します。
ハッシュ結合の内部:グレース法とハイブリッドハッシュ
Build 側がメモリに載らない大規模結合でも、なぜ Hash Join は破綻せず速いのか。パーティション分割とスピルの原理を押さえれば、作業メモリ不足時の I/O コストと遅さの理由が読めます。
バッファプールとページ置換
DB が速いのはディスクをほとんど叩かないから。ホットなページをメモリに留める仕組みと、LRU-K や CLOCK が単純 LRU の弱点をどう克服するかが原理から分かります。
ヒープファイルとテーブルアクセスメソッドの内部
インデックスなしで行はどう置かれ、どう見つかるのか。ヒープ編成・FSM・可視性マップ・TID の仕組みが分かれば、シーケンシャルスキャンや INSERT が速い/遅い理由まで腑に落ちます。
ファイルフォーマットの系譜:Parquet・ORC・Arrow
分析基盤で必ず出会う Parquet・ORC・Arrow の違いが原理で分かります。行グループ・統計・Bloom フィルタによる枝刈りと、ディスク用とメモリ用の住み分けを構造から押さえられます。
ファジーチェックポイントと一貫したチェックポイント
再起動が遅いのはなぜか、その勘所がつかめます。処理を止めず徐々に書き出すファジーチェックポイントと、全停止する一貫チェックポイントの違いを、WAL の再生範囲とリカバリ時間の観点から原理から解きます。
ファントムと述語ロック・ギャップロック・next-keyロック
範囲検索の結果が同一トランザクション内で増える――この厄介なファントムを、InnoDB がギャップロックでどう封じるかを理屈から押さえれば、謎のロック待ちやデッドロックの原因が読み解けます。
プッシュ型 vs プル型実行モデルの比較
同じ演算子の木でも、駆動の向きが違うだけで生成コードの質と分岐の素直さが変わる理由が分かります。pull と push の制御フローを原理から対比し、コード生成適性まで押さえられます。
フラクショナルカスケーディングと分数インデックス
要素の間に新しい順序キーを無限に挿入でき、リストの並べ替えや協調編集で全行を振り直さずに済む。順序維持文字列キーの数理と実装の落とし穴を原理から理解できます。
プランキャッシュとパラメータスニッフィングの内部
同じクエリが時々だけ激遅になる謎を解けます。プラン再利用の仕組みと、特定パラメータ向けプランが他値で劣化する原理、再コンパイルやヒントでの対処までを追います。
ブルームフィルタと確率的データ構造
数バイトの配列だけで巨大な集合の「ない」を確実に言い切る仕組みが分かります。偽陽性率の計算式と、LSM-Tree の読み取りを速くする実応用まで一気に押さえられます。
ページレイアウトとスロット付きページ構造
可変長の行がディスクページのどこに、どう並ぶのかが腑に落ちます。スロット配列・行ヘッダ・前方ポインタの物理レイアウトと、更新で生じる断片化を原理から解説します。
ベクトル化I/Oとダイレクトディスク・io_uring・mmap論争
DB のページ I/O が遅い元凶は OS キャッシュとの二重管理かもしれません。ダイレクト I/O・バッファード I/O・mmap の三択を、キャッシュの二重持ちと fsync 障害の原理から見極められます。
ベクトル量子化と圧縮(PQ・スカラー量子化)
埋め込みのメモリを1/4〜1/100超に削りRAM費用を圧縮できます。スカラー量子化・PQ・二値量子化を誤差と検索精度のトレードオフから原理で選べるようになります。
マテリアライズドビュー
重い集計を毎回計算せず、結果を実体として保存して高速に参照できるマテリアライズドビュー。通常のビューとの違い、リフレッシュ更新、向き不向きを解説します。
マルチテナントDBアーキテクチャ
分離レベルを誤ると1社の障害が全社に波及します。DB単位・スキーマ単位・行単位共有の分離度とコストの原理を比較し、SaaSに合う設計軸がわかります。
モーセルドリブン並列実行とNUMA対応スケジューリング
多コア・複数ソケットのサーバーで分析クエリが頭打ちになる理由が分かります。仕事を小片に割ってワークスティールで均す morsel-driven 並列と、NUMA を意識した配置の原理を押さえられます。
リース・ハートビートと故障検出器の理論
二重リーダーやフェイルオーバーの誤判定を防ぎたい人へ。時間境界つきリースと accrual 故障検出器の数理を押さえれば、安全な権限委譲と確率的な疑い判定を設計できます。
リードレプリカの遅延と一貫性
読み込みをレプリカに逃がした直後「自分の更新が消えた」と誤解される事故を、read-your-writesの実装パターンとラグ監視で防げます。
リレーショナル代数とSQLの宣言的意味論
SQL が「何を書くか」だけで動く理由を理論から理解できます。選択・射影・結合・除算の代数演算と、SQL がどう代数式へ翻訳され実行されるかを原理から押さえられます。
レイクハウスのテーブルフォーマット:Iceberg・Delta・Hudi
安いオブジェクトストレージ上で更新もタイムトラベルも効く理由が分かります。Iceberg/Delta/Hudi がメタデータ階層とスナップショット分離で ACID をどう実現するかを対比します。
レイトマテリアライゼーションとベクトル化実行の内部
列指向OLAPが集計を桁で速くする2本柱が分かります。列値の実体化を遅らせる late materialization と、SIMD で塊を処理するベクトル化実行を、内部動作から押さえられます。
レプリケーションとシャーディング
DB が大きくなっても捌くための2つの道。レプリケーションは同じデータを複製して読みを分散・冗長化、シャーディングはデータを分割して書き込みを分散。使い分けの勘所を整理。
ロックと MVCC(同時実行制御)
複数のトランザクションが同じデータを同時に触っても壊れないよう、DB が裏で行う交通整理。ロックで待たせる方式と、バージョンを使って読み取りを止めない MVCC がある。
ロック粒度・意図ロックとロックエスカレーション
表を1個ロックすれば速いが並行性が死に、行ごとなら並行だがロック管理が重い――その板挟みを、意図ロックとエスカレーションがどう裁くかを原理から解きほぐします。
ワークロード分離とリソースガバナー・アドミッション制御
高負荷で全クエリが共倒れする崩壊を防げます。アドミッション制御・リソースプール・キューイングがメモリと同時実行をどう束ね、過負荷でスループットが落ちない原理を解説します。
一貫性モデルの強弱階層図
結果整合性と線形化可能性の間にある段階を整頓。強い順に並べた包含関係をたどれば、どのモデルが何を許し何を禁じるかを一枚の地図として読めます。
永続メモリ(PMEM)とDBの耐久性プリミティブ
DRAM 並みの速度でデータが停電に耐える――永続メモリ上でログを省き即時永続化する設計と、キャッシュフラッシュとフェンスで耐久性順序を保証する原理を、ハードウェアの嘘まで含めて解き明かします。
関数従属性と正規形の理論(BCNF・4NF・5NF)
なぜそのテーブル分割が正しいのかを勘ではなく証明で示せるようになる。関数従属性とアームストロング公理から無損失結合分解を導き、BCNFと第4・第5正規形までの数理的根拠を整理する。
空間インデックス:R-Tree と Z-order/ヒルベルト曲線
緯度経度や矩形範囲の検索がなぜ B+Tree では遅いのか、その答えが原理から分かります。多次元を階層的に束ねる R-Tree と、一次元キーへ畳む空間充填曲線という二つの戦略を対比します。
決定論的トランザクション実行(Calvin)
分散トランザクションのコミット調停を丸ごと無くせます。Calvin が事前に実行順を決めて全レプリカで同じ順に流すことで、2PC のブロッキングをどう回避するかを原理から押さえます。
結合アルゴリズムの内部
同じ JOIN でもオプティマイザが選ぶアルゴリズムで速度は桁違いに変わります。3方式の計算量とメモリの原理を押さえれば、実行計画を見て遅さの理由が読めるようになります。
結合順序探索:動的計画法と遺伝的/貪欲法
多数の表を結合するクエリが突然遅くなる理由が腑に落ちます。結合順序の探索空間がなぜ爆発し、動的計画法と貪欲法・遺伝的アルゴリズムがどう枝刈りするかを原理から解説します。
行フォーマットとTOAST・オーバーフローページ
ページに収まらない大きな値がどこへ消えるのかが原理から腑に落ちます。PostgreSQL の TOAST と InnoDB のオーバーフローページの仕組み、圧縮・インライン閾値の設計判断まで押さえられます。
行指向ストレージと列指向ストレージ
同じ表でも物理レイアウトを変えるだけで集計が桁違いに速くなる理由が分かります。行指向と列指向の違いを、圧縮・スキャン・ベクトル化実行まで原理から押さえられます。
高次元ベクトル索引:HNSW と IVF-PQ の内部
数百万件の埋め込みから類似ベクトルを数ミリ秒で引ける近似最近傍探索の中身が分かります。HNSW のグラフ探索と IVF-PQ の量子化を、距離計算量とメモリ消費の観点から原理で押さえられます。
集約とソートの外部アルゴリズム(外部ソート・スピル)
ORDER BY や GROUP BY がメモリを超えても破綻しない理由が分かります。多方向マージ外部ソートとハッシュ集約のスピル原理を押さえれば、巨大集計が遅くなる正体とディスク I/O の減らし方が読めます。
述語プッシュダウンと射影プッシュダウンの最適化
WHERE と SELECT 列をデータ源の近くで先に絞るだけで、読む I/O が桁で減る理由が分かります。論理最適化の原理と列指向・分散・外部表での削減効果を原理から押さえられます。
準結合・反結合と EXISTS/IN の実行戦略
EXISTS/IN を書いたとき実行計画で何が選ばれるかが読めるようになります。準結合・反結合への変換とハッシュ実装、NOT IN が NULL で破綻する仕組みまで内部から押さえられます。
制約の内部:参照整合性・チェック制約の実行機構
外部キーやUNIQUEが「いつ」評価されるかを知れば、謎の制約違反やデッドロック、循環参照INSERTの行き詰まりを設計段階で回避できます。制約が内部でどう実行されるかを理屈から押さえましょう。
正規化
データの重複をなくし、1つの事実を1か所だけに置くようにテーブルを分割する設計手法。更新の不整合(更新異常)を防ぐのが目的。
全文検索
大量の文章から該当箇所を一瞬で探す全文検索。転置インデックスの仕組み、LIKE 検索との違い、専用エンジンを使うべき場面が分かります。
全文検索の内部:逆引きインデックスとスコアリング(BM25)
検索結果が「なぜこの順で並ぶのか」が原理から分かります。転置インデックスのポスティングリストやスキップリストの構造、TF-IDF・BM25 の数理、フレーズ検索の仕組みまで内部動作を解説します。
直列化可能スナップショット分離(SSI)の検出アルゴリズム
SI のまま直列化可能性を得たい――SSI が危険構造を実行時に検出する仕組みと、PostgreSQL の SIREAD ロック実装を内部から追えば、なぜ偽陽性が出てどう抑えるかまで腹落ちします。
適応基数木(ART)とトライ系インメモリ索引
インメモリDBで B+Tree より速い索引が欲しいときの定番が ART です。ノードサイズを動的に切り替えてメモリとキャッシュ効率を両立する仕組みを、B+Tree と対比して原理から解説します。
適応的クエリ実行とランタイム再最適化
推定が外れても遅くなりにくいクエリ実行の仕組みがわかります。実行中の実カーディナリティで結合方式やパーティション数を組み替える適応実行の原理を、推定誤差への耐性の観点から解説します。
透過的データ暗号化(TDE)
アプリ改修ゼロで保存データを守れる仕組みが分かる。ページ単位で暗号化するTDEの鍵階層とパフォーマンス劣化の原理、列レベル暗号化との使い分けを内部構造から押さえられます。
同期/準同期/非同期レプリケーションとフェイルオーバー
コミット確認をいつ返すかで、データ損失と書き込み遅延のトレードオフが決まります。同期・準同期・非同期の境界と、フェイルオーバー時の損失・分岐の起き方を原理から押さえられます。
読み書き・空間増幅(RUM 予想)のトレードオフ
なぜ書き込みに速い DB は読み取りやディスクを犠牲にするのか。Read・Update・Memory の3増幅は同時に最小化できないという RUM 予想を軸に、各ストレージ構造の立ち位置を原理から整理します。
二重書き込みバッファとトーンページ問題
電源断でページが半分だけ書かれても DB が壊れないのはなぜか。InnoDB の二重書き込みバッファと PostgreSQL の full-page write の原理と性能コストを、torn page の根本から解き明かします。
複合インデックスの列順序と左端プレフィックス則
複合インデックスが効くか効かないかは列の順序で決まります。左端プレフィックス則とスキップスキャンの内部動作を押さえれば、なぜその列順なのかを根拠を持って設計できます。
分散SQL(NewSQL)アーキテクチャ
1台のRDBのように使えるのに、裏側は数百台に自動分散——CockroachDB/TiDB/YugabyteDB流「レンジ」設計の正体が分かります。
分散スナップショットとChandy-Lamportアルゴリズム
止められない分散システムの「全体の状態」を、処理を止めずに一貫した形で写し取れます。マーカー伝播でノードと通信路を矛盾なく捉える Chandy-Lamport の原理と、デバッグやチェックポイントへの応用がつかめます。
分散トランザクションのコミットプロトコル系譜
2PC からSpanner まで、分散コミットの選択肢をブロッキング性・レイテンシ・耐故障性で一気に見渡せます。なぜ現代のDBが古典2PCを捨てて合意やTrueTimeへ進んだのかが原理から腹落ちします。
分散結合とシャッフル・ブロードキャスト・コロケーション
分散DBの結合が遅いのは、たいていネットワーク越しの行移動が原因です。シャッフル・ブロードキャスト・コロケートの転送量を見積もれれば、シャードキー設計とプラン選択で結合を桁で速くできます。
分散合意アルゴリズム(Paxos / Raft)
複数台で1つの値に合意する仕組みを原理から理解。Raft のリーダー選出・ログ複製・安全性を追えば、なぜ過半数が必要かまで腹落ちします。
分散集約と部分集約・近似集約(HLL/t-digest)
巨大データの集計が少ないネットワーク転送で速く終わる理由が分かります。ノードローカルの部分集約とコーディネータでの最終マージ、近似スケッチが効く代数的条件まで原理から押さえられます。
分離レベルとアノマリー対応表
どの分離レベルがどの異常を防ぐかを、規格の定義と実装の差まで一枚の地図にできます。Write Skew のように規格表に載らない罠まで原理から見抜けます。
埋め込みドリフトと再インデックス
埋め込みモデルを更新した瞬間に検索精度が静かに劣化する落とし穴と、無停止で全ベクトルを差し替える運用手順が分かります。
論理レプリケーションとCDC・論理デコーディング
WALを行レベルの変更ストリームへ変える仕組みが分かります。論理デコーディング・レプリケーションスロット・出力プラグインの原理から、本番無負荷でCDCを成立させる設計までを内部から解き明かします。