The full picture
| HDD | SATA SSD | NVMe SSD | |
|---|---|---|---|
| Random 4K latency | ~5–10ms (seek+rotate) | ~100µs | ~20–100µs |
| Random IOPS | ~100–200 | ~50–100K | ~0.5–1M+ |
| Parallelism | 1 head assembly | internal, throttled by AHCI | explicit: 64K queues |
| Design pressure it created | avoid seeks: logs, LSM, elevator | FTL awareness: TRIM, WA | queue depth, io_uring, thread-per-core |
- Flash mechanics worth two sentences: write pages (~16KB), erase only whole blocks (~MBs) → FTL does copy-on-write + GC internally → sustained random writes trigger internal GC → latency spikes and write amplification; over-provisioning and TRIM keep the FTL breathing. This is why cheap consumer drives fall off a cliff in databases.
- What became obsolete: seek-minimizing schedulers (noop/none for NVMe), 'random reads are 100× worse' rules of thumb, painstaking data clustering purely for locality-on-platter. What became possible: high-QD designs, thread-per-core storage engines (ScyllaDB), disaggregated storage (NVMe-oF at ~10µs network penalty).
- What survived, interestingly: LSM-trees and append-only logs — designed for HDDs, still winning on SSDs because sequential writes also minimize flash GC and write amplification. Good designs aligned with physics twice.
- Architect checkboxes for cloud volumes: EBS/PD are network block devices — latency profiles, IOPS provisioning and fsync behavior differ from local NVMe; 'local NVMe cache + replicated network volume' hybrids are the current design idiom.