Rust Embedded DataBase
Project description
redb
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
use redb::{Database, Error, ReadableTable, TableDefinition};
const TABLE: TableDefinition<str, u64> = TableDefinition::new("my_data");
fn main() -> Result<(), Error> {
let db = unsafe { Database::create("my_db.redb", 1024 * 1024)? };
let write_txn = db.begin_write()?;
{
let mut table = write_txn.open_table(TABLE)?;
table.insert("my_key", &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
- Zero-copy, thread-safe,
BTreeMap
based API - Fully ACID-compliant transactions
- MVCC support for concurrent readers & writer, without blocking
- Crash-safe by default
Roadmap
The following features are planned before the 1.0 release
- Stable file format
- User-defined zero-copy types
Benchmarks
redb is nearly as fast as lmdb, and faster than sled, on many benchmarks
+--------------------+--------------+------------+--------+---------+---------+
| | redb (1PC+C) | redb (2PC) | lmdb | rocksdb | sled |
+=============================================================================+
| bulk load | 1770ms | 1370ms | 976ms | 5263ms | 4534ms |
|--------------------+--------------+------------+--------+---------+---------|
| individual writes | 227ms | 381ms | 388ms | 701ms | 642ms |
|--------------------+--------------+------------+--------+---------+---------|
| batch writes | 2346ms | 2533ms | 2136ms | 992ms | 1395ms |
|--------------------+--------------+------------+--------+---------+---------|
| large writes | 8805ms | 6532ms | 7793ms | 21475ms | 37736ms |
|--------------------+--------------+------------+--------+---------+---------|
| random reads | 734ms | 734ms | 642ms | 5814ms | 1514ms |
|--------------------+--------------+------------+--------+---------+---------|
| random range reads | 832ms | 834ms | 712ms | 6074ms | 1826ms |
|--------------------+--------------+------------+--------+---------+---------|
| removals | 1281ms | 1149ms | 676ms | 2481ms | 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file redb-0.5.0.tar.gz
.
File metadata
- Download URL: redb-0.5.0.tar.gz
- Upload date:
- Size: 101.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.13.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a9b0e600f0f5e0c2bfef118b778253c5ef604926d4f61649a009cfe492bd1cef |
|
MD5 | b2a0d35f1146a6503ba8bc046d6f108c |
|
BLAKE2b-256 | c4e7402d3b62a330acad19b14350429694edbc3ce4d8339d9ff12593fecc455d |
File details
Details for the file redb-0.5.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: redb-0.5.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 168.3 kB
- Tags: CPython 3.7+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/0.13.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 330a196034bdb255cbbf84b4296ca76782956ff2351adda060c95da75c501102 |
|
MD5 | 0ca1fe1b7950065149239a012be49a56 |
|
BLAKE2b-256 | d59a2ef1ccf219d7abe5e509f28242a56e73e6e4f878ca4072c729aa8cd4a1a5 |