Crate vecdb

Crate vecdb 

Source
Expand description

§vecdb

High-performance mutable persistent vectors built on rawdb.

It features:

  • Vec based 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:

  • A key-value store (consider fjall or redb)
  • Suited for variable-sized types (String, Vec<T>, etc.)

§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 i in indices {
        if let Ok(value) = vec.read_at(i, &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

Structs§

CompressedVec
Compressed storage vector using Pcodec for lossless numerical compression.
Database
Memory-mapped database with dynamic space allocation and hole punching.
EagerVec
Stored vector with eager computation methods for deriving values from other vectors.
Exit
Graceful shutdown coordinator for ensuring data consistency during program exit.
ImportOptions
Options for importing or creating stored vectors.
LazyVecFrom1
Lazily computed vector deriving values from one source vector.
LazyVecFrom2
Lazily computed vector deriving values from two source vectors.
LazyVecFrom3
Lazily computed vector deriving values from three source vectors.
RawVec
Raw storage vector that stores values as-is without compression.
Reader
Zero-copy reader for accessing region data from memory-mapped storage.
Stamp
Marker for tracking when data was last modified.
VecIteratorWriter
Version
Version tracking for data schema and computed values.

Enums§

Computation
Computation strategy for derived vectors.
ComputedVec
Enum wrapper for computed vectors, supporting both eager and lazy computation strategies.
Error
Error types for vecdb operations.
Format
Storage format selection for stored vectors.
RawDBError
Error types for rawdb operations.
StoredVec
Enum wrapper for stored vectors, supporting both raw and compressed formats.

Constants§

PAGE_SIZE
SEPARATOR

Traits§

AnyCollectableVec
Type-erased trait for collectable vectors.
AnyStoredVec
Trait for stored vectors that persist data to disk (as opposed to lazy computed vectors).
AnyVec
Common trait for all vectors providing metadata and utility methods.
AnyWritableVec
AsInnerSlice
CheckedSub
CollectableVec
Trait for vectors that can be collected into standard Rust collections with range support.
Compressable
Formattable
FromCoarserIndex
FromInnerSlice
GenericStoredVec
IterableCloneableVec
Trait for iterable vectors that can be cloned as trait objects.
IterableStoredVec
Trait combining stored and iterable vector capabilities.
IterableVec
Trait for vectors that can be iterated.
PrintableIndex
TransparentCompressable
TypedVec
TypedVecIterator
Extended vector iterator with type-safe index operations.
ValueWriter
A stateful writer that can write one value at a time to a buffer
VecIndex
VecIterator
Base trait for vector iterators with positioning capabilities.
VecValue

Functions§

i64_to_usize
Converts an i64 index to usize, supporting negative indexing. Negative indices count from the end.
likely
unlikely

Type Aliases§

BoxedVecIterator
Type alias for boxed vector iterators.
ComputedVecFrom1
ComputedVecFrom2
ComputedVecFrom3
IterableBoxedVec
Type alias for boxed cloneable iterable vectors.
Result

Derive Macros§

Compressable