압축된 분석 데이터
1) 분석 데이터를 압축하는 이유
압축은 저장 및 트래픽을 줄이고 IO가 적고 캐싱이 좋은 스캔 속도를 높입니다. 가격은 CPU이며 때로는 업데이트의 복잡성입니다. 목표는 SLO를위한 최적의 "IO 절약 CPU" 토크 노스트 스토이 모스트 "입니다.
기본 메트릭:- 압축 비율 (CR) = '생 _ 크기/압축 _ 크기'.
- (PHP 3 = 3.0.6, PHP 4)
- Total Cost = 'storage _ cost + computing _ cost + egress _ cost'.
2) 압축이 사는 레이어
1. 형식 수준에서: Parquet/ORC/Avro (페이지/줄무늬/열).
2. 열의 인코딩 레벨: Dictionary, RLE, Delta, FoR/Bit-packing, Gorilla/XOR.
3. 코덱에서: ZSTD, Snappy, LZ4, Gzip.
4. 쿼리/엔진 레벨: 벡터 분해, 페이지 건너 뛰기 (min/max), 블룸/존 맵.
5. 스토리지 레벨: 계층 형 스토리지 (뜨거운/따뜻한/차가운), 압축, 페이지 캐시.
3) 열 형식 및 장점
Parquet: 열 페이지; 사전 지원, RLE/Bit-packing, min/max 통계 및 널 카운트.
ORC: 스트림에 색인이있는 스트립, 블룸 필터; 긴 스캔에 효과적입니다.
Avro (행): 스트림/로그에 편리하고 분석 스캔에 더 나쁩니다.
실습: 기본 분석의 경우 Parquet/ORC를 사용하고 카디널리티가 낮은 열 통계 및 사전을 포함하십시오.
4) 열 인코딩 (무손실)
사전-교체 값을 인덱스로 대체 (낮은 카디널리티에 이상적).
RLE (실행 길이 인코딩) - 중복 → 값 (값, 실행). 정렬/클러스터 열에 좋습니다.
델타/델타 델타: 상점 차이 (숫자/시간).
FoR (Frame-of-Reference) + 비트 패킹: 값 = 기본 + 오프셋; 오프셋에는 N 비트가 포함되어 있습니다.
Gorilla/XOR (타임 시리즈): 가변 길이로 인접 값의 XOR을 저장합니다. 지표에 좋습니다.
무효 비트 마스크: 별도의 널링 스트림이 CR을 증가시킵니다.
팁: 사전 클러스터링/필터링 키 정렬은 RLE/영역 맵 및 CR을 크게 향상시킵니다.
5) 범용 코덱Name
ZSTD: 적당한 CPU 가격으로 최고의 CR; 레벨 1-22를 지원합니다. 보편적 인 선택.
Snappy: 빠르고 낮은 CR; 읽기 빈도가 높은 핫 데이터에 적합합니다.
LZ4: 더 빠르고 비슷한 CR; 종종 스트림/로그/캐시의 경우.
Ggip/Deflate: 높은 CR, 높은 CPU 가격; 대화 형 분석에서는 거의 정당화되지 않습니다.
규칙: 핫 레이어-Snappy/LZ4, 따뜻한/차가운-ZSTD (레벨 3-7).
6) 시계열 및 로그
TSDB/열 데이터베이스: Gorilla/XOR, Delta-RLE-Bitmap, 희귀 신호를위한 Sparse-run.
통나무: JSON → Parquet + ZSTD; 키와 유형을 정규화합니다 ("문자열" 을 저장하지 마십시오).
다운 샘플링 및 롤업 (손실): 핫레이어에 창 (1m/5m/1h) 별로 장치를 저장합니다. 날것-추위에.
스케치 구조: HLL (카디널리티), TDigest/KLL (양자), CC (주파수) -컴팩트하지만 대략적인 것입니다.
7) 무손실 대 손실 (정확도를 잃을 수있는 경우)
무손실-보고, 재무, 감사.
Lossy-모니터링, 대형 창문의 A/B 분석, 원격 측정 (명시 적 표시 포함).
품질 관리: 공차를 설정하십시오 (예: P99 Λ0. 5 pp) CI에서 확인하십시오.
8) 파티션, 페이지 및 압축
당사자: 날짜/지역/테넌트 → 더 적은 스캔, 더 나은 CR.
페이지 크기/줄무늬: 페이지 당 64-256MB, 파일 당 64-512MB-탐색과 CPU 간의 균형.
압축: CR과 속도보다 작은 파일 문제를 결합하십시오.
영역 맵/블룸: 페이지 건너 뛰기 속도; 필터 정렬에 효과적입니다.
9) 압축 및 암호화/개인 정보
작업 순서: 첫 번째 압축, 암호화. 그렇지 않으면 CR λ1입니다.
TDE/at-rest는 CR을 방해하지 않습니다 (이미 압축 된 블록이 암호화되어 있음).
대중 교통 (SL) 은 형식에 영향을 미치지 않습니다.
압축 전의 PII 마스킹/토큰 화는 엔트로피를 관리 할 수있게합니다.
OPE/DET 암호화주의: CR 및/또는 위험 개인 정보 보호가 저하 될 수 있습니다.
10) 비용과 SLO (경제학)
스토리지: 적은 바이트 → $/TB-mo 미만.
계산: 덜 IO → 더 빠른 스캔; 그러나 감압은 CPU를 낭비합니다.
탈출: 바이트 감소 → 트래픽/복사 시간 단축
SLO 타협: 'p95 _ latency' 가 대상 창에 남아 있도록 코덱과 레벨을 일치시킵니다.
정책 예 (pseudo-YAML):yaml hot:
format: parquet codec: snappy target_p95_ms: 1000 max_scan_mb: 2048 warm:
format: parquet codec: zstd:4 target_p95_ms: 2500 compaction: daily cold:
format: parquet codec: zstd:7 glacier: true retention: 365d
11) 엔진 관행 (ClickHouse/Snowflake/Bigquery/Redshift/Presto)
ClickHouse: CODEC '및 스피커 (LZ4/ZSTD/DoubleDelta), RLE/스캔 용 주문, TTL/압축.
눈송이/빅 쿼리: 형식/클러스터링 자동화; 도움말 클러스터 (날짜, 테넌트, 필터 키).
Redshift/Presto/Trino: ZSTD가있는 Parquet/ORC, hive. 실행. 압축. 출력 ', 통계 및 파일 분할.
12) 파이프 라인: 압축을 포함 할 곳
섭취: 호수에 쓸 때 압축 배치 (ZSTD/LZ4).
변환/DBT: 원하는 코덱과 정렬로 열 대상을 만듭니다.
Serve/OLAP: 적절한 코덱으로 구체화 된보기; 핫 대시 보드를위한 사전 집계.
내보내기: Parquet에게주는 것이 좋습니다.
13) 테스트 및 검증
AB 프로파일 링: 요청 세트 → p50/p95, 바이트 스캔, CPU 시간, CR을 비교합니다.
골든 세트: 코딩/압축 후 정확성 점검.
지역 perf 테스트: 코덱과 레벨 변경 후 p95 TP> X% 가 경고합니다.
DQ 규칙: 다시로드 할 때 유형/범위/-rate가 변경되지 않아야합니다.
14) 유지 및 TTL 정책
계층: 뜨거운 (7-14 일), 따뜻한 (30-90 일), 추운 날씨 (180 일 이상).
다운 샘플링: "냉각" 하면 원시 대신 저장 장치/스케치가 있습니다.
유지/법적 보류: 규정과의 충돌을 제거하지 마십시오. 디렉토리 및 버전을 저장합니다.
15) 안티 패턴
"Everywhere Ggip 수준 9": 비싼 CPU, 아무런 이점이 없습니다.
정렬/클러스터링 없음: 불량 RLE/영역 맵 → 고가의 스캔.
저장 형식으로서의 JSON: 섭취하기에 편리하고 분석에 좋지 않습니다.
너무 작은 파일: 메타 데이터/탐색을 팽창 시키십시 CR이 떨어집니다.
사전 압축 암호화: 거의 제로 CR.
잃어버린 표시: 신뢰와 책임의 위반.
16) 구현 로드맵
1. 발견: 쿼리/데이터 프로필, SLO 및 예산.
2. MVP: Parquet + ZSTD/Snappy, 기본 정렬/클러스터링, 압축.
3. 튜닝: ZSTD 레벨, 페이지 크기, 클러스터 바이, 블룸/존 맵.
4. 따뜻한/차가운: 계층 형 스토리지, 다운 샘플링/스케치, 탈출 정책.
5. 강화: 회귀 퍼프 테스트, DQ, 트랜스 코딩 런북.
17) 시험판 점검표
- 형식: Parquet/ORC; 통계/사전 포함.
- 키를 필터링하여 클러스터링; 날짜/테넌트 별 당사자.
- 코덱스: hot = Snappy/LZ4, warm/cold = ZSTD (3-7); p95는 정상입니다.
- 압축이 설정됩니다. 작은 파일이 없습니다. 대상 파일/페이지 크기.
- DQ 및 골든 세트는 녹색입니다. 유형/범위가 저장되었습니다.
- 압축 후 암호화; PII 마스크; 유지/법적 보류가 준수되었습니다.
- Perf 회귀가 모니터링됩니다. p95/바이트 스캔/CR에 의한 경고.
- 스토리지 정책 및 트랜스 코딩 명령어 문서가 준비되었습니다.
18) 미니 템플릿
DBT (ZSTD 및 클러스터링 기능이있는 Parquet 테이블):sql create table if not exists analytics.sales_daily cluster by (event_date, tenant_id)
as select from {{ ref('sales_daily_view') }};
-- в конфиге модели: materialized=table, file_format=parquet, compression=zstd
압축 정책 (의사):
yaml compaction:
target_file_mb: 256 small_file_threshold_mb: 32 schedule: "hourly"
다운 샘플링 설정 (의사):
yaml timeseries:
raw: keep: 14d rollup_1m: keep: 90d rollup_1h: keep: 365d rollup_1d: keep: 1825d
결론: 분석 데이터 압축은 "코덱을 켜는 것" 뿐만 아니라 올바른 형식, 열 인코딩, 정렬 및 분할, 압축 및 저장 수준, 암호화 및 SLO 존중과 같은 전체 전략입니다. 스마트 디자인은 데이터에 대한 신뢰를 손상시키지 않으면 서 더 빠른 스캔, 낮은 카운트 및 예측 가능한 성능을 제공합