pub(crate) struct SerializedSearchIndex {
pub(crate) index: OrderedJson,
pub(crate) desc: Vec<(usize, String)>,
}
Expand description
The serialized search description sharded version
The index
is a JSON-encoded list of names and other information.
The desc has newlined descriptions, split up by size into 128KiB shards.
For example, (4, "foo\nbar\nbaz\nquux")
.
There is no single, optimal size for these shards, because it depends on configuration values that we can’t predict or control, such as the version of HTTP used (HTTP/1.1 would work better with larger files, while HTTP/2 and 3 are more agnostic), transport compression (gzip, zstd, etc), whether the search query is going to produce a large number of results or a small number, the bandwidth delay product of the network…
Gzipping some standard library descriptions to guess what transport compression will do, the compressed file sizes can be as small as 4.9KiB or as large as 18KiB (ignoring the final 1.9KiB shard of leftovers). A “reasonable” range for files is for them to be bigger than 1KiB, since that’s about the amount of data that can be transferred in a single TCP packet, and 64KiB, the maximum amount of data that TCP can transfer in a single round trip without extensions.
Fields§
§index: OrderedJson
§desc: Vec<(usize, String)>
Auto Trait Implementations§
impl Freeze for SerializedSearchIndex
impl RefUnwindSafe for SerializedSearchIndex
impl Send for SerializedSearchIndex
impl Sync for SerializedSearchIndex
impl Unpin for SerializedSearchIndex
impl UnwindSafe for SerializedSearchIndex
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 48 bytes