Key/Value SplinterDB treats keys and values as bytes strings. Keys are compared using an application-provided comparison function. SplinterDB supports application-defined data types where the application may specify merging rules for data using callback functions.
SplinterDB uses a mapped B^e-Tree as its global structure. The mapped B^e-Tree is a size-tiered variant of a B^e-Tree, which additionally uses maplets instead of filters to reduce the number of filter operations required for reads. B^e-Trees themselves can be considered a type of LSM.
The memtable and branches (SplinterDB's name for SSTables) use a B^+-Tree.
SplinterDB provides APIs for synchronous and asynchronous point reads, as well as iterators and range read operations.
Memtable data is stored in the log. Once memtables are compacted and added to the mapped B^e-Tree, they are added as branches, which are immutable B^+-trees. These branches can be flushed down the tree and are compacted together into new branches at lower levels.
SplinterDB is composed of several primary modules: trunk, btree (used for branches and memtables), maplet, cache, allocator, and log. All allocation of on-disk blocks is handled by the allocator, and nearly all allocation of memory is handled by the cache, which also determines when data is read in from or written out to disk.