Skip to content

carlsverre/lsm-tree

This branch is 141 commits behind fjall-rs/lsm-tree:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Feb 28, 2025
c30ad7b · Feb 28, 2025
Jan 12, 2025
Feb 8, 2025
Jan 8, 2025
Feb 28, 2025
Sep 20, 2024
Feb 21, 2025
Aug 14, 2024
Mar 13, 2024
Feb 26, 2024
Feb 26, 2025
Jan 17, 2024
Jan 17, 2024
Feb 27, 2025
May 12, 2024
May 25, 2024
Jan 17, 2024

Repository files navigation

CI docs.rs Crates.io MSRV dependency status

A K.I.S.S. implementation of log-structured merge trees (LSM-trees/LSMTs) in Rust.

This crate only provides a primitive LSM-tree, not a full storage engine. For example, it does not ship with a write-ahead log. You probably want to use https://github.com/fjall-rs/fjall instead.

About

This is the most feature-rich LSM-tree implementation in Rust! It features:

  • Thread-safe BTreeMap-like API
  • 100% safe & stable Rust
  • Block-based tables with compression support
  • Range & prefix searching with forward and reverse iteration
  • Size-tiered, (concurrent) Leveled and FIFO compaction
  • Multi-threaded flushing (immutable/sealed memtables)
  • Partitioned block index to reduce memory footprint and keep startup time short [1]
  • Block caching to keep hot data in memory
  • Bloom filters to increase point lookup performance
  • Snapshots (MVCC)
  • Key-value separation (optional) [2]
  • Single deletion tombstones ("weak" deletion)

Keys are limited to 65536 bytes, values are limited to 2^32 bytes. As is normal with any kind of storage engine, larger keys and values have a bigger performance impact.

Feature flags

lz4

Allows using LZ4 compression, powered by lz4_flex.

Disabled by default.

miniz

Allows using DEFLATE/zlib compression, powered by miniz_oxide.

Disabled by default.

bytes

Uses bytes as the underlying Slice type.

Disabled by default.

Stable disk format

The disk format is stable as of 1.0.0.

2.0.0 uses a new disk format and needs a manual format migration.

Future breaking changes will result in a major version bump and a migration path.

Run unit benchmarks

cargo bench --features lz4,miniz

License

All source code is licensed under MIT OR Apache-2.0.

All contributions are to be licensed as MIT OR Apache-2.0.

Footnotes

[1] https://rocksdb.org/blog/2017/05/12/partitioned-index-filter.html

[2] https://github.com/facebook/rocksdb/wiki/BlobDB

About

K.I.S.S. LSM-tree implementation in safe Rust

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 99.9%
  • JavaScript 0.1%