GH GambleHub

Comprimarea datelor analitice

1) De ce comprima date analitice

Compresia reduce stocarea și traficul, vitezele scanează cu mai puțin IO și o mai bună cache. Prețul este CPU și (uneori) complexitatea actualizărilor. Scopul este „IO↔CPU↔tochnost↔stoimost” optimă pentru SLO-urile tale.

Valori de bază:
  • Raportul de compresie (CR) = 'raw _ size/ compressed_size'.
  • Cost de scanare ≈ bytes_scanned/ throughput_storage + cpu_decode_time'.
  • Cost total = 'stocare _ cost + compute_cost + egress_cost'.

2) Straturi în care trăiește compresia

1. La nivel de format: Parchet/ORC/Avro (pagini/dungi/coloane).
2. La nivelul de codare al coloanei: Dicționar, RLE, Delta, FoR/Bit-packing, Gorilla/XOR.
3. La nivel de codec: ZSTD, Snappy, LZ4, Gzip.
4. La nivel de interogare/motor: vectorizare, pagina sărind peste (min/max), bloom/zone-map.
5. La nivel de depozitare: depozitare pe niveluri (cald/cald/rece), compresie, memorie cache pagină.


3) Formate de coloane și avantajele lor

Parchet: pagini coloană; suport dicționar, RLE/Bit-ambalare, min/max statistici și null-count.
ORC: benzi cu indici pe fluxuri, filtre de floare; eficient pentru scanări lungi.
Avro (rând): convenabil pentru flux/busteni, mai rău pentru scanări analitice.

Practică: Pentru analiza implicită, utilizați Parchet/ORC, includeți statisticile coloanelor și dicționarul în care cardinalitatea este scăzută/medie.


4) Codificări coloană (fără pierderi)

Dicționar-Înlocuiește valorile cu indici (ideal pentru cardinalitate scăzută).
RLE (Run-Length Encoding) - duplicat valori → (valoare, rula). Bun pentru coloane sortate/grupate.
Delta/Delta-of-Delta: stochează diferențe (numere/ori).
FoR (Frame-of-Reference) + Bit-packing: value = base + offset; offset este ambalat cu N biți.
Gorila/XOR (Time-series): stochează XOR de valori vecine cu lungime variabilă; bun pentru măsurători.
Nullable bitmasks: un flux separat de null-uri crește CR.

Sfat: Pre-gruparea/filtrarea cheii de sortare îmbunătățește dramatic RLE/zone-maps și CR.


5) Codec-uri de uz general

ZSTD: cel mai bun CR la preț moderat CPU; suportă nivelurile 1-22. Alegere universală.
Snappy: rapid, scăzut CR; potrivit pentru date fierbinți cu frecvență înaltă de citire.
LZ4: Snappy chiar mai repede, similar CR; de multe ori - pentru flux/busteni/cache.
Gzip/Deflate: CR ridicat, preț ridicat CPU; rareori justificate în analiza interactivă.

Regula: strat fierbinte - Snappy/LZ4, cald/rece - ZSTD (nivel 3-7).


6) Seria de timp și jurnalele

Baze de date TSDB/coloană: Gorilla/XOR, Delta-RLE-Bitmap, Rarse-run pentru semnale rare.
Jurnale: JSON→Parquet + ZSTD; normalizați cheile și tipurile (nu păstrați "string int').
Sub-eșantionare și roll-up-uri (lossy): depozitați unități de ferestre (1m/5m/1h) într-un strat fierbinte; crud - în frig.
Structuri schiță: HLL (cardinalitate), TDistest/KLL (cantități), CMS (frecvențe) - compact, dar aproximativ.


7) Lossless vs Lossy (când puteți pierde precizia)

Fără pierderi - raportare, finanțe, audit.
Lossy - monitorizare, analiza A/B pe ferestre mari, telemetrie (cu marcaj explicit!).
Controlul calității: setați toleranța (de ex. P99 ± 0. 5 pp) și verificați-l în CI.


8) Partiționare, pagini și compactare

Părți: până la data/regiune/chiriaș → mai puține scanări, mai bine CR.
Dimensiunea paginii/bandă: 64-256 KB pe pagină, 64-512 MB pe fișier - echilibru între căutare și procesor.
Compactare: combina problema fișierelor mici - peste CR și viteza.
Zone-maps/Bloom: accelerați săriturile pe pagină; eficiente în sortarea după filtre.


9) Compresie și criptare/confidențialitate

Ordinea operațiunilor: prima compresie, apoi criptare. În caz contrar, CR ≈ 1.
TDE/at-rest nu interferează cu CR (un bloc deja comprimat este criptat).
In-transit (TLS) nu afectează formatul.
PII mascare/tokenization înainte de compresie păstrează entropia ușor de gestionat.
Atenție la criptarea OPE/DET: poate degrada CR și/sau risca confidențialitatea.


10) Cost și SLO (economie)

Depozitare: mai puțini octeți → mai puțin de $/TB-mo.
Calcul: mai puțin IO → scanări mai rapide; dar decompresia iroseşte procesorul.
Ieșire: mai puțini octeți → timp de trafic/copiere mai mic.
Compromis SLO: potriviți codecul/nivelul astfel încât „p95 _ latency” să rămână în fereastra țintă.

Exemplu de politică (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) Practici pentru motoare (ClickHouse/Fulg de zăpadă/BigQuery/Deplasare spre roșu/Presto)

ClickHouse: CODEC 'și pe difuzoare (LZ4/ZSTD/DoubleDelta), COMANDĂ pentru RLE/scanări, TTL/compresie.
Fulg de nea/BigQuery: format/automatizare grupare; ajutor cluster de (data, chiriaș, chei de filtrare).
Deplasare spre roșu/Presto/Trino: Parchet/ORC cu ZSTD, setare 'stup. exec. compress. ieșire ", statistici și divizarea fișierelor.


12) Conducte: în cazul în care pentru a include compresie

Ingera: loturi comprimate (ZSTD/LZ4) atunci când se scrie la lac.
Transformați/DBT: creați obiective de coloană cu codecul dorit și sortarea.
Serviți/OLAP: vizualizări materializate cu un codec adecvat; pre-agregate pentru tablouri de bord fierbinți.
Export: для CSV/JSON - gzip/zstd; mai bine să dea la parchet.


13) Testarea și validarea

Profilare AB: un set de cereri de comparare → p50/p95, octeți scanați, timp procesor, CR.
Seturi de aur: verificarea corectitudinii după recodare/comprimare.
Teste perf regiune: alerte dacă p95 ↑> X% după schimbarea codec/nivel.
Reguli DQ: tipurile/intervalele/rata NULL nu trebuie să se schimbe la reîncărcare.


14) Politici de retenție și TTL

Nivelat: cald (7-14 zile), cald (30-90 zile), rece (≥180 zile).
Sub-eșantionare: Pe măsură ce „răciți”, depozitați unități/schițe în loc de crude.
Păstrare/Păstrare legală: nu înlăturați conflictele cu reglementările; stoca directoare și versiuni.


15) Antipattern

„Peste tot nivelul Gzip 9 „: procesor scump, nici un beneficiu.
Fără sortare/grupare: RLE/zone-hărți proaste → scanări scumpe.
JSON ca format de stocare: convenabil pentru ingerare, rău pentru analiză.
Fișiere prea mici: umflați metadatele/căutați; CR cade.
Criptare pre-comprimare: CR aproape zero.
Lossy nemarcat: încălcarea încrederii și responsabilității.


16) Foaia de parcurs privind implementarea

1. Descoperire: profiluri de interogare/date, SLO-uri și bugete.
2. MVP: Parchet + ZSTD/Snappy, sortare/grupare de bază, compactare.
3. Tuning: nivelurile ZSTD, dimensiunile paginii, cluster by, bloom/zone-maps.
4. Cald/rece: depozitare pe niveluri, sub-eșantionare/schițe, politici de ieșire.
5. Întărire: teste de regresie perf, DQ, transcodare runbooks.


17) Lista de verificare înainte de lansare

  • Format: Parchet/ORC; statistici/dicționare incluse.
  • Gruparea prin filtrarea cheilor; părți după dată/chiriaș.
  • Codec-uri: fierbinte = Snappy/LZ4, cald/rece = ZSTD (3-7); p95 este normal.
  • Compresia este configurată; fără fișiere mici; dimensiunile fișierului/paginii țintă.
  • DQ și seturile de aur sunt verzi; tipuri/intervale salvate.
  • Criptare după compresie; PII mascat; păstrare/deținere legală respectată.
  • Regresiile Perf sunt monitorizate; alerte prin p95/octeți scanați/CR.
  • Politica de stocare și transcodarea documentației instrucțiunilor este gata.

18) Mini șabloane

DBT (masă de parchet cu ZSTD și grupare):
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
Politica compactată (pseudo):
yaml compaction:
target_file_mb: 256 small_file_threshold_mb: 32 schedule: "hourly"
Sub-eșantionare de configurare (pseudo):
yaml timeseries:
raw:  keep: 14d rollup_1m: keep: 90d rollup_1h: keep: 365d rollup_1d: keep: 1825d

Linia de fund: compresia analitică a datelor nu este doar „porniți codecul”, ci o strategie holistică: formatul corect, codarea coloanelor, sortarea și partiționarea, nivelurile de compresie și stocare, respectul pentru criptare și SLO. Designul inteligent oferă scanări mai rapide, număr mai mic și performanță previzibilă - fără a compromite încrederea în date.

Contact

Contactați-ne

Scrieți-ne pentru orice întrebare sau solicitare de suport.Suntem mereu gata să ajutăm!

Pornește integrarea

Email-ul este obligatoriu. Telegram sau WhatsApp sunt opționale.

Numele dumneavoastră opțional
Email opțional
Subiect opțional
Mesaj opțional
Telegram opțional
@
Dacă indicați Telegram — vă vom răspunde și acolo, pe lângă Email.
WhatsApp opțional
Format: cod de țară și număr (de exemplu, +40XXXXXXXXX).

Apăsând butonul, sunteți de acord cu prelucrarea datelor dumneavoastră.