GH GambleHub

Komprimierung analytischer Daten

1) Warum analytische Daten komprimieren

Die Komprimierung reduziert Speicherplatz und Datenverkehr, beschleunigt Scans durch weniger IO und bessere Cache-Fähigkeit. Der Preis ist die CPU und (manchmal) die Komplexität der Updates. Das Ziel ist das optimale „IO↔CPU↔tochnost↔stoimost“ für Ihre SLOs.

Grundlegende Metriken:
  • 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) Schichten, in denen Kompression lebt

1. Auf Formatebene: Parkett/ORC/Avro (Seiten/Stripes/Spalten).
2. Auf der Encoding-Ebene der Spalte: Dictionary, RLE, Delta, FoR/Bit-packing, Gorilla/XOR.
3. Auf Codec-Ebene: ZSTD, Snappy, LZ4, Gzip.
4. Auf der Abfrage-/Engine-Ebene: Vectoring, Seitensprung (min/max), bloom/zone-map.
5. Auf Speicherebene: tiered storage (hot/warm/cold), compaction, page cache.


3) Säulenformate und ihre Vorteile

Parkett: Seiten nach Spalten; Unterstützung für Wörterbücher, RLE/Bit-packing, min/max statistics und null-count.
ORC: Stripes mit Indizes auf Streams, Bloom-Filter; wirksam für lange Scans.
Avro (Zeile): bequem für Stream/Logs, schlechter für analytische Scans.

Übung: Verwenden Sie für Standardanalysen Parkett/ORC, aktivieren Sie column stats und dictionary, wenn die Kardinalität niedrig/mittel ist.


4) Codierung von Spalten (lossless)

Wörterbuch: Ersetzt Werte durch Indizes (ideal für niedrige Kardinalität).
RLE (Run-Length Encoding): sich wiederholende → (value, run). Gut für sortierte/gruppierte Spalten.
Delta/Delta-of-Delta: speichert die Differenzen (Zahlen/Zeit).
FoR (Frame-of-Reference) + Bit-packing: Wert = base + offset; offset ist mit N Bits gepackt.
Gorilla/XOR (Zeitreihe): speichert die XOR der benachbarten Werte mit variabler Länge; gut für Metriken.
Nullbare Bitmasks: Ein separater Null '-Stream erhöht den CR.

Tipp: Das Pre-Clustering/Sortieren nach Filterschlüsseln verbessert RLE/Zone-Maps und CR drastisch.


5) Allzweck-Codecs

ZSTD: bester CR bei moderatem CPU-Preis; unterstützt die Ebenen 1-22. Eine universelle Wahl.
Snappy: schneller, niedriger CR; geeignet für heiße Daten mit hoher Leserate.
LZ4: noch schneller Snappy, ähnlich CR; häufig - für Stream/Logs/Caches.
Gzip/Deflate: hoher CR, hoher CPU-Preis; selten in der interaktiven Analyse gerechtfertigt.

Regel: Heiße Schicht - Snappy/LZ4, warm/kalt - ZSTD (Level 3-7).


6) Zeitreihen und Protokolle

TSDB/column DB: Gorilla/XOR, Delta-RLE-Bitmap, Sparse-Run für seltene Signale.
Logs: JSON→Parquet + ZSTD; Schlüssel und Typen normalisieren (nicht „String int“ speichern).
Downsampling und Roll-ups (lossy): Speichern Sie die Aggregate nach Fenster (1m/5m/1h) in einer heißen Schicht; roh - in der Kälte.
Sketch-Strukturen: HLL (Kardinalität), TDigest/KLL (Quantile), CMS (Frequenzen) - kompakt, aber approximativ.


7) Lossless vs Lossy (wenn Sie die Genauigkeit verlieren können)

Lossless - Reporting, Finanzen, Wirtschaftsprüfung.
Lossy - Überwachung, A/B-Analyse an großen Fenstern, Telemetrie (mit expliziten Markierungen!).
Qualitätskontrolle: Stellen Sie den zulässigen Fehler ein (z. B. P99 ± 0. 5 PP) und überprüfen Sie es in CI.


8) Partizipation, Seiten und Kompositionen

Parties: nach Datum/Region/Tenant → weniger Scans, besser CR.
Seitengröße/Stripe: 64-256 KB pro Seite, 64-512 MB pro Datei - Balance zwischen Seek und CPU.
Compaction: Kombinieren Sie kleine Dateien (kleines Dateiproblem) - über CR und Geschwindigkeit.
Zone-Maps/Bloom: beschleunigen Seitenlücken; wirksam beim Sortieren nach Filtern.


9) Komprimierung und Verschlüsselung/Privatsphäre

Die Reihenfolge der Operationen: erst komprimieren, dann verschlüsseln. Der CR ≈ 1.
TDE/at-rest stört den CR nicht (der bereits komprimierte Block wird verschlüsselt).
In-transit (TLS) hat keinen Einfluss auf das Format.
Die Maskierung/Tokenisierung der PII vor der Kompression hält die Entropie beherrschbar.
Vorsicht bei OPE/DET-Verschlüsselung: Kann den CR beeinträchtigen und/oder die Privatsphäre gefährden.


