ZstdVec

Struct ZstdVec 

Source
pub struct ZstdVec<I, T>(/* private fields */);
Expand description

Compressed storage using Zstd for maximum general-purpose compression.

Zstd (Zstandard) provides the best compression ratios among general-purpose algorithms, with good decompression speed. Ideal when storage is expensive.

§Performance Characteristics

  • Highest compression ratios (typically 3-5x, better than LZ4)
  • Fast decompression (slower compression than LZ4)
  • Works well with any data type

§When to Use

  • Storage space is expensive
  • Can tolerate slower compression (decompression is fast)

Implementations§

Source§

impl<I, T> ZstdVec<I, T>
where I: VecIndex, T: ZstdVecValue,

Source

pub fn iter(&self) -> Result<ZstdVecIterator<'_, I, T>>

Source

pub fn clean_iter(&self) -> Result<CleanZstdVecIterator<'_, I, T>>

Source

pub fn dirty_iter(&self) -> Result<DirtyZstdVecIterator<'_, I, T>>

Source

pub fn boxed_iter(&self) -> Result<BoxedVecIterator<'_, I, T>>

Trait Implementations§

Source§

impl<I, T> AnyStoredVec for ZstdVec<I, T>
where I: VecIndex, T: ZstdVecValue,

Source§

fn db_path(&self) -> PathBuf

Source§

fn region(&self) -> &Region

Source§

fn header(&self) -> &Header

Source§

fn mut_header(&mut self) -> &mut Header

Source§

fn saved_stamped_changes(&self) -> u16

Number of stamped change files to keep for rollback support.
Source§

fn real_stored_len(&self) -> usize

The actual length stored on disk.
Source§

fn stored_len(&self) -> usize

The effective stored length (may differ from real_stored_len during truncation).
Source§

fn serialize_changes(&self) -> Result<Vec<u8>>

Source§

fn remove(self) -> Result<()>

Removes this vector’s region from the database.
Source§

fn flush(&mut self) -> Result<()>

Source§

fn safe_flush(&mut self, exit: &Exit) -> Result<()>

Flushes while holding the exit lock to ensure consistency during shutdown.
Source§

fn safe_write(&mut self, exit: &Exit) -> Result<()>

Writes to mmap without fsync, holding the exit lock. Data is visible to readers immediately but not durable until sync. Use this for performance when durability can be deferred.
Source§

fn update_stamp(&mut self, stamp: Stamp)

Source§

fn stamp(&self) -> Stamp

Source§

fn stamped_flush(&mut self, stamp: Stamp) -> Result<()>

Source§

impl<I, T> AnyVec for ZstdVec<I, T>
where I: VecIndex, T: ZstdVecValue,

Source§

fn version(&self) -> Version

Source§

fn name(&self) -> &str

Source§

fn len(&self) -> usize

Source§

fn index_type_to_string(&self) -> &'static str

Returns the string representation of the index type.
Source§

fn value_type_to_size_of(&self) -> usize

Returns the size in bytes of the value type.
Source§

fn region_names(&self) -> Vec<String>

Returns the list of region names used by this vector.
Source§

fn is_empty(&self) -> bool

Source§

fn region_name(&self) -> String

Returns the combined name of the vector.
Source§

fn etag(&self, stamp: Stamp, to: Option<i64>) -> String

Generates an ETag for this vector based on stamp and optional end index.
Source§

fn i64_to_usize(&self, i: i64) -> usize

Converts an i64 index to usize, supporting negative indexing (Python-style).
Source§

impl<I: Clone, T: Clone> Clone for ZstdVec<I, T>

Source§

fn clone(&self) -> ZstdVec<I, T>

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<I: Debug, T: Debug> Debug for ZstdVec<I, T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<I, T> Deref for ZstdVec<I, T>

Source§

type Target = CompressedVecInner<I, T, ZstdStrategy<T>>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<I, T> DerefMut for ZstdVec<I, T>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl<I, T> GenericStoredVec<I, T> for ZstdVec<I, T>
where I: VecIndex, T: ZstdVecValue,

