pub struct SegmentWriterConfig {
pub row_group_size: usize,
pub max_row_group_size: usize,
pub compress: bool,
pub float_encoding: FloatEncoding,
pub compression_codec: CompressionCodec,
pub zstd_level: i32,
pub column_codec_overrides: HashMap<String, CompressionCodec>,
pub target_segment_size_bytes: usize,
pub bloom_fpr: f64,
pub zstd_dict_training: bool,
pub field_encryption: FieldEncryptionConfig,
}Expand description
Configuration for the segment writer.
Fields§
§row_group_size: usizeMaximum rows per row group.
max_row_group_size: usizeMaximum rows per row group for memory-limiting purposes.
When set, the writer will split row groups to ensure that no single
row group exceeds this number of rows. This bounds peak memory usage
during encoding: only max_row_group_size rows worth of encoded
column buffers are held in memory at any time.
Defaults to DEFAULT_ROW_GROUP_SIZE (65 536 rows). Reducing this
trades write throughput (more row groups, more metadata) for lower
peak memory consumption.
compress: boolWhether to apply compression after encoding.
float_encoding: FloatEncodingFloat encoding strategy.
compression_codec: CompressionCodecCompression codec (LZ4, Zstd, or None).
zstd_level: i32Zstd compression level (1–22). Only used when compression_codec is Zstd.
column_codec_overrides: HashMap<String, CompressionCodec>Per-column codec overrides. Keys are column names; values override
the default compression_codec for that column.
target_segment_size_bytes: usizeAdvisory maximum segment file size in bytes (default: 256 MiB).
When the estimated segment size exceeds this threshold, the flush logic in the database layer should split the data into multiple segments. This keeps individual segment files manageable for compaction, object-store upload, and cache eviction.
Note: This is an advisory limit — the writer itself produces a
single segment file. Size-based splitting is enforced by the flush
layer (chronix-memtable::flush::flush_frozen), which estimates
the compressed row size and splits large measurement batches into
multiple SegmentWriter instances.
bloom_fpr: f64Bloom filter false-positive rate (default: 0.01 = 1%).
Lower values improve query pruning at the cost of larger bloom filter bitmaps. Recommended values: Low cardinality (<100 unique): 0.001 Default workloads: 0.01 High cardinality (>100K unique): 0.05
zstd_dict_training: boolEnable Zstd dictionary training.
When true and compression_codec is Zstd, the writer
collects encoded column blocks from the first row group as
training samples, trains a dictionary via zstd::dict::from_samples,
and compresses subsequent row groups with the trained dictionary.
The dictionary is embedded in the segment metadata for the reader.
Most beneficial when row groups are small (< 64 KiB) and values contain repeating structure (e.g. string tags, enum fields).
field_encryption: FieldEncryptionConfigPer-column field-level encryption configuration.
Only columns listed here are encrypted with AES-256-GCM. Encrypted columns have their statistics (min/max/sum/distinct) zeroed to prevent information leakage through zone maps.
Trait Implementations§
Source§impl Clone for SegmentWriterConfig
impl Clone for SegmentWriterConfig
Source§fn clone(&self) -> SegmentWriterConfig
fn clone(&self) -> SegmentWriterConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SegmentWriterConfig
impl Debug for SegmentWriterConfig
Auto Trait Implementations§
impl Freeze for SegmentWriterConfig
impl RefUnwindSafe for SegmentWriterConfig
impl Send for SegmentWriterConfig
impl Sync for SegmentWriterConfig
impl Unpin for SegmentWriterConfig
impl UnsafeUnpin for SegmentWriterConfig
impl UnwindSafe for SegmentWriterConfig
Blanket Implementations§
impl<T> Allocation for T
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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 more