DATABASE TRACK
データベース
PostgreSQL・MySQL・MongoDB・Redis などの製品比較から、SQL・インデックス・トランザクションといった考え方まで。まず TL;DR で。
Product Index
製品から知る
RDB と NoSQL の代表的な製品。特徴・強み弱み・用途。横断比較もできます。
Concept Map
考え方・概念
SQL・インデックス・トランザクションなど、製品をまたいで効く DB の土台。まず TL;DR で。
ACID 特性
トランザクションの信頼性を支える4つの性質、原子性・一貫性・独立性・永続性をやさしく解説します。なぜ重要かを銀行振込の例で示します。
CAP 定理
分散データベースは一貫性(C)・可用性(A)・分断耐性(P)を同時に全て満たせない、という指針です。ネットワーク分断時に C と A のどちらを取るかを解説します。
JOIN(テーブルの結合)
正規化でバラバラに分けたテーブルを、共通のキーでつなぎ合わせて1つの結果として取り出す操作。INNER / OUTER の違いが肝。
ORM(オブジェクト関係マッピング)
プログラムのオブジェクトとデータベースのテーブルを橋渡しする仕組みです。生産性の利点と、N+1 問題などの代表的な落とし穴を解説します。
RDB と NoSQL の違い
表とスキーマで整合性を守る RDB と、形を選んで柔軟・水平にスケールさせる NoSQL。どちらが上ではなく、データの形とアクセスの仕方で選ぶ。
SQL の基礎(SELECT / WHERE)
「どんなデータが欲しいか」を宣言的に書くと、DB が取り方を考えて返してくれる言語。SELECT で選び、WHERE で絞り込むのが基本。
インデックス(なぜ速くなるか)
インデックスは“本の巻末索引”。目的の行へ一直線でたどり着けるようにする仕組みで、検索を劇的に速くする代わりに、書き込みと容量のコストを払う。
クエリ最適化
遅い SQL を速くするための考え方を解説します。実行計画(EXPLAIN)の読み方、インデックスが効く・効かない条件、典型的な直し方を扱います。
コネクションプーリング
DB 接続の確立は重いため、作った接続を使い回す仕組みです。プールの動き、接続の枯渇、上限やタイムアウトの設定の勘所を解説します。
ストアドプロシージャ
処理ロジックを DB 側に保存し、呼び出して実行する仕組みです。性能やロジック一元化の利点と、移植性や可読性の欠点を解説します。
データウェアハウスと OLTP / OLAP
日々の業務処理(OLTP)と分析処理(OLAP)の違いを解説します。列指向や ETL/ELT、分析専用のデータウェアハウス(DWH)が担う役割を整理します。
トランザクションと ACID
複数の処理を“全部成功か、全部なかったことにするか”の一塊として扱う仕組みと、それを支える4つの性質 ACID をやさしく解説。
トランザクション分離レベル
並行するトランザクションから“途中経過をどこまで見せるか”を決める設定です。緩いほど速く、厳しいほど安全という性能との trade-off を解説します。
パーティショニング
大きなテーブルを内部で複数の小さなまとまりに分割する仕組みです。水平・垂直の違い、シャーディングとの関係、利点と注意点を解説します。
バックアップとリカバリ
障害や誤操作に備えてデータを退避し、必要なときに復元する仕組みです。バックアップの種類、復元目標、復元テストの大切さを解説します。
マテリアライズドビュー
ビューの結果を実体として保存し、高速に参照できる仕組みです。通常のビューとの違い、リフレッシュによる更新、向き不向きを解説します。
レプリケーションとシャーディング
同じデータを複数台にコピーして守る・読みを分散するのがレプリケーション、データそのものを分割して書き込みを分散するのがシャーディング。DBを大きくする2つの方向。
ロックと MVCC(同時実行制御)
複数のトランザクションが同じデータを同時に触っても壊れないよう、DB が裏で行う交通整理。ロックで待たせる方式と、バージョンを使って読み取りを止めない MVCC がある。
正規化
データの重複をなくし、1つの事実を1か所だけに置くようにテーブルを分割する設計手法。更新の不整合(更新異常)を防ぐのが目的。
全文検索
大量の文章から該当箇所を高速に探す仕組みです。転置インデックスの考え方、LIKE 検索との違い、専用エンジンを使う場面を解説します。