spandb · research

SpanDB

SpanDB is a research RocksDB extension that places its write-ahead log and selected LSM-tree levels on a fast NVMe SSD while retaining bulk data on cheaper storage.

Related Observatory article: SpanDB on hesela.com

Placement changes redirect newly created SST files, so the configured level boundary need not describe every existing file's location. The speed disk is a storage tier, not merely a disposable cache. [1]

At revision 9a82d5a5, the logger polls SPDK completions before publishing completed log requests. Its callback terminates the process on a device-reported I/O error; submission return and completion are different observations. [2]

Deployment requires deliberate device binding and hugepage allocation for the prototype's cache. This is not an ordinary RocksDB configuration switch. [3]

For the active log, the pinned reader treats a page whose tag differs from the expected log tag as an end marker; older logs have recorded end addresses. Page membership is not payload integrity. [5]

LogEntry::Check compares the assembled byte count with the declared entry size; it does not calculate a checksum. SPDKLoggingRecover passes reconstructed bytes to WriteBatch, whereas the ordinary file-log recovery path constructs a checksum-enabled log::Reader. Do not assume the two readers perform identical validation. This is a source-level distinction, not a measured corruption outcome. [6] [7]

CreateWAL records the preceding log's end address, and DeleteLog removes obsolete log descriptors before writing metadata. A matching page tag does not itself authorize reclamation. [8]

Relations

related
Log-structured merge-tree, I/O completion polling

Limitations

  • Log-page reuse relies on the paper's atomic 4 KiB write assumption; this is not a guarantee for every NVMe device. [1]

Citations

  1. Chen, Ruan, Li, Ma and Xu. SpanDB. USENIX FAST 2021, pp. 17-32, sections 3-5. (accessed 2026-11-14)
  2. SpanDB 9a82d5a5: SPDKWrite callback and logger completion processing, lines 98-244. (accessed 2026-11-14)
  3. SpanDB 9a82d5a5: author artifact setup, hugepage budget and test configuration. (accessed 2026-11-14)
  4. SpanDB 9a82d5a5: active-log tag checks and entry assembly in ReadFromSPDK and ProcessData. (accessed 2026-11-14)
  5. SpanDB 9a82d5a5: LogEntry::Check compares accumulated and declared byte counts. (accessed 2026-11-14)
  6. SpanDB 9a82d5a5: SPDKLoggingRecover and ordinary RecoverLogFiles use different input readers. (accessed 2026-11-14)
  7. SpanDB 9a82d5a5: DeleteLog, CreateWAL and WriteMetadata lifecycle. (accessed 2026-11-14)

Further reading

  1. SPDK NVMe driver: asynchronous submission, queue-pair ownership and multi-process limitations. (accessed 2026-11-14)
Sources & caveats
  • Primary-source synthesis and pinned-code inspection on 2026-11-14. No SpanDB execution, benchmark reproduction or power-loss test.

JSON: /data/terms/spandb.json

Published by Hesela team · Updated

Report a correction · Editorial standards · Reuse guidance

Cite this page
Hesela team. SpanDB. Hesela. 2026-11-14. https://hesela.dev/terms/spandb/