redb

CI Crates.io Documentation License dependency status

A simple, portable, high-performance, ACID, embedded key-value store.

redb is written in pure Rust and is loosely inspired by lmdb. Data is stored in a collection of mmap'ed, copy-on-write, B-trees. For more details, see the design doc

```rust use redb::{Database, Error, ReadableTable, TableDefinition};

const TABLE: TableDefinition = TableDefinition::new("my_data");

fn main() -> Result<(), Error> { let db = unsafe { Database::create("mydb.redb", 1024 * 1024)? }; let writetxn = db.beginwrite()?; { let mut table = writetxn.opentable(TABLE)?; table.insert("mykey", &123)?; } write_txn.commit()?;

let read_txn = db.begin_read()?;
let table = read_txn.open_table(TABLE)?;
assert_eq!(table.get("my_key")?.unwrap(), 123);

Ok(())

} ```

Status

redb is undergoing active development, and should be considered beta quality. It may eat your data, and does not have any guarantees of file format stability :)

Features

Roadmap

The following features are planned before the 1.0 release * Stable file format * User-defined zero-copy types * Further performance optimizations

Benchmarks

redb is nearly as fast as lmdb, and faster than sled, on many benchmarks +--------------------+--------------+------------+--------+---------+ | | redb (1PC+C) | redb (2PC) | lmdb | sled | +===================================================================+ | bulk load | 1770ms | 1370ms | 976ms | 4534ms | |--------------------+--------------+------------+--------+---------| | individual writes | 227ms | 381ms | 388ms | 642ms | |--------------------+--------------+------------+--------+---------| | batch writes | 2346ms | 2533ms | 2136ms | 1395ms | |--------------------+--------------+------------+--------+---------| | large writes | 8805ms | 6532ms | 7793ms | 37736ms | |--------------------+--------------+------------+--------+---------| | random reads | 734ms | 734ms | 642ms | 1514ms | |--------------------+--------------+------------+--------+---------| | random range reads | 832ms | 834ms | 712ms | 1826ms | |--------------------+--------------+------------+--------+---------| | removals | 1281ms | 1149ms | 676ms | 1792ms | +--------------------+--------------+------------+--------+---------+

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.