Expand description
§vecdb
High-performance mutable persistent vectors built on rawdb.
It features:
Vecbased API: push, update, truncate, delete by index- Multiple variants:
raw,compressed,computed - Rollback via stamped change deltas
- Sparse deletions with holes
- Thread-safe with concurrent reads
- Blazing fast (benchmark)
- Persistence only on
flush
It is not:
§Install
cargo add vecdb§Usage
use vecdb::{AnyStoredVec, Database, GenericStoredVec, RawVec, Result, Version};
fn main() -> Result<()> {
// create
let temp_dir = tempfile::TempDir::new()?;
let db = Database::open(temp_dir.path())?;
let mut vec: RawVec<usize, u64> = RawVec::import(&db, "vec", Version::ONE)?;
// push
for i in 0..1_000_000 {
vec.push(i);
}
// flush
vec.flush()?;
db.flush()?;
// read (sequential)
let mut sum = 0u64;
for value in vec.iter()? {
sum = sum.wrapping_add(value);
}
// read (random)
let indices: Vec<usize> = vec![500, 1000, 10];
let reader = vec.create_reader();
for idx in indices {
if let Ok(value) = vec.read(idx as usize, &reader) {
sum = sum.wrapping_add(value);
}
}
Ok(())
}§Constraints
Data must be fixed-size types: numbers, fixed arrays, structs with #[repr(C)].
Compression via Pcodec works for numeric types only.
§When to use it
- Need to store
Vecs on disk - Append-only or append-mostly workloads
- Need very high read speeds
- Space-efficient storage for numeric data
- Sparse deletions without reindexing
- Rollback without full snapshots
§Examples
See examples/ for usage.
Structs§
- Compressed
Vec - Database
- Eager
Vec - Exit
- Import
Options - Lazy
VecFrom1 - Lazy
VecFrom2 - Lazy
VecFrom3 - RawVec
- Reader
- Stamp
- Version
Enums§
Constants§
Traits§
- AnyCloneable
Iterable Vec - AnyCollectable
Vec - AnyIterable
Vec - AnyStored
Iterable Vec - AnyStored
Vec - AnyVec
- AsInner
Slice - Checked
Sub - Collectable
Vec - From
Coarser Index - From
Inner Slice - Generic
Stored Vec - Printable
Index - Stored
Compressed - Stored
Index - Stored
Raw - Transparent
Stored Compressed - VecIterator
- VecIterator
Extended