| Crates.io | rawdb |
| lib.rs | rawdb |
| version | 0.6.1 |
| created_at | 2025-11-03 11:46:53.760857+00 |
| updated_at | 2026-01-20 23:14:07.454943+00 |
| description | Single-file, low-level and space efficient storage engine with filesystem-like API |
| homepage | https://github.com/anydb-rs/anydb |
| repository | https://github.com/anydb-rs/anydb |
| max_upload_size | |
| id | 1914530 |
| size | 148,625 |
Non-transactional embedded storage engine with a filesystem-like API.
It features:
vecdb)It is not:
cargo add rawdb
use rawdb::{Database, Result};
fn main() -> Result<()> {
// open database
let temp_dir = tempfile::TempDir::new()?;
let db = Database::open(temp_dir.path())?;
// create regions
let region1 = db.create_region_if_needed("region1")?;
let region2 = db.create_region_if_needed("region2")?;
// write data (buffered in mmap, not yet durable)
region1.write(&[0, 1, 2, 3, 4])?;
region2.write_at(&[5, 6, 7, 8, 9], 0)?;
// flush to disk for durability
db.flush()?;
// read via mmap (data is immediately visible)
{
let reader = region1.create_reader();
let _data = reader.read_all();
} // reader dropped here, releasing its reference
// remove region (space becomes reusable hole after flush)
region1.remove()?;
// punch holes in the file
// db.compact()?; // doesn't work with doc-tests
Ok(())
}
Operations become durable after calling flush(). Before flush, writes are visible in memory but not guaranteed to survive crashes.
Design:
Write model:
flush() syncs both mmaps (data → metadata → file size), then promotes pending holesRegion operations:
flush()Recovery: On open, reads all metadata entries and rebuilds in-memory structures. Deleted regions are identified by zeroed metadata.