pub struct StorageConfig {
pub max_sstable_size: u64,
pub memtable_size_threshold: u64,
pub compaction: CompactionConfig,
pub block_size: u32,
pub compression: CompressionConfig,
pub enable_bloom_filters: bool,
pub bloom_filter_fp_rate: f64,
pub io_threads: usize,
pub sync_mode: SyncMode,
pub use_mmap: bool,
pub mmap_min_size_bytes: usize,
}Expand description
Storage engine configuration
Fields§
§max_sstable_size: u64Maximum SSTable file size in bytes (default: 64MB)
memtable_size_threshold: u64MemTable size threshold for flushing (default: 16MB)
compaction: CompactionConfigCompaction configuration
block_size: u32Block size for SSTable data blocks (default: 64KB)
compression: CompressionConfigCompression configuration
enable_bloom_filters: boolEnable bloom filters for SSTables
bloom_filter_fp_rate: f64Bloom filter false positive rate (default: 0.01)
io_threads: usizeNumber of background threads for I/O operations
sync_mode: SyncModeSync mode for durability
use_mmap: boolMemory-map SSTable Data.db files instead of using buffered file I/O.
Opt-in. Defaults to false (buffered I/O), which is portable and
safe on every filesystem. When enabled, the reader maps Data.db files at
or above Self::mmap_min_size_bytes into the process address space and
serves reads from the OS page cache with no per-block read syscall,
mirroring Cassandra’s disk_access_mode: mmap. This speeds up repeated
local scans of the same files.
§Safety / platform constraints
A memory map aliases the file’s bytes for the reader’s lifetime. Only enable this when the SSTables are immutable local files:
- Mutating, truncating, or deleting a mapped file out from under a live
reader is undefined behaviour and can raise
SIGBUS, terminating the process. CQLite never rewrites its own mapped inputs, but external tools must not either. - Network and overlay filesystems (NFS, SMB, FUSE, some container overlays) can fault mid-read after a successful map; prefer buffered I/O there.
§Interaction with the write engine (Issue #591)
This setting only affects the read path. Compaction always reads its
input SSTables through buffered I/O regardless of use_mmap, and deletes
each input by removing its TOC.txt first (unpublishing it) before the
data components, best-effort. So enabling mmap for queries is safe
alongside background compaction: a compaction never holds a mapping over a
file it then deletes, and on Windows a data file still pinned by a mapped
reader becomes an invisible orphan (reclaimed on the next startup) rather
than a failed delete or a source of duplicate rows.
Can also be enabled at runtime by setting CQLITE_USE_MMAP=1.
#[serde(default)] keeps configs serialized before this field existed
(which omit it) deserializing successfully, defaulting to buffered I/O.
mmap_min_size_bytes: usizeMinimum Data.db file size (bytes) before Self::use_mmap takes effect.
Files smaller than this use buffered I/O even when use_mmap is set,
since the per-file mapping overhead is not worthwhile for tiny files and
mapping a zero-length file is invalid. Defaults to one page (4096).
#[serde(default)] for backward compatibility with older payloads.
Trait Implementations§
Source§impl Clone for StorageConfig
impl Clone for StorageConfig
Source§fn clone(&self) -> StorageConfig
fn clone(&self) -> StorageConfig
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more