10) Kosten und SLO (Wirtschaft)

Speicher: weniger Bytes → unter $/TB-mo.
Compute: Weniger IO → schnellere Scans aber Dekompression verschwendet CPU.
Egress: weniger Bytes → weniger Verkehr/Zeit Kopien.
SLO-Kompromiss: Codec/Level so anpassen, dass' p95 _ latency 'im Zielfenster bleibt.

Beispiel für eine Richtlinie (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) Praktiken für Motoren (ClickHouse/Snowflake/BigQuery/Redshift/Presto)

ClickHouse: CODEC ™ und auf den Lautsprechern (LZ4/ZSTD/DoubleDelta), ORDER BY für RLE/Scans, TTL/Compaction.
Snowflake/BigQuery: Format-Automatisierung/Clustering; Hilfe cluster by (Datum, Tenant, Filterschlüssel).
Redshift/Presto/Trino: Parkett/ORC mit ZSTD, Einstellung 'hive. exec. compress. output', Statistiken und Dateitrennung.


12) Piplines: Wo man Kompression einschließt

Ingest: Komprimierte Batches (ZSTD/LZ4) beim Schreiben in einen See.
Transform/DBT: Erstellen Sie Säulenziele mit dem richtigen Codec und Sortierung.
Serve/OLAP: materialisierte Ansichten mit geeignetem Codec; Voreinheiten für heiße Dashboards.
Export: для CSV/JSON — gzip/zstd; Es ist besser, Parkett zu geben.


13) Prüfung und Validierung

AB-Profiling: Eine Reihe von Abfragen → p50/p95, Bytes gescannt, CPU-Zeit, CR verglichen werden.
Golden-Kits: Überprüfung der Korrektheit nach Transcodierung/Compacking.
Regression perf tests: Alerts, wenn p95 ↑> X% nach Codec/Level-Änderung.
DQ-Regeln: Typen/Bereiche/NULL-Rate darf sich beim Verschieben nicht ändern.


14) Aufbewahrungs- und TTL-Richtlinien

Tiered: heiß (7-14 Tage) , warm (30-90 Tage) cold (≥180 Tage) .
Downsampling: Wenn Sie „abkühlen“, speichern Sie die Einheiten/Skizzen anstelle von roh.
Retention/Legal Hold: Kollisionen mit Vorschriften nicht entfernen; Verzeichnisse und Versionen speichern.


15) Antipatterns

„Überall Gzip Level 9 „: teure CPU, kein Vorteil.
Keine Sortierung/Clustering: schlechte RLE/zone-maps → Scans sind teuer.
JSON als Speicherformat: praktisch für ingest, schlecht für Analytics.
Zu kleine Dateien: Aufblähen von Metadaten/seek; CR fällt.
Verschlüsselung vor Komprimierung: fast null CR.
Lossy ohne Kennzeichnung: Vertrauensbruch und Berichterstattung.


16) Fahrplan für die Umsetzung

1. Discovery: Anforderungs-/Datenprofile, SLOs und Budgets.
2. MVP: Parkett + ZSTD/Snappy, Basic Sorting/Clustering, Compaction.
3. Tuning: ZSTD-Level, Seitengrößen, Cluster by, bloom/zone-maps.
4. Warm/Kalt: Tiered Storage, Downsampling/Skizzen, Egress-Policies.
5. Hardening: Regressions-Perf-Tests, DQ, runbooks transcoding.


17) Checkliste vor Veröffentlichung

  • Format: Parkett/ORC; Statistiken/Wörterbücher enthalten.
  • Clustering durch Filterschlüssel; Parties nach Datum/Tenant.
  • Codecs: hot = Snappy/LZ4, warm/cold = ZSTD (3-7); p95 ist normal.
  • Compaction konfiguriert; keine kleinen Dateien; Zieldatei-/Seitengrößen.
  • DQ und Golden-Sets grün; Typen/Bereiche werden gespeichert.
  • Verschlüsselung nach der Komprimierung; PII sind maskiert; retention/Legal-hold eingehalten werden.
  • Perf-Regressionen werden überwacht; alerts von p95/bytes scanned/CR.
  • Die Dokumentation der Aufbewahrungsrichtlinie und der Umcodierungsanweisungen ist fertig.

18) Mini-Vorlagen

DBT (Parketttabelle mit ZSTD und Clustering):
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
Politik kompakt (pseudo):
yaml compaction:
target_file_mb: 256 small_file_threshold_mb: 32 schedule: "hourly"
Config Downsampling (Pseudo):
yaml timeseries:
raw:  keep: 14d rollup_1m: keep: 90d rollup_1h: keep: 365d rollup_1d: keep: 1825d

Fazit: Bei der Komprimierung analytischer Daten geht es nicht nur um „Enable Codec“, sondern um eine ganzheitliche Strategie: Das richtige Format, Codierung der Spalten, Sortierung und Partitionierung, Komprimierung und Speicherebenen, Respekt vor Verschlüsselung und SLO. Ein kompetentes Design sorgt für schnellere Scans, niedrigere Punktzahl und vorhersehbare Leistung - ohne Kompromisse beim Vertrauen in die Daten.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.