피드로 돌아가기
Dev.toDatabase
원문 읽기
PostgreSQL TAM 기반 Columnar/Row 압축 엔진으로 I/O 87% 절감 및 HTAP 구현
storage_engine: Two High-Performance Table Access Methods for PostgreSQL Analytics and HTAP Workloads
AI 요약
Context
표준 Heap Table 구조의 PostgreSQL은 분석 쿼리 실행 시 불필요한 컬럼까지 모두 읽어야 하는 I/O 병목 현상 발생. 분석 중심의 Columnar 저장소와 쓰기 중심의 Row 기반 압축 저장소를 단일 데이터베이스 내에서 선택적으로 활용할 수 있는 유연한 스토리지 레이어 필요.
Technical Solution
- PostgreSQL 12의 Table Access Method (TAM) API를 활용하여 Heap 외의 전용 스토리지 엔진을 구현한 구조
- 데이터 접근 패턴에 따라 Columnar(colcompress)와 Row-oriented compressed(rowcompress) 방식을 선택하는 Dual-AM 설계
- Stripe(15만 행)와 Chunk group(1만 행)의 2단계 계층 구조를 통한 데이터 물리 배치 및 관리
- Stripe-level과 Chunk-level의 2단계 Zone-Map Pruning을 적용하여 조건에 맞지 않는 데이터 블록의 I/O 및 Decompression 완전 배제
- ClickHouse MergeTree의 정렬 키 개념을 도입하여 데이터 정렬도에 비례하는 Pruning 효율 극대화
- LZ4, Zstd, PGLZ 등 워크로드 특성에 맞는 압축 알고리즘을 컬럼별로 개별 설정 가능한 유연성 확보
실천 포인트
1. 분석 쿼리가 주를 이루는 Wide Table은 colcompress 적용 검토
2. Append-only 로그성 데이터는 rowcompress를 통한 저장 공간 최적화 고려
3. Pruning 효율을 높이기 위해 쿼리 조건으로 자주 쓰이는 컬럼을 orderby 키로 설정
4. LZ4(속도 우선)와 Zstd(압축률 우선) 중 비즈니스 요구사항에 맞는 알고리즘 선택