use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ColumnarConfig {
pub buffer_row_capacity: usize,
pub buffer_byte_capacity: usize,
pub segment_target_rows: usize,
pub enable_merge: bool,
pub merge_threshold_segments: usize,
pub enable_column_stats: bool,
pub enable_bloom_filters: bool,
pub enable_timestamp_sort: bool,
pub bloom_filter_bits_per_key: usize,
}
impl Default for ColumnarConfig {
fn default() -> Self {
Self {
buffer_row_capacity: 8192,
buffer_byte_capacity: 4 * 1024 * 1024, segment_target_rows: 100_000,
enable_merge: true,
merge_threshold_segments: 8,
enable_column_stats: true,
enable_bloom_filters: true,
enable_timestamp_sort: true,
bloom_filter_bits_per_key: 10,
}
}
}
impl ColumnarConfig {
pub fn for_robotics() -> Self {
Self {
buffer_row_capacity: 4096,
buffer_byte_capacity: 2 * 1024 * 1024, segment_target_rows: 50_000,
enable_merge: true,
merge_threshold_segments: 6,
enable_column_stats: true,
enable_bloom_filters: true,
enable_timestamp_sort: true,
bloom_filter_bits_per_key: 10,
}
}
pub fn for_edge() -> Self {
Self {
buffer_row_capacity: 2048,
buffer_byte_capacity: 1024 * 1024, segment_target_rows: 30_000,
enable_merge: false, merge_threshold_segments: 16,
enable_column_stats: true,
enable_bloom_filters: false, enable_timestamp_sort: true,
bloom_filter_bits_per_key: 8,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_config_defaults() {
let config = ColumnarConfig::default();
assert_eq!(config.buffer_row_capacity, 8192);
assert_eq!(config.buffer_byte_capacity, 4 * 1024 * 1024);
assert_eq!(config.segment_target_rows, 100_000);
assert!(config.enable_merge);
}
#[test]
fn test_config_robotics() {
let config = ColumnarConfig::for_robotics();
assert_eq!(config.buffer_row_capacity, 4096);
assert_eq!(config.buffer_byte_capacity, 2 * 1024 * 1024);
assert_eq!(config.segment_target_rows, 50_000);
}
#[test]
fn test_config_edge() {
let config = ColumnarConfig::for_edge();
assert_eq!(config.buffer_row_capacity, 2048);
assert!(!config.enable_merge);
}
}