Skip to main content

dbx_core/engine/
policy.rs

1use serde::{Deserialize, Serialize};
2
3/// 스토리지에 데이터를 분산/압축/저장하는 전략
4#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
5#[serde(tag = "type")]
6pub enum StorageStrategy {
7    /// N대의 노드에 단순 파티셔닝 (중복 없음)
8    PureSharding,
9    /// 다중 마스터 복제 (N벌의 데이터 보관)
10    Replication { factor: u8 },
11    /// 패리티 기반 소거 부호화 분산 (K개의 데이터 원본과 M개의 패리티)
12    ErasureCoding { k: u8, m: u8 },
13}
14
15impl Default for StorageStrategy {
16    fn default() -> Self {
17        Self::Replication { factor: 3 }
18    }
19}
20
21/// 테이블에 부여되는 수명주기(Lifecycle) 및 저장 정책
22#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
23pub struct TablePolicy {
24    /// Hot Tier 보관 기간 (일 단위) - None이면 영구 보관
25    pub hot_ttl_days: Option<u32>,
26    pub hot_strategy: StorageStrategy,
27
28    /// Warm Tier 보관 기간 (일 단위) - None이면 영구 보관
29    pub warm_ttl_days: Option<u32>,
30    pub warm_strategy: StorageStrategy,
31
32    /// Cold Tier 보관 기간 (일 단위) - None이면 영구 보관
33    pub cold_ttl_days: Option<u32>,
34    pub cold_strategy: StorageStrategy,
35}
36
37impl Default for TablePolicy {
38    fn default() -> Self {
39        Self {
40            hot_ttl_days: Some(30),
41            hot_strategy: StorageStrategy::Replication { factor: 3 },
42            warm_ttl_days: Some(180),
43            warm_strategy: StorageStrategy::PureSharding,
44            cold_ttl_days: None,
45            cold_strategy: StorageStrategy::ErasureCoding { k: 4, m: 2 },
46        }
47    }
48}
49
50impl TablePolicy {
51    /// TablePolicy 객체를 JSON 문자열로 직렬화하여 Arrow Schema 메타데이터에 심을 수 있게 합니다.
52    pub fn to_json(&self) -> Result<String, String> {
53        serde_json::to_string(self).map_err(|e| e.to_string())
54    }
55
56    /// JSON 문자열을 TablePolicy 객체로 역직렬화 합니다.
57    pub fn from_json(json: &str) -> Result<Self, String> {
58        serde_json::from_str(json).map_err(|e| e.to_string())
59    }
60}