Source§

fn read_value_from_bytes(&self, bytes: &[u8]) -> Result<T>

Deserializes a value from bytes. Implementors use their strategy.
Source§

fn write_value_to(&self, value: &T, buf: &mut Vec<u8>)

Writes a value to the provided buffer. Implementors use their strategy.
Source§

fn pushed(&self) -> &[T]

Returns the current pushed (uncommitted) values.
Source§

fn mut_pushed(&mut self) -> &mut Vec<T>

Returns a mutable reference to the current pushed (uncommitted) values.
Source§

fn reset(&mut self) -> Result<()>

Resets the vector state.
Source§

fn truncate_if_needed_at(&mut self, index: usize) -> Result<()>

Truncates the vector to the given usize index if the current length exceeds it.
Source§

fn reset_unsaved(&mut self)

Resets uncommitted changes.
Source§

fn is_dirty(&self) -> bool

Returns true if there are uncommitted changes (pushed values).
Source§

fn stamped_flush_with_changes(&mut self, stamp: Stamp) -> Result<()>

Flushes with the given stamp, saving changes to enable rollback.
Source§

fn rollback_before(&mut self, stamp: Stamp) -> Result<Stamp>

Rolls back changes to before the given stamp.
Source§

fn rollback(&mut self) -> Result<()>

Rolls back the most recent change set.
Source§

fn deserialize_then_undo_changes(&mut self, bytes: &[u8]) -> Result<()>

Deserializes change data and undoes those changes. Base implementation handles pushed and truncated data. RawVecInner overrides for holes/updated.
Source§

const SIZE_OF_T: usize = _

Source§

fn create_reader(&self) -> Reader

Creates a reader to the underlying region. Be careful with deadlocks - drop the reader before mutable ops.
Source§

fn read(&self, index: I, reader: &Reader) -> Result<T>

Reads value at index using provided reader.
Source§

fn read_once(&self, index: I) -> Result<T>

Reads value at index, creating a temporary reader. For multiple reads, prefer read() with a reused reader.
Source§

fn read_at(&self, index: usize, reader: &Reader) -> Result<T>

Reads value at usize index using provided reader.
Source§

fn write_values_to(&self, values: &[T], buf: &mut Vec<u8>)

Writes multiple values to the provided buffer.
Source§

fn read_at_once(&self, index: usize) -> Result<T>

Reads value at usize index, creating a temporary reader. For multiple reads, prefer read_at() with a reused reader.
Source§

fn read_unwrap(&self, index: I, reader: &Reader) -> T

Reads value at index using provided reader. Panics if read fails.
Source§

fn read_unwrap_once(&self, index: I) -> T

Reads value at index, creating a temporary reader. Panics if read fails. For multiple reads, prefer read_unwrap() with a reused reader.
Source§

fn read_at_unwrap(&self, index: usize, reader: &Reader) -> T

Reads value at usize index using provided reader. Panics if read fails.
Source§

fn read_at_unwrap_once(&self, index: usize) -> T

Reads value at usize index, creating a temporary reader. Panics if read fails. For multiple reads, prefer read_at_unwrap() with a reused reader.
Source§

fn get_pushed_or_read(&self, index: I, reader: &Reader) -> Result<Option<T>>

Gets value from pushed layer or storage using provided reader.
Source§

fn get_pushed_or_read_once(&self, index: I) -> Result<Option<T>>

Gets value from pushed layer or storage, creating a temporary reader. For multiple reads, prefer get_pushed_or_read() with a reused reader.
Source§

fn get_pushed_or_read_unwrap(&self, index: I, reader: &Reader) -> T

Gets value from pushed layer or storage using provided reader, unwrapping the result. Panics if the read fails or if the value doesn’t exist.
Source§

fn get_pushed_or_read_unwrap_once(&self, index: I) -> T

Gets value from pushed layer or storage, unwrapping the result. Panics if the read fails or if the value doesn’t exist. For multiple reads, prefer get_pushed_or_read_unwrap() with a reused reader.
Source§

fn get_pushed_or_read_at( &self, index: usize, reader: &Reader, ) -> Result<Option<T>>

Gets value from pushed layer or storage at usize index using provided reader. Does not check the updated layer.
Source§

fn get_pushed_or_read_at_once(&self, index: usize) -> Result<Option<T>>

Gets value from pushed layer or storage at usize index, creating a temporary reader. For multiple reads, prefer get_pushed_or_read_at() with a reused reader.
Source§

fn get_pushed_or_read_at_unwrap(&self, index: usize, reader: &Reader) -> T

Gets value from pushed layer or storage at usize index using provided reader, unwrapping the result. Panics if the read fails or if the value doesn’t exist.
Source§

fn get_pushed_or_read_at_unwrap_once(&self, index: usize) -> T

Gets value from pushed layer or storage at usize index, unwrapping the result. Panics if the read fails or if the value doesn’t exist. For multiple reads, prefer get_pushed_or_read_at_unwrap() with a reused reader.
Source§

fn get_pushed_at(&self, index: usize, stored_len: usize) -> Option<&T>

Gets value from pushed layer only (no disk reads).
Source§

fn len_(&self) -> usize

Returns the length including both stored and pushed (uncommitted) values. Read more
Source§

fn pushed_len(&self) -> usize

Returns the number of pushed (uncommitted) values in the memory buffer.
Source§

fn is_pushed_empty(&self) -> bool

Returns true if there are no pushed (uncommitted) values.
Source§

fn has(&self, index: I) -> bool

Returns true if the index is within the length.
Source§

fn has_at(&self, index: usize) -> bool

Returns true if the usize index is within the length.
Source§

fn push(&mut self, value: T)

Pushes a new value to the end of the vector.
Source§

fn push_if_needed(&mut self, index: I, value: T) -> Result<()>

Pushes a value if the index equals the current length, otherwise does nothing if already exists. Returns an error if the index is too high.
Source§

fn truncate_push(&mut self, index: I, value: T) -> Result<()>

Pushes a value at the given index, truncating if necessary.
Source§

fn truncate_push_at(&mut self, index: usize, value: T) -> Result<()>

Pushes a value at the given usize index, truncating if necessary.
Source§

fn batch_limit_reached(&self) -> bool

Returns true if the pushed cache has reached the batch limit (~1GiB). Read more
Source§

fn truncate_if_needed(&mut self, index: I) -> Result<()>

Truncates the vector to the given index if the current length exceeds it.
Source§

fn truncate_if_needed_with_stamp( &mut self, index: I, stamp: Stamp, ) -> Result<()>

Truncates the vector to the given index if needed, updating the stamp.
Source§

fn clear(&mut self) -> Result<()>

Clears all values from the vector.
Source§

fn validate_computed_version_or_reset(&mut self, version: Version) -> Result<()>

Validates the computed version against the stored version, resetting if they don’t match.
Source§

fn changes_path(&self) -> PathBuf

Returns the path to the changes directory for this vector.
Source§

fn stamped_flush_maybe_with_changes( &mut self, stamp: Stamp, with_changes: bool, ) -> Result<()>

Flushes with the given stamp, optionally saving changes for rollback.
Source§

fn vec_region_name(&self) -> String

Returns the region name for this vector.
Source§

impl<I, T> ImportableVec for ZstdVec<I, T>
where I: VecIndex, T: ZstdVecValue,

Source§

fn import(db: &Database, name: &str, version: Version) -> Result<Self>

Import from database, creating if needed.
Source§

fn import_with(options: ImportOptions<'_>) -> Result<Self>

Import with custom options.
Source§

fn forced_import(db: &Database, name: &str, version: Version) -> Result<Self>

Import from database, resetting on version/format mismatch.
Source§

fn forced_import_with(options: ImportOptions<'_>) -> Result<Self>

Forced import with custom options.
Source§

impl<'a, I, T> IntoIterator for &'a ZstdVec<I, T>
where I: VecIndex, T: ZstdVecValue,

Source§

type Item = T

The type of the elements being iterated over.
Source§

type IntoIter = CompressedVecIterator<'a, I, T, ZstdStrategy<T>>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl<I, T> IterableVec<I, T> for ZstdVec<I, T>
where I: VecIndex, T: ZstdVecValue,

Source§

fn iter(&self) -> BoxedVecIterator<'_, I, T>

Source§

fn create_lookback( &self, skip: usize, window: usize, min_start: usize, ) -> Lookback<'_, I, T>
where I: VecIndex, T: VecValue,

Create a windowed lookback for efficient windowed access. Uses a ring buffer if many items will be processed, otherwise uses direct access.
Source§

impl<I, T> TypedVec for ZstdVec<I, T>
where I: VecIndex, T: ZstdVecValue,

Source§

type I = I

The index type used to address elements in this vector.
Source§

type T = T

The value type stored in this vector.

Auto Trait Implementations§

§

impl<I, T> Freeze for ZstdVec<I, T>

§

impl<I, T> !RefUnwindSafe for ZstdVec<I, T>

§

impl<I, T> Send for ZstdVec<I, T>
where I: Send, T: Send,

§

impl<I, T> Sync for ZstdVec<I, T>
where I: Sync, T: Sync,

§

impl<I, T> Unpin for ZstdVec<I, T>
where I: Unpin, T: Unpin,

§

impl<I, T> !UnwindSafe for ZstdVec<I, T>

Blanket Implementations§

§

impl<T> Any for T
where T: 'static + ?Sized,

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<V> AnyCollectableVec for V
where V: TypedVec + CollectableVec<<V as TypedVec>::I, <V as TypedVec>::T>,

Source§

fn range_count(&self, from: Option<i64>, to: Option<i64>) -> usize

Returns the number of items in the specified range.
Source§

fn range_weight(&self, from: Option<i64>, to: Option<i64>) -> usize

Returns the total size in bytes of items in the specified range.
§

impl<T> Borrow<T> for T
where T: ?Sized,

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

impl<T> BorrowMut<T> for T
where T: ?Sized,

§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<I, T, V> CollectableVec<I, T> for V
where V: IterableVec<I, T> + Clone, I: VecIndex, T: VecValue,

Source§

fn iter_range( &self, from: Option<usize>, to: Option<usize>, ) -> impl Iterator<Item = T>

Returns an iterator over the specified range.
Source§

fn iter_signed_range( &self, from: Option<i64>, to: Option<i64>, ) -> impl Iterator<Item = T>

Returns an iterator over the specified range using signed indices (supports negative indexing).
Source§

fn collect(&self) -> Vec<T>

Collects all values into a Vec.
Source§

fn collect_range(&self, from: Option<usize>, to: Option<usize>) -> Vec<T>

Collects values in the specified range into a Vec.
Source§

fn collect_signed_range(&self, from: Option<i64>, to: Option<i64>) -> Vec<T>

Collects values in the specified range into a Vec using signed indices.
Source§

fn collect_range_json_bytes( &self, from: Option<usize>, to: Option<usize>, ) -> Result<Vec<u8>>
where T: Serialize,

Collects values in the specified range as JSON bytes.
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T, U> Into<U> for T
where U: From<T>,

§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<I, T, U> IterableCloneableVec<I, T> for U
where U: 'static + IterableVec<I, T> + Clone,

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V> AnyExportableVec for V

Source§

impl<I, T, U> IterableStoredVec<I, T> for U
where U: 'static + IterableVec<I, T> + AnyStoredVec,

Source§

impl<V> StoredVec for V
where V: ImportableVec + TypedVec + GenericStoredVec<<V as TypedVec>::I, <V as TypedVec>::T> + CollectableVec<<V as TypedVec>::I, <V as TypedVec>::T> + Clone, <V as TypedVec>::I: VecIndex, <V as TypedVec>::T: VecValue,

Source§

impl<T> VecValue for T
where T: Debug + Clone + Send + Sync + 'static,