reifydb_store_column/
partition.rs1use reifydb_core::{common::CommitVersion, value::column::compressed::CompressedColumn};
5
6use crate::ColumnStatistics;
7
8#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
9pub struct PartitionKey {
10 pub source: u64,
11 pub version: CommitVersion,
12}
13
14impl PartitionKey {
15 pub fn new(source: u64, version: CommitVersion) -> Self {
16 Self {
17 source,
18 version,
19 }
20 }
21}
22
23#[derive(Clone)]
24pub struct Partition {
25 pub key: PartitionKey,
26 pub columns: Vec<CompressedColumn>,
27 pub statistics: Vec<ColumnStatistics>,
28 pub row_count: usize,
29 pub compressed_size: usize,
30 pub uncompressed_size: usize,
31}
32
33impl Partition {
34 pub fn new(key: PartitionKey, columns: Vec<CompressedColumn>) -> Self {
35 let row_count = columns.first().map_or(0, |c| c.row_count);
36 let compressed_size: usize = columns.iter().map(|c| c.data.len()).sum();
37 let uncompressed_size: usize = columns.iter().map(|c| c.uncompressed_size).sum();
38
39 Self {
42 key,
43 columns,
44 statistics: vec![],
45 row_count,
46 compressed_size,
47 uncompressed_size,
48 }
49 }
50
51 pub fn compression_ratio(&self) -> f64 {
52 if self.uncompressed_size == 0 {
53 1.0
54 } else {
55 self.compressed_size as f64 / self.uncompressed_size as f64
56 }
57 }
58}