Skip to content

References

References

Work TidesDB builds on directly. Design lineage sets out what is implemented as published and where the engine departs.

Compaction

[Spooky] Niv Dayan, Tamar Weiss, Shmuel Dashesky, Michael Pan, Edward Bortnikov, and Moshe Twitto. Spooky: Granulating LSM-Tree Compactions Correctly. Proceedings of the VLDB Endowment, 15(11), 2022, pp. 3071–3084. https://vldb.org/pvldb/vol15/p3071-dayan.pdf

Establishes that Full Merge and Partial Merge each fail differently — the first on space amplification, the second on write amplification and SSD garbage collection — and resolves both by partitioning the largest level into equal files and partitioning smaller levels on those boundaries, so one group of perfectly overlapping files merges at a time. TidesDB takes its dividing level and its capacity model from this paper.

[DCA] Siying Dong, Mark Callaghan, Leonidas Galanis, Dhruba Borthakur, Tony Savor, and Michael Strum. Optimizing Space Amplification in RocksDB. CIDR, 2017.

Dynamic Capacity Adaptation. Sizes the capacities of levels 1..L-1 from the largest level’s actual data size rather than its capacity, bounding durable space amplification to 1/(T-1). Predates Spooky, which cites and leverages it — TidesDB implements it in compaction_planner_capacities.

Key/value separation

[WiscKey] Lanyue Lu, Thanumalayan Sankaranarayana Pillai, Andrea C. Arpaci-Dusseau, and Remzi H. Arpaci-Dusseau. WiscKey: Separating Keys from Values in SSD-Conscious Storage. USENIX FAST ‘16. https://www.usenix.org/conference/fast16/technical-sessions/presentation/lu

Observes that LSM compaction rewrites values repeatedly although only keys need sorting, and separates them so compaction moves keys alone. Also sets out the costs separation introduces — range queries become random reads, the value log needs its own garbage collection, and crash consistency spans two structures. TidesDB takes the separation and diverges on all three mitigations.

Logging

[Aether] Ryan Johnson, Ippokratis Pandis, Radu Stoica, Manos Athanassoulis, and Anastasia Ailamaki. Aether: A Scalable Approach to Logging. Proceedings of the VLDB Endowment, 3(1), 2010.

Identifies log-space allocation contention and the serialization of many small writes as the scalability limits of write-ahead logging, and answers them with a consolidation array and flush pipelining. TidesDB’s buffered append ring has that shape: the ring’s single reserving atomic is the consolidation, and its flush thread is the pipelining.

Supporting

[xxHash] Yann Collet. xxHash — Extremely fast non-cryptographic hash algorithm. https://github.com/Cyan4973/xxHash

XXH3 provides the block checksum every framed record carries, and the key hashes the block cache, the manifest index, the partition filter and the write-reservation table index with.