A (beta) modern embedded database. Doesn't your data deserve a (beta) beautiful new home?
```rust use sled::Db;
let tree = Db::open(path)?;
// insert and get, similar to std's BTreeMap tree.insert(k, v1); assert_eq!(tree.get(&k), Ok(Some(v1)));
// range queries let mut iter = tree.range(k..); asserteq!(iter.next(), Some(Ok((k, v2)))); asserteq!(iter.next(), None);
// deletion tree.remove(&k);
// compare and swap tree.compareandswap(k, Some(v1), Some(v2));
// block until all operations are stable on disk // (flush_async also available to get a Future) tree.flush(); ```
If your dataset resides entirely in cache (achievable at startup by setting the cache
to a large enough value and performing a full iteration) then all reads and writes are
non-blocking and async-friendly, without needing to use Futures or an async runtime.
To asynchronously suspend on the durability of writes, we support the
flush_async
method,
which returns a Future that your async tasks can await the completion of if they require
high durability guarantees and you are willing to pay the latency costs of fsync.
Note that sled automatically tries to sync all data to disk several times per second
in the background without blocking user threads.
what's the trade-off? sled uses too much disk space sometimes. this will improve significantly before 1.0.
BTreeMap<Vec<u8>, Vec<u8>>
compression
build feature)lock-free tree on a lock-free pagecache on a lock-free log. the pagecache scatters partial page fragments across the log, rather than rewriting entire pages at a time as B+ trees for spinning disks historically have. on page reads, we concurrently scatter-gather reads across the log to materialize the page from its fragments. check out the architectural outlook for a more detailed overview of where we're at and where we see things going!
1.0.0
release!1.0.0
, sled targets the current stable version of rust. after 1.0.0
, we will aim to trail current by at least one version. If this is an issue for your business, please consider helping us reach 1.0.0
sooner by financially supporting our efforts to get there.Want to support the project, prioritize a specific feature, or get commercial help with using sled in your project? Ferrous Systems provides commercial support for sled, and can work with you to solve a wide variety of storage problems across the latency-throughput, consistency, and price performance spectra. Get in touch!
Special thanks to Meili for providing engineering effort and other support to the sled project. They are building an event store backed by sled, and they offer a full-text search system which has been a valuable case study helping to focus the sled roadmap for the future.
Additional thanks to Arm, Works on Arm and Packet, who have generously donated a 96 core monster machine to assist with intensive concurrency testing of sled. Each second that sled does not crash while running your critical stateful workloads, you are encouraged to thank these wonderful organizations. Each time sled does crash and lose your data, blame Intel.
want to help advance the state of the art in open source embedded databases? check out CONTRIBUTING.md!