Analitik məlumatların sıxılması
1) Niyə analitik məlumatları sıxışdırmaq lazımdır
Sıxılma saxlama və trafikin həcmini azaldır, daha az IO və daha yaxşı caching sayəsində skanerləri sürətləndirir. Qiymət - CPU və (bəzən) yeniləmələrin mürəkkəbliyi. Məqsəd SLO altında optimal «IO, CPU, dəqiqlik və dəyərdir».
Əsas metriklər:- Compression Ratio (CR) = `raw_size / compressed_size`.
- Scan Cost ≈ bytes_scanned / throughput_storage + cpu_decode_time`.
- Total Cost = `storage_cost + compute_cost + egress_cost`.
2) Sıxılma yaşayan təbəqələr
1. Format səviyyəsində: Parquet/ORC/Avro (səhifələr/strayplar/sütunlar).
2. Enkodinq səviyyəsində sütunlar: Dictionary, RLE, Delta, FoR/Bit-packing, Gorilla/XOR.
3. Kodek səviyyəsində: ZSTD, Snappy, LZ4, Gzip.
4. Sorğu/mühərrik səviyyəsində: vektorizasiya, səhifə atlama (min/max), bloom/zone-map.
5. Saxlama səviyyəsində: tiered storage (hot/warm/cold), kompakt, page cache.
3) Sütun formatları və onların üstünlükləri
Parquet: sütunlara görə səhifələr; lüğət dəstəyi, RLE/Bit-packing, min/max statistika və null-count.
ORC: axınlarda indeksləri olan strayplar, bloom filtrləri; uzun taramalar üçün təsirli.
Avro (row): axın/log üçün əlverişli, analitik skanlar üçün daha pis.
Təcrübə: Default analitika üçün Parquet/ORC istifadə edin, kardinallığın aşağı/orta olduğu yerlərdə column stats və dictionary daxil edin.
4) Encoding sütunlar (lossless)
Dictionary: qiymətləri indekslərlə əvəz edir (aşağı kardinallıq üçün idealdır).
RLE (Run-Length Encoding): təkrarlanan dəyərlər → (value, run). Çeşidlənmiş/klasterləşdirilmiş sütunlar üçün yaxşıdır.
Delta/Delta-of-Delta: fərqləri saxlayır (ədədlər/vaxt).
FoR (Frame-of-Reference) + Bit-packing: qiymət = base + offset; offset N bitləri ilə dolu.
Gorilla/XOR (Time-series): dəyişən uzunluqlu qonşu dəyərlərin XOR saxlayır; metrik üçün yaxşı.
Nullable-bitmask: ayrı null's axını CR artırır.
Məsləhət: Filtrasiya açarları ilə əvvəlcədən klasterləşdirmə/çeşidləmə RLE/zone-maps və CR-ni kəskin şəkildə yaxşılaşdırır.
5) Ümumi təyinatlı kodeklər
ZSTD: mülayim CPU qiyməti ilə ən yaxşı CR; 1-22 səviyyələri dəstəkləyir. Universal seçim.
Snappy: sürətli, aşağı CR; yüksək oxu tezliyi ilə isti məlumatlar üçün uygundur.
LZ4: daha sürətli Snappy, oxşar CR; tez-tez - axın/log/cache üçün.
Gzip/Deflate: yüksək CR, yüksək qiymət CPU; nadir hallarda interaktiv analitikada haqlıdır.
Qayda: isti təbəqə - Snappy/LZ4, isti/soyuq - ZSTD (level 3-7).
6) Müvəqqəti sıralar və yuvalar
TSDB/sütun DD: nadir siqnallar üçün Gorilla/XOR, Delta-RLE-Bitmap, Sparse-run.
Log: JSON → Parquet + ZSTD; açarları və növləri normallaşdırın («string int» saxlamayın).
Downsampling və roll-ups (lossy): isti təbəqədə pəncərələr (1m/5m/1h) üzrə aqreqatları saxlayın; xam - soyuq.
Sketch strukturları: HLL (kardinallıq), TDigest/KLL (kvantillər), CMS (tezliklər) - kompakt, lakin yaxınlaşma.
7) Lossless vs Lossy (dəqiqliyi itirə biləcəyiniz zaman)
Lossless - hesabat, maliyyə, audit.
Lossy - monitorinq, böyük pəncərələrdə A/B analitikası, telemetriya (açıq işarə ilə!).
Keyfiyyət nəzarəti: icazə verilən səhv təyin edin (məsələn, P99 ± 0. 5 p.p.) və CI-də yoxlayın.
8) Partizan, səhifə və kompakşn
Partisia: tarix/region/tenant → daha az skan, daha yaxşı CR.
Səhifə/striptiz ölçüsü: Səhifə başına 64-256 KB, fayl başına 64-512 MB - seek və CPU arasında balans.
Kompakt: Kiçik faylları (small files problem) birləşdirin - CR və sürətdən yuxarı.
Zone-maps/Bloom: səhifə boşluqlarını sürətləndirir; filtrlərlə çeşidlənmədə effektivdir.
9) Sıxılma və şifrələmə/məxfilik
Əməliyyat qaydası: əvvəlcə sıxılma, sonra şifrələmə. Əks halda CR ≈ 1.
TDE/at-rest CR-ə mane olmur (artıq sıxılmış blok şifrələnir).
In-transit (TLS) formata təsir etmir.
Sıxılmadan əvvəl PII maskalanması/tokenizasiyası idarə olunan entropiyanı saxlayır.
OPE/DET şifrələmə ilə diqqətli olun: CR-ni pisləşdirə və/və ya məxfiliyi riskə ata bilər.
10) Qiymət və SLO (iqtisadiyyat)
Storage: az bayt → aşağı $/TB-mo.
Compute: daha az IO → daha sürətli scan; lakin dekompressiya CPU xərcləyir.
Egress: az bayt → aşağı trafik/nüsxə vaxt.
SLO güzəşti: codec/level seçin ki, 'p95 _ latency' hədəf pəncərəsində qalsın.
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) Mühərriklər üçün təcrübələr (ClickHouse/Snowflake/BigQuery/Redshift/Presto)
ClickHouse: CODEC 'və sütunlarda (LZ4/ZSTD/DoubleDelta), RLE/skanlar üçün ORDER BY, TTL/kompakt.
Snowflake/BigQuery: formatların avtomatlaşdırılması/klasterləşdirilməsi; cluster by kömək (tarix, tenant, filter açarları).
Redshift/Presto/Trino: ZSTD ilə Parquet/ORC, hive. exec. compress. output ', statistika və faylların ayrılması.
12) Payplays: harada sıxılma daxil
Ingest: lake yazarkən sıxılmış batches (ZSTD/LZ4).
Transform/DBT: İstədiyiniz codec və çeşidləmə ilə sütunlu hədəflər yaradın.
Serve/OLAP: uyğun codec ilə materiallaşdırılmış performans; isti dashboard üçün ön aqreqatlar.
Export: для CSV/JSON — gzip/zstd; Parquet vermək daha yaxşıdır.
13) Test və validasiya
AB profili: sorğular dəsti → p50/p95, bytes scanned, CPU vaxt, CR müqayisə.
Golden-sets: transcoding/kompakt sonra düzgünlüyünü yoxlamaq.
Regression perf tests: codec/səviyyə dəyişikliyindən sonra p95 ↑> X% əgər alert.
DQ qaydaları: növləri/diapazonları/NULL-rate yerdəyişmə zamanı dəyişməməlidir.
14) Saxlama siyasəti və TTL
Tiered: hot (7-14 gün) , warm (30-90 gün) , cold (≥ 180 gün) .
Downsampling: «soyuduqca» xam əvəzinə aqreqatları/eskizləri saxlayın.
Retention/Legal hold: standartlarla ziddiyyətləri aradan qaldırmayın; kataloqlar və versiyalar saxlayın.
15) Antipattern
«Hər yerdə Gzip level 9 «: bahalı CPU, heç bir fayda.
Heç bir çeşidləmə/klasterləşdirmə: pis RLE/zone-maps → skanerlər bahalıdır.
JSON saxlama formatı kimi: ingest üçün əlverişli, analitika üçün pis.
Çox kiçik fayllar: metadata/seek şişirtmək; CR düşür.
Sıxılmadan əvvəl şifrələmə: demək olar ki, sıfır CR.
Etiketsiz Lossy: etimad və hesabatın pozulması.
16) Tətbiqi yol xəritəsi
1. Discovery: sorğu/məlumat profilləri, SLO və büdcələr.
2. MVP: Parquet + ZSTD/Snappy, əsas çeşidləmə/klasterləşdirmə, kompakşn.
3. Tuning: ZSTD səviyyələri, səhifə ölçüləri, cluster by, bloom/zone-maps.
4. Warm/Cold: tiered storage, downsampling/eskizləri, egress siyasəti.
5. Hardening: regressiya perf testlər, DQ, runbooks transcoding.
17) Buraxılışdan əvvəl çek siyahısı
- Format: Parquet/ORC; daxil statistik/lüğət.
- Filtrasiya açarları ilə klaster; partiya tarixi/tenant.
- Codec: hot = Snappy/LZ4, warm/cold = ZSTD (3-7); p95 normal.
- Kompakt konfiqurasiya; heç bir small files; hədəf fayl/səhifə ölçüləri.
- DQ və qızıl dəstləri yaşıl; növləri/diapazonları saxlanılır.
- Sıxıldıqdan sonra şifrləmə; PII maskalı; retenshn/legal-hold riayət olunur.
- Perf-reqressiya izlənilir; p95/bytes scanned/CR.
- Saxlama siyasəti və kodlaşdırma təlimatlarının sənədləşdirilməsi hazırdır.
18) Mini şablonlar
DBT (ZSTD və klasterləşdirmə ilə Parquet cədvəli):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
Kompakşn siyasəti (psevdo):
yaml compaction:
target_file_mb: 256 small_file_threshold_mb: 32 schedule: "hourly"
downsampling (psevdo):
yaml timeseries:
raw: keep: 14d rollup_1m: keep: 90d rollup_1h: keep: 365d rollup_1d: keep: 1825d
Nəticə: analitik məlumatların sıxılması yalnız «kodeki daxil etmək» deyil, bütövlükdə strategiyadır: düzgün format, sütunların enkodinqi, çeşidləmə və partizanlaşdırma, kompakşn və saxlama səviyyələri, şifrələmə və SLO-ya hörmət. Səriştəli dizayn daha sürətli skanerlər, aşağı hesablama və proqnozlaşdırıla bilən performans verir - məlumatlara inamla kompromis olmadan.