Storage Engine Decision Matrix
Systems Design Framework
Every storage engine embodies trade-offs dictated by the RUM Conjecture: an engine can optimize for at most two of Read amplification, Update (write) amplification, or Memory/space amplification.
Architectural Comparison Table
| Architecture | Primary Data Structure | Best Suited For | Write Amplification | Read Amplification | Production Systems |
|---|---|---|---|---|---|
| B+ Tree | Balanced N-ary Tree (4KB - 16KB pages) | Point lookups, ACID OLTP, low read latency | High () | Low () | PostgreSQL, SQLite, MySQL InnoDB |
| LSM Tree | MemTable + Multi-Level SSTables + Bloom Filters | Write-heavy ingestion, high-throughput time-series | Low to Medium () | Medium () | RocksDB, LevelDB, Cassandra, Pebble |
| Columnar | Column chunks, dictionary encoding, vector buffers | Analytical OLAP aggregations, range scans | Batched / MergeTree | Minimal for queried columns | ClickHouse, DuckDB, Parquet, Snowflake |
| Segmented Log | Append-only sequential files + index offsets | Streaming event journals, ordered messaging | Lowest () | Low for sequential consumption | Apache Kafka, Apache Pulsar, Redpanda |
| In-Memory | SkipList, Adaptive Radix Tree (ART), Hash Table | Sub-millisecond latency, fast cache, session stores | (RAM), batched AOF/RDB | (RAM speeds) | Redis, Memcached, Dragonfly |