Deathtime-Based Garbage Collection
Lee et al., VLDB 2026
"By grouping records by their predicted invalidation time (deathtime) rather than write time or size, compaction can collect fully-expired cohorts without reading or rewriting any live data."
How it shaped EdgeStore
This paper is the single most important influence on EdgeStore's storage engine. The authors demonstrate that traditional LSM compaction (level-based, size-tiered) suffers from high write amplification because it repeatedly rewrites live data alongside tombstones and expired records.
EdgeStore implements their cohort-grouped approach directly:
- Every record is assigned a cohort bucket = death_time / cohort_window (default 1 hour)
- Records with TTL cluster with others expiring in the same window
- Records without TTL fall back to write-time cohorts (temporal locality)
- Compaction prioritizes fully-expired cohorts first — no live-record reads or writes
- Partially-expired cohorts get one merge pass; only live records are relocated
The paper measured a 7.8x reduction in write amplification on TTL workloads compared to RocksDB. EdgeStore's design targets the same asymptotic behavior.
Code mapping
See edgestore/src/compactor.rs — identify_cohorts(), collect_expired_cohort(), and compact_partial_cohort() implement the paper's algorithm.