Analitik verileri sıkıştırın
1) Analitik verileri neden sıkıştıralım
Sıkıştırma depolama ve trafiği azaltır, daha az IO ve daha iyi önbelleğe alma ile taramaları hızlandırır. Fiyat CPU ve (bazen) güncellemelerin karmaşıklığıdır. Amaç, SLO'larınız için optimum "IO↔CPU↔tochnost↔stoimost'dir.
Temel metrikler:- Sıkıştırma Oranı (CR) = 'raw _ size/ compressed_size'.
- Tarama Maliyeti ≈ bytes_scanned/ throughput_storage + cpu_decode_time'.
- Toplam Maliyet = 'depolama _ maliyet + compute_cost + egress_cost'.
2) Sıkıştırmanın yaşadığı katmanlar
1. Biçim düzeyinde: Parke/ORC/Avro (sayfalar/çizgiler/sütunlar).
2. Sütunun kodlama düzeyinde: Sözlük, RLE, Delta, FoR/Bit-paketleme, Gorilla/XOR.
3. Codec düzeyinde: ZSTD, Snappy, LZ4, Gzip.
4. Sorgu/motor düzeyinde: vektörleştirme, sayfa atlama (min/max), bloom/zone-map.
5. Depolama düzeyinde: katmanlı depolama (sıcak/sıcak/soğuk), sıkıştırma, sayfa önbelleği.
3) Sütun formatları ve avantajları
Parke: sütun sayfaları; Sözlük desteği, RLE/Bit-paketleme, min/max istatistik ve null-count.
ORC: akarsularda indeksli şeritler, çiçek filtreleri; Uzun taramalar için etkilidir.
Avro (satır): akış/günlükler için uygun, analitik taramalar için daha kötü.
Uygulama: Varsayılan analitik için Parquet/ORC kullanın, kardinalitenin düşük/orta olduğu sütun istatistiklerini ve sözlüğü ekleyin.
4) Sütun kodlamaları (kayıpsız)
Dictionary-Değerleri indekslerle değiştirir (düşük kardinalite için idealdir).
RLE (Run-Length Encoding - Çalışma Uzunluğu Kodlaması) - yinelenen - değerler (değer, çalıştırma). Sıralanmış/kümelenmiş sütunlar için iyidir.
Delta/Delta-of-Delta: farkları depolar (sayılar/zamanlar).
FoR (Referans Çerçevesi) + Bit paketleme: değer = taban + ofset; Ofset N bit ile doludur.
Gorilla/XOR (Zaman serisi): Değişken uzunluğa sahip komşu değerlerin XOR'unu depolar; Metrikler için iyi.
Nullable bitmasks: Ayrı bir nulls akışı CR'yi arttırır.
İpucu: Ön kümeleme/filtreleme anahtar sıralaması RLE/zone-maps ve CR'yi önemli ölçüde geliştirir.
5) Genel amaçlı codec bileşenleri
ZSTD: ılımlı CPU fiyatında en iyi CR; Seviye 1-22'yi destekler. Evrensel bir seçim.
Çabuk: hızlı, düşük CR; Yüksek okuma frekansına sahip sıcak veriler için uygundur.
LZ4: Snappy daha da hızlı, benzer CR; genellikle - akış/günlükler/önbellekler için.
Gzip/Deflate: yüksek CR, yüksek CPU fiyatı; İnteraktif analitikte nadiren haklı çıkarılır.
Kural: Sıcak tabaka - Snappy/LZ4, sıcak/soğuk - ZSTD (seviye 3-7).
6) Zaman serisi ve günlükleri
TSDB/sütun veritabanları: Gorilla/XOR, Delta-RLE-Bitmap, nadir sinyaller için seyrek çalıştırma.
Günlükler: JSON - Parke + ZSTD; Tuşları ve türleri normalleştirin ("string int" saklamayın).
Altörnekleme ve roll-up'lar (kayıplı): Üniteleri sıcak bir katmanda pencerelerle (1m/5m/1h) depolayın; çiğ - soğukta.
Eskiz yapıları: HLL (kardinalite), TDiggest/KLL (nicelikler), CMS (frekanslar) - kompakt, ancak yaklaşık.
7) Lossless vs Lossy (doğruluğu kaybedebileceğiniz zaman)
Kayıpsız - raporlama, finans, denetim.
Kayıplı - izleme, büyük pencerelerde A/B analizi, telemetri (açık işaretleme ile!).
Kalite kontrol: toleransı ayarlayın (örn. P99 ± 0. 5 pp) ve CI'da kontrol edin.
8) Bölümleme, sayfalar ve sıkıştırma
Taraflar: tarihe/bölgeye/kiracıya göre - daha az tarama, daha iyi CR.
Sayfa boyutu/şerit: Sayfa başına 64-256 KB, dosya başına 64-512 MB - arama ve CPU arasındaki denge.
Sıkıştırma: CR ve hızın üzerindeki küçük dosya problemini birleştirin.
Zone-maps/Bloom: sayfa atlamalarını hızlandırmak; Filtrelere göre sıralamada etkilidir.
9) Sıkıştırma ve şifreleme/gizlilik
İşlem sırası: önce sıkıştırma, sonra şifreleme. Aksi takdirde, CR ≈ 1.
TDE/at-rest, CR ile etkileşime girmez (önceden sıkıştırılmış bir blok şifrelenir).
Transit (TLS) formatı etkilemez.
Sıkıştırmadan önce PII maskeleme/tokenizasyon, entropiyi yönetilebilir tutar.
OPE/DET şifrelemesine dikkat: CR'yi bozabilir ve/veya gizliliği riske atabilir.
10) Maliyet ve SLO (ekonomi)
Depolama: daha az bayt - $/TB-mo'dan daha az.
Hesaplama: daha az IO - daha hızlı taramalar; ancak dekompresyon CPU'yu boşa harcar.
Çıkış: daha az bayt - daha düşük trafik/kopyalama süresi.
SLO uzlaşması: 'p95 _ latency' hedef pencerede kalacak şekilde codec/level ile eşleşir.
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) Motorlar için uygulamalar (ClickHouse/Snowflake/BigQuery/Redshift/Presto)
ClickHouse: CODEC've hoparlörlerde (LZ4/ZSTD/DoubleDelta), RLE/taramalar için ORDER BY, TTL/sıkıştırma.
Snowflake/BigQuery: biçim/kümeleme otomasyonu; Yardım kümeleri (tarih, kiracı, filtre anahtarları).
Kırmızıya kayma/Presto/Trino: Parke/ZSTD ile ORC, 'kovan ayarı. Yönetici kompres. Çıktı ', istatistik ve dosya bölme.
12) Boru hatları: sıkıştırma nereye dahil edilir
Ingest: Göle yazarken sıkıştırılmış gruplar (ZSTD/LZ4).
Transform/DBT: İstediğiniz codec ve sıralama ile sütun hedefleri oluşturun.
Serve/OLAP: Uygun bir codec ile somutlaştırılmış görünümler; Sıcak panolar için ön kümeler.
Dışa aktarma: для CSV/JSON - gzip/zstd; Parquet'e vermek daha iyi.
13) Test ve doğrulama
AB profilleme: bir dizi istek - p50/p95'i karşılaştırın, baytlar taranır, CPU zamanı, CR.
Altın kümeler: yeniden kodlama/sıkıştırma işleminden sonra doğruluk kontrolü.
Bölge perf testleri: codec/level değişiminden sonra p95 ↑> X % olduğunda uyarılar.
DQ kuralları: tipler/aralıklar/NULL oranı yeniden yüklenirken değişmemelidir.
14) Saklama ve TTL politikaları
Katmanlı: sıcak (7-14 gün), sıcak (30-90 gün), soğuk (≥180 gün).
Altörnekleme: "Soğudukça", raw yerine birimleri/eskizleri saklayın.
Tutma/Yasal tutma: düzenlemelerle çatışmaları ortadan kaldırmayın; dizinleri ve sürümleri saklayın.
15) Antipatterns
"Her yerde Gzip seviye 9 ": pahalı CPU, hiçbir fayda.
Sıralama/kümeleme yok: kötü RLE/bölge haritaları - pahalı taramalar.
Bir depolama biçimi olarak JSON: yutmak için uygun, analitik için kötü.
Çok küçük dosyalar: meta verileri/arama; CR düşüyor.
Sıkıştırma öncesi şifreleme: Sıfıra yakın CR.
Kayıpsız işaretsiz: güven ve hesap verebilirlik ihlali.
16) Uygulama Yol Haritası
1. Keşif: sorgu/veri profilleri, SLO'lar ve bütçeler.
2. MVP: Parke + ZSTD/Çabuk, temel sıralama/kümeleme, sıkıştırma.
3. Ayarlama: ZSTD seviyeleri, sayfa boyutları, cluster by, bloom/zone-maps.
4. Sıcak/Soğuk: katmanlı depolama, altörnekleme/eskizler, çıkış politikaları.
5. Sertleşme: regresyon perf testleri, DQ, kod çözme runbooks.
17) Yayın öncesi kontrol listesi
- Biçim: Parke/ORC; İstatistik/sözlükler dahildir.
- Tuşları filtreleyerek kümeleme; Tarihe/kiracıya göre partiler.
- Kodekler: sıcak = Snappy/LZ4, sıcak/soğuk = ZSTD (3-7); P95 normaldir.
- Sıkıştırma kuruldu; Küçük dosyalar yok; hedef dosya/sayfa boyutları.
- DQ ve altın setleri yeşil; Türler/aralıklar kaydedildi.
- Sıkıştırma sonrası şifreleme; PII maskeli; Tutma/Yasal tutma yerine getirildi.
- Perf regresyonları izlenir; p95/bytes taranmış/CR tarafından uyarılar.
- Depolama politikası ve kod dönüştürme talimatları dokümantasyonu hazır.
18) Mini şablonlar
DBT (ZSTD ve kümeleme ile parke masa):sql create table if not exists analytics. sales_daily cluster by (event_date, tenant_id)
as select from {{ ref('sales_daily_view') }};
-- in model config: materialized = table, file_format=parquet, compression = zstd
Sıkıştırılmış politika (sözde):
yaml compaction:
target_file_mb: 256 small_file_threshold_mb: 32 schedule: "hourly"
Config altörnekleme (sözde):
yaml timeseries:
raw: keep: 14d rollup_1m: keep: 90d rollup_1h: keep: 365d rollup_1d: keep: 1825d
Alt satır: analitik veri sıkıştırma sadece "codec'i açma'değil, bütünsel bir stratejidir: doğru format, sütun kodlaması, sıralama ve bölümleme, sıkıştırma ve depolama seviyeleri, şifreleme ve SLO'ya saygı. Akıllı tasarım, verilere olan güvenden ödün vermeden daha hızlı taramalar, daha düşük sayımlar ve öngörülebilir performans sunar.