압축 (Compression)
DBX는 ZSTD(Zstandard) 알고리즘을 지원하여 저장 공간을 효율적으로 사용하고 디스크 I/O 성능을 최적화합니다.
개요
DBX의 압축은 투명(Transparent)하게 작동합니다. 즉, 데이터 삽입 시 자동으로 압축되고, 조회 시 자동으로 해제되므로 애플리케이션 코드를 수정할 필요가 없습니다.
주요 특징
- ZSTD 알고리즘: 빠른 속도와 높은 압축률의 균형
- 조정 가능한 레벨: 1(빠름)부터 22(고압축)까지 설정 가능
- 테이블별 설정: 각 테이블의 데이터 특성에 따라 선택적으로 적용
기본 사용법
압축 활성화
use dbx_core::Database;
fn main() -> dbx_core::DbxResult<()> {
let db = Database::open("./db")?;
// 'logs' 테이블에 대해 압축 활성화 (기본 레벨 3)
db.enable_compression("logs")?;
// 데이터 삽입 시 자동으로 압축됨
db.insert("logs", b"key:1", b"Large log message...")?;
Ok(())
}
압축 레벨 조정
압축률과 처리 속도의 트레이드오프를 조정할 수 있습니다.
// 실시간 처리 (로그 등): 낮은 레벨 (1~3)
db.set_compression_level("realtime_data", 1)?;
// 일반적인 목적: 중간 레벨 (3~9)
db.set_compression_level("user_data", 6)?;
// 장기 보관 (아카이브): 높은 레벨 (10~15)
db.set_compression_level("archives", 15)?;
압축 성능 통계 (일반적 지표)
| 데이터 타입 | 예상 압축률 | 속도 영향 |
|---|---|---|
| 텍스트/로그 | 10-20배 | 낮음 |
| JSON/XML | 5-10배 | 낮음 |
| 랜덤/이미지 | 1-2배 | 높음 (권장 안 함) |
- 디스크 I/O: 데이터 크기가 줄어들어 전체적인 입출력 효율이 50~80% 향상됩니다.
- CPU 부하: 압축/해제 시 약간의 CPU 사용량이 증가하지만(10~15%), 대부분의 현대 시스템에서는 디스크 I/O 병목을 줄여 전체 속도가 개선됩니다.
권장 사항 (Best Practices)
- 대용량 텍스트에 적용: 로그, 설정파일, JSON 문서 등에 가장 효과적입니다.
- 이미 압축된 데이터는 피하세요: JPEG, MP4, ZIP 파일 등은 이미 압축되어 있어 중복 압축 시 오버헤드만 발생합니다.
- 데이터 특성에 따른 레벨 선택: 실시간 서비스는 낮은 레벨(1~3)을 사용하고, 정기 백업이나 로그 보관은 높은 레벨을 사용하세요.