Write-ahead logs, B-trees and LSM-trees

How databases make writes durable and fast: the log first, then two ways of organising data on disk and the trade-offs between them.

On the roadmap:Advanced · step 3: Storage engines

Lesson 2 of 10 · 13 min read · quiz · exercise

Durability needs a log

A database holds data in memory pages for speed, but memory is lost on a crash. To be durable it must put a record of every change on disk before it tells the client "committed". That record is the write-ahead log (WAL): an append-only file of changes.

Figure SDA-ADS-02-1 · Write-ahead log flow · © forcsguy.com

The same idea appears everywhere: databases, file systems (journaling), message brokers (the log is the data) and replication (followers replay the primary's log).

Two ways to organise data on disk

B-trees: update in place

A B-tree keeps sorted keys in fixed-size pages arranged as a shallow tree. Finding a key takes a few page reads; changing a key updates a page in place (plus a WAL record for safety).

  • Strengths: predictable reads, efficient range scans, mature, used by most relational databases.
  • Costs: writes touch random pages (random I/O); page splits and fragmentation; every write is written twice (WAL and page).

LSM-trees: append and merge

A log-structured merge tree buffers writes in a sorted in-memory table (the memtable), also logged to a WAL. When full, it is flushed as an immutable sorted file (an SSTable). Background compaction merges files and discards overwritten and deleted values.

Figure SDA-ADS-02-2 · LSM-tree write and read path · © forcsguy.com

  • Strengths: very fast sequential writes, good compression, high write throughput.
  • Costs: a read may check several files (helped by bloom filters and caches); background compaction creates write amplification and I/O spikes; deletes leave tombstones until compaction.

Choosing

QuestionB-treeLSM-tree
Write-heavy ingestionSlowerFaster
Point reads and range scansSteadyGood, depends on compaction
Predictable latencyEasierCompaction can add tail latency
Space usageSome fragmentationTemporary extra during compaction
Typical usersPostgreSQL, MySQL (InnoDB)Cassandra, RocksDB, HBase, many time-series stores

There is no winner: choose by workload, and measure. This lesson explains why a store behaves the way it does under load, which helps when diagnosing slow writes or sudden I/O spikes.

  • Checkpoints and snapshots bound recovery time.
  • Replication often ships the WAL to replicas.
  • Fsync policy (flush every write, or every few milliseconds) is a durability versus speed knob.
  • Bloom filters appear in the probabilistic-structures lesson of the core-concepts course.

Real-world reading

Check your understanding

Question 1 of 3

0 correct so far

What is the purpose of a write-ahead log (WAL)?

Go deeper

  • Designing Data-Intensive Applications, chapter 3 by Martin Kleppmann: storage engines in depth

Topics covered in this lesson

All topics

© 2026 forcsguy.com. Original lesson text and diagrams. Books and sites linked above belong to their authors.