reifydb_store_column/
lib.rs1#![cfg_attr(not(debug_assertions), deny(warnings))]
5
6pub mod backend;
7pub mod config;
8pub mod memory;
9pub mod partition;
10pub mod statistics;
11pub mod store;
12
13use partition::{Partition, PartitionKey};
14use reifydb_core::common::CommitVersion;
15
16pub mod memory_backend {}
17
18use reifydb_core::{
19 interface::version::{ComponentType, HasVersion, SystemVersion},
20 value::column::{
21 compressed::{CompressedColumn, CompressionType},
22 data::ColumnData,
23 },
24};
25use reifydb_type::{Result, value::Value};
26
27pub struct StoreColumnVersion;
28
29impl HasVersion for StoreColumnVersion {
30 fn version(&self) -> SystemVersion {
31 SystemVersion {
32 name: env!("CARGO_PKG_NAME")
33 .strip_prefix("reifydb-")
34 .unwrap_or(env!("CARGO_PKG_NAME"))
35 .to_string(),
36 version: env!("CARGO_PKG_VERSION").to_string(),
37 description: "Column-oriented storage for analytical queries".to_string(),
38 r#type: ComponentType::Module,
39 }
40 }
41}
42
43pub trait ColumnStore: Send + Sync + Clone + 'static {
45 fn insert(&self, version: CommitVersion, columns: Vec<CompressedColumn>) -> Result<()>;
46
47 fn scan(&self, version: CommitVersion, column_indices: &[usize]) -> Result<Vec<ColumnData>>;
48
49 fn statistics(&self, column_index: usize) -> Option<ColumnStatistics>;
50
51 fn partition_count(&self) -> usize;
52
53 fn compressed_size(&self) -> usize;
54
55 fn uncompressed_size(&self) -> usize;
56}
57
58#[derive(Clone, Debug)]
59pub struct ColumnStatistics {
60 pub min_value: Option<Value>,
61 pub max_value: Option<Value>,
62 pub none_count: usize,
63 pub distinct_count: Option<usize>,
64 pub compression_type: CompressionType,
65 pub compression_ratio: f64,
66 pub compressed_size: usize,
67 pub uncompressed_size: usize,
68}