use serde::{Deserialize, Serialize};
use crate::vector::index::segment::manager::ManagedSegmentInfo;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MergeConfig {
pub max_merge_segments: u32,
pub target_segment_size: u64,
pub parallel_merge: bool,
pub num_threads: usize,
}
impl Default for MergeConfig {
fn default() -> Self {
Self {
max_merge_segments: 10,
target_segment_size: 1000000,
parallel_merge: true,
num_threads: 4,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MergeStats {
pub segments_merged: u32,
pub vectors_merged: u64,
pub deletions_removed: u64,
#[serde(default)]
pub duplicates_removed: u64,
pub merge_time_ms: u64,
pub merged_size_bytes: u64,
}
impl MergeStats {
pub fn new() -> Self {
Self {
segments_merged: 0,
vectors_merged: 0,
deletions_removed: 0,
duplicates_removed: 0,
merge_time_ms: 0,
merged_size_bytes: 0,
}
}
pub fn compression_ratio(&self) -> f64 {
if self.vectors_merged == 0 {
return 1.0;
}
1.0 - (self.deletions_removed as f64 / self.vectors_merged as f64)
}
}
impl Default for MergeStats {
fn default() -> Self {
Self::new()
}
}
#[derive(Debug, Clone)]
pub struct MergeResult {
pub merged_segment: ManagedSegmentInfo,
pub stats: MergeStats,
pub merged_segment_ids: Vec<String>,
}