Struct IndexDef

Source
pub struct IndexDef { /* private fields */ }
Expand description

Definition of an index. It includes: name, function to extract index keys, and how much the index can lag on disk.

Implementations§

Source§

impl IndexDef

Source

pub fn new( name: impl ToString, index_func: impl Fn(&[u8]) -> Vec<IndexOutput> + Send + Sync + 'static, ) -> Self

Create an index definition.

index_func is the function to extract index keys from an entry.

The input is bytes of an entry (ex. the data passed to Log::append). The output is an array of index keys. An entry can have zero or more than one index keys for a same index.

The output can be an allocated slice of bytes, or a reference to offsets in the input. See IndexOutput for details.

The function should be pure and fast. i.e. It should not use inputs from other things, like the network, filesystem, or an external random generator.

For example, if the Log is to store git commits, and the index is to help finding child commits given parent commit hashes as index keys. This function gets the commit metadata as input. It then parses the input, and extract parent commit hashes as the output. A git commit can have 0 or 1 or 2 or even more parents. Therefore the output is a Vec.

name is the name of the index.

The name will be used as part of the index file name. Therefore do not use user-generated content here. And do not abuse this by using .. or /.

When adding new or changing index functions, make sure a different name is used so the existing index won’t be reused incorrectly.

Source

pub fn lag_threshold(self, lag_threshold: u64) -> Self

Set how many bytes (as counted in the file backing Log) could be left not indexed on-disk.

This is related to Index implementation detail. Since it’s append-only and needs to write O(log N) data for updating a single entry. Allowing lagged indexes reduces writes and saves disk space.

The lagged part of the index will be built on-demand in-memory by Log::open.

Practically, this correlates to how fast func is.

Trait Implementations§

Source§

impl Clone for IndexDef

Source§

fn clone(&self) -> IndexDef

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

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

Source§

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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

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

Source§

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

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

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

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

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

Source§

type Error = Infallible

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

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

Performs the conversion.
Source§

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

Source§

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

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

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

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more