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 copy-on-write B-trees. For more details, see the design doc

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

const TABLE: TableDefinition<&str, u64> = TableDefinition::new("my_data");

fn main() -> Result<(), Error> { let db = Database::create("mydb.redb")?; 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().value(), 123);

Ok(())

} ```

Status

redb is undergoing active development, and should be considered beta quality. The file format is stable, but redb has not been widely deployed in production systems (to my knowledge, atleast).

Features

Benchmarks

redb has similar performance to other top embedded key-value stores such as lmdb and rocksdb

| | redb | lmdb | rocksdb | sled | sanakirja | |---------------------------|--------|--------|---------|--------|-----------| | bulk load | 2792ms | 1115ms | 5610ms | 5005ms | 1161ms | | individual writes | 462ms | 1119ms | 1097ms | 957ms | 662ms | | batch writes | 2568ms | 2247ms | 1344ms | 1622ms | 2713ms | | random reads | 988ms | 558ms | 3469ms | 1509ms | 678ms | | random reads | 962ms | 556ms | 3377ms | 1425ms | 671ms | | random range reads | 2534ms | 985ms | 6058ms | 4670ms | 1089ms | | random range reads | 2493ms | 998ms | 5801ms | 4665ms | 1119ms | | random reads (4 threads) | 344ms | 141ms | 1247ms | 424ms | 266ms | | random reads (8 threads) | 192ms | 72ms | 673ms | 230ms | 620ms | | random reads (16 threads) | 131ms | 47ms | 476ms | 148ms | 3500ms | | random reads (32 threads) | 118ms | 44ms | 412ms | 129ms | 4313ms | | removals | 2184ms | 784ms | 2451ms | 2047ms | 1344ms |

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.