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
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(())
} ```
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 :)
BTreeMap
based APIThe following features are planned before the 1.0 release * Stable file format * User-defined zero-copy types * Further performance optimizations
redb is nearly as fast as lmdb, and faster than sled, on many benchmarks
+--------------------+--------+--------+--------+
| | redb | lmdb | sled |
+===============================================+
| bulk load | 1605ms | 1294ms | 4642ms |
|--------------------+--------+--------+--------|
| individual writes | 516ms | 411ms | 527ms |
|--------------------+--------+--------+--------|
| batch writes | 7444ms | 3938ms | 1465ms |
|--------------------+--------+--------+--------|
| large writes | 12s | 11s | 315s |
|--------------------+--------+--------+--------|
| random reads | 716ms | 649ms | 1552ms |
|--------------------+--------+--------+--------|
| removals | 1282ms | 1012ms | 1911ms |
+--------------------+--------+--------+--------+
Licensed under either of
at your option.
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.