
LSM-Tree と B-Tree 徹底解説 - 書き込み最適化ストレージエンジンの仕組み
データベースがディスクへ書く経路を B+Tree と LSM-Tree で比較します。ページ分割・WAL・MemTable・SSTable・コンパクション・Bloom filter・RUM 予想を、RocksDB / LevelDB / PostgreSQL / Cassandra の公式ドキュメントと原論文から整理しました。

データベースがディスクへ書く経路を B+Tree と LSM-Tree で比較します。ページ分割・WAL・MemTable・SSTable・コンパクション・Bloom filter・RUM 予想を、RocksDB / LevelDB / PostgreSQL / Cassandra の公式ドキュメントと原論文から整理しました。

全文検索エンジンの内部を、動くPythonコードと実測値で解説します。転置インデックスとposting listの構造、アナライザによるトークナイズ、TF-IDFの限界とBM25のk1・bが持つ意味、Lucene BM25Similarityの実装上の式、delta+VByteによるposting list圧縮の効果、Luceneのセグメント不変性とマージ・近リアルタイム検索、日本語における形態素解析とN-gramのトレードオフ、位置情報を使ったフレーズ検索、そしてPostgreSQL・MySQL InnoDB FULLTEXT・SQLite FTS5とLIKEの違いまで、Apache Lucene公式javadocと各DBの公式ドキュメントを一次ソースに整理します。

複数のデータベースやサービスにまたがる更新を、どうやって「全部やるか、全部やらないか」にするのか。原子的コミット問題から出発して、2相コミットの手順とコーディネータ障害によるブロッキング、3相コミットが実用されない理由、X/Open XA仕様のヒューリスティック決定、PostgreSQLのPREPARE TRANSACTIONの実演、Garcia-MolinaとSalemの1987年Sagas論文に基づく補償トランザクション、コレオグラフィとオーケストレーションの違い、二重書き込みとアウトボックスパターン、冪等性とexactly-onceの現実、TCC、PercolatorとSpannerの合意ベースのアプローチまでを、実際に動かして出力を確認したコードとともに整理します。

Lamportの1978年論文のhappens-before関係から、ベクタークロック、バージョンベクタ、HLC、SpannerのTrueTimeまで、動く実装付きで解説します。

ブルームフィルタ(Bloom filter)を基礎から解説します。偽陽性はあるが偽陰性は無い性質、mビット配列とk個のハッシュ関数によるadd/query、偽陽性率と最適kの導出、O(k)の計算量、Cassandra/RocksDBなどの実運用、Counting/Scalable/Cuckooといった変種までを一次ソースで整理します。

CAP定理を一次ソースから整理します。CのC=線形化可能性という定義、ACIDのCとの違い、「3つから2つを選ぶ」という有名な誤解の正体、分断時にCP/APのどちらを選ぶかという実像、Brewerの2012年再考、通常時のレイテンシと一貫性を扱うPACELC定理、結果整合性とBASE、そしてetcd・Cassandra・MongoDB・DynamoDBの分類を留保付きで解説します。

データベースの正規化を実務目線で整理します。なぜ正規化が要るのか(更新・挿入・削除の異常)、関数従属・候補キー・部分従属・推移従属といった前提用語、第1正規形(1NF)・第2正規形(2NF)・第3正規形(3NF)・ボイス・コッド正規形(BCNF)の定義と具体例、そして非正規化のトレードオフまで、悪い設計テーブルから正規化後テーブルへの流れをSQLと表で示しながら、初中級の開発者が実務で判断できるようにまとめます。

分散システムの一意な ID 設計を、UUID と ULID を軸に整理します。RFC 9562(2024 年発行)が標準化した UUIDv7、UUIDv4 のランダム性が DB インデックスに与える影響、ULID の 128 ビット構成と時系列ソート、生成コード例、そしてタイムスタンプ露出などのセキュリティ注意点まで、一次ソースを裏取りしてまとめます。

データベースのトランザクションを実務目線で整理します。ACID(原子性・一貫性・分離性・永続性)の意味、BEGIN/COMMIT/ROLLBACKの基本、4つの分離レベル(READ UNCOMMITTED / READ COMMITTED / REPEATABLE READ / SERIALIZABLE)と、各レベルで起き得る異常(dirty read・non-repeatable read・phantom read)の対応関係を表で確認します。さらにPostgreSQLのデフォルトはREAD COMMITTED、MySQL InnoDBのデフォルトはREPEATABLE READという製品差や、PostgreSQLではREAD UNCOMMITTEDがREAD COMMITTED扱いになる点まで、PostgreSQL・MySQL公式を一次ソースにまとめます。

一覧の分割表示(ページネーション)を実務目線で整理します。LIMIT/OFFSET によるオフセット方式の利点(任意ページへジャンプ・総件数)と欠点(大きな OFFSET で遅い・挿入や削除でページずれ)、前回の最後の行を基準にするカーソル/キーセット方式の利点(大規模でも高速・安定)と欠点(任意ジャンプ不可・総ページ数が出しにくい)、複合キーのタイブレーク、不透明カーソルと API レスポンス設計(next_cursor / has_more / GraphQL Relay)、そして使い分けと落とし穴まで、PostgreSQL 公式・Use The Index, Luke・Stripe・Slack を一次ソースにまとめます。

データベースのインデックスを実務目線で整理します。フルスキャンとの違い、B-tree インデックスがなぜ速いのか、等価・範囲・前方一致・ORDER BY・JOIN で効く理由、複合インデックスの左端プレフィックス、カバリングインデックス(index-only scan)、列に関数を使うと効かない・前方ワイルドカード LIKE が効かないといった落とし穴、書き込みコストやストレージのトレードオフ、InnoDB のクラスタ化インデックスと PostgreSQL の違い、EXPLAIN の読み方まで、PostgreSQL・MySQL 公式と Use The Index, Luke を一次ソースにまとめます。

PostgreSQL 19 Beta 1で入ったON CONFLICT DO SELECTやREPACK、並列autovacuum、非同期I/Oの自動スケール、そしてjitやlz4などの既定値変更とアップグレード時の注意を、PostgreSQL公式のニュースとリリースノートに沿って説明します。

オープンソースのFirebase代替として急成長を続けるSupabaseを徹底解説。PostgreSQL/Auth/Storage/Realtime/Edge Functions の主要機能、Next.js での実装サンプル、Row Level Securityの仕組み、2026年新機能(pg-deltaの宣言的スキーマ管理、PostgREST自動リトライ)から、Firebaseとの料金・アーキテクチャ・選定基準の違いまで、現場で必要な情報を網羅します。