pub struct BonsaiEpoch;
Expand description

A TimeEpoch implementation that allows storing LimitedResolutionTimestamp relative to the 10-year anniversary of BonsaiDb: March 20, 2031 04:31:47 UTC.

Why use BonsaiEpoch instead of UnixEpoch?

LimitedResolutionTimestamp uses [ordered-varint::Variable] to implement Key, which encodes the underlying value in as few bytes as possible while still preserving the ordering required by Key.

Many applications are not storing timestamps that predate the application being developed. When there is a likelihood that timestamps are closer to “now” than they are to the unix timestamp (January 1, 1970 00:00:00 UTC), the BonsaiEpoch will consistently encode the underlying representation in fewer bytes than when using UnixEpoch.

We hope BonsaiDb is a viable database option for many years. By setting this epoch 10 years from the start of BonsaiDb, it allows the internal representation of timestamps to slowly decrease in size until the 10-year anniversary. Over the following 10 years, the size will grow back to the same size it was at its conception, and then slowly grow as needed from that point on.

Trait Implementations§

source§

impl TimeEpoch for BonsaiEpoch

source§

fn name() -> &'static str

The name of this epoch, used in KeyEncoding::describe to disambiguate timestamps with different epochs.
source§

fn epoch_offset() -> Duration

The offset from UNIX_EPOCH for this epoch.

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

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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

§

type Output = T

Should always be Self
source§

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

§

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>,

§

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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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