דחוס נתונים אנליטיים
1) מדוע לדחוס נתונים אנליטיים
דחיסה מפחיתה אחסון ותנועה, מהירויות סריקות עם פחות IO ומזומנים טובים יותר. המחיר הוא מעבד (לפעמים) המורכבות של עדכונים. המטרה היא ה ”IO↔CPU↔tochnost↔stoimost” האופטימלי עבור ה-SLOs שלך.
מדדי בסיס:- יחס דחיסה (CR) = "raw _ size/ compressed_size'.
- סרוק עלות bytes_scanned/ throughput_storage + cpu_decode_time'.
- עלות כוללת = "אחסון _ עלות + compute_cost + egress_cost'.
2) שכבות שבהן הדחיסה חיה
1. ברמת הפורמט: Parquet/ORC/Avro (עמודים/פסים/עמודות).
2. ברמת הקידוד של הטור: Dictionary, RLE, Delta, FoR/Bit-Arking, Gorilla/XOR.
3. ברמת קודקוד: ZSTD, סנאפי, LZ4, Gzip.
4. ברמת השאילתה/מנוע: וקטוריזציה, דילוג על עמוד (מין/מקס), פריחה/מפת אזור.
5. ברמת האחסון: אחסון ממוקד (חם/חם/קר), דחיסה, מטמון דף.
3) פורמטים של עמודות והיתרונות שלהן
פרקה: עמודי עמודים; תמיכה במילונים, אריזות RLE/Bit, סטטיסטיקות min/max ו-null-ספירה.
אורק: רצועות עם אינדקסים על נחלים, פילטרים פורחים; יעיל לסריקות ארוכות.
Avro (שורה): נוח עבור זרם/יומנים, גרוע יותר עבור סריקות אנליטיות.
תרגול: עבור ניתוח ברירת המחדל, השתמש ב ־ Parquet/ORC, כולל סטטיסטיקות עמודות ומילון שבו הקרדינליות נמוכה/בינונית.
4) קידוד עמודות (ללא מפסיד)
מילון-החלפת ערכים באינדקסים (אידיאל לקרדינליות נמוכה).
RLE (קידוד באורך ריצה) - לשכפל את ערכי ה- (value, run). טוב עבור עמודות ממוינות/מקובצות.
דלתא/דלתא-of-Delta: מאחסן הבדלים (מספרים/זמנים).
FoR (פריים-of-Reference) + ביט-אריזה: ערך = בסיס + offset; הקיזוז מלא בחתיכות.
גורילה/XOR (סדרת זמן): מאחסן XOR של ערכים שכנים בעלי אורך משתנה; טוב למדדים.
bitmasks nulable: זרם נפרד של nulls מגדיל CR.
טיפ: קדם התקבצות/סינון מיון מקשים משפר באופן דרמטי את RLE/המפות האזוריות ואת CR.
5) קודקודי מטרה כלליים
ZSTD: CR הטוב ביותר במחיר מתון של מעבד; תומך ברמות 1-22. בחירה אוניברסלית.
סנאפי: מהיר, CR נמוך; מתאים לנתונים חמים עם תדירות קריאה גבוהה.
LZ4: Snappy אפילו מהר יותר, CR דומה; לעתים קרובות לזרם/יומנים/מטמונים.
Gzip/Deflate: CR גבוה, מחיר גבוה של מעבד; לעיתים נדירות מוצדק באנליטיקה אינטראקטיבית.
כלל: שכבה חמה - Snappy/LZ4, חמה/קרה - ZSTD (רמה 3-7).
6) סדרת זמן ויומנים
מסדי נתונים של TSDB/טור: Gorilla/XOR, דלתא-RLE-Bitmap, Sparse-run לאותות נדירים.
יומנים: JSON * Parquet + ZSTD; לנרמל מפתחות וסוגים (לא לאחסן ”מחרוזת”).
מגלגלים (lossy): לאחסן יחידות על ידי חלונות (1m/5m/1h) בשכבה חמה; גולמי - בקור.
מבני שרטוט: HLL (קרדינליות), TDignet/KLL (כמויות), CMS (תדרים) - קומפקטי, אך משוער.
7) Lossless vs. Lossy (כאשר אתה יכול לאבד דיוק)
ללא הפסד, דיווח, מימון, ביקורת חשבונות.
ניטור לוסי, ניתוח A/B על חלונות גדולים, טלמטריה (עם סימון מפורש!).
בקרת איכות: להגדיר את הסובלנות (למשל. P99 NAN0. 5 pp) ולבדוק את זה במודיע.
8) מחיצה, עמודים ודפוס
צדדים: לפי תאריך/אזור/דייר = פחות סריקות, CR טוב יותר.
גודל עמוד/פס: 64-256 KB לדף, 64-512 MB לקובץ - איזון בין חיפוש למעבד.
דחיפה: לשלב בעיות קבצים קטנים - מעל CR ומהירות.
מפות אזור/בלום: להאיץ את מדלגים עמוד; יעיל במיון על ידי מסננים.
9) דחיסה והצפנה/פרטיות
סדר הפעולות: דחיסה ראשונה, ואז הצפנה. אחרת, סי-אר 1.
TDE/at-rest אינו מפריע ל ־ CR (בלוק דחוס כבר מוצפן).
טרנזיט (TLS) אינו משפיע על הפורמט.
הסוואת PII/tokenization לפני הדחיסה שומרת על האנטרופיה ניתנת לניהול.
זהירות עם הצפנת OPE/DET: עשויה להשפיל CR ו/או לסכן פרטיות.
10) עלות ו ־ SLO (כלכלה)
אחסון: פחות בייטים = פחות מ $/TB-mo.
חישוב: פחות IO # סריקות מהירות יותר; אבל הפחתת לחץ מבזבזת את המעבד.
Egress: פחות bytes = תנועה נמוכה יותר/זמן העתק.
SLO פשרה: להתאים את קודק/רמה כך ש ”p95 _ latency” נשאר בחלון היעד.
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)
CODEC 'ועל רמקולים (LZ4/ZSTD/Doubleta), סדר BY עבור RLE/סריקות, TTL/דחיסה.
פתית שלג/ביגקווירי: פורמט/אוטומציה מקובצת; עזרה אשכול ידי (תאריך, דייר, מסנן מפתחות).
Redshift/Presto/Trino: Parquet/ORC עם ZSTD, הגדרת כוורת. ביצוע. דחוס. פלט, סטטיסטיקה ופיצול קבצים.
12) צינורות: היכן לכלול דחיסה
צרור דחוס (ZSTD/LZ4) בעת כתיבה לאגם.
Transform/DBT: צור מטרות עמודה עם קודק רצוי ומיון.
SERVE/OLAP: תצוגות ממשיות עם קוד מתאים; קדם אגרגטים ללוחות מחוונים לוהטים.
ייצוא: itsCSV/JSON - gzip/zstd; עדיף לתת לפרקט.
13) בדיקה ואימות
פרופיל AB: קבוצה של בקשות = השווה p50/p95, בייטים סרוקים, זמן מעבד, CR.
סט זהב: בדיקת תקינות לאחר התאוששות/דחיסה.
בדיקות איזור perf: התראות אם p95> X% לאחר שינוי קודק/רמה.
כללי DQ: סוגים/טווחים/NULL-rate לא אמורים להשתנות בעת טעינה מחדש.
14) שימור ומדיניות TTL
משובץ: חם (7-14 ימים), חם (30-90 ימים), קר (180 ימים).
למטה: כשאתה ”מתקרר”, לאחסן יחידות/סקיצות במקום גלם.
אחיזה/משפט: אל תסיר התנגשויות עם תקנות; ספריות וגרסאות.
15) תרופות אנטי ־ פטריות
”בכל מקום רמת Gzip 9 ”: מעבד יקר, אין תועלת.
אין מיון/התקבצות: RLE רע/מפות איזור = = סריקות יקרות.
JSON כתבנית אחסון: נוח לבלוע, רע לאנליטיקה.
קבצים קטנים מדי: לנפח מטא/לחפש; סי-אר נופל.
הצפנת קדם-דחיסה: קרוב לאפס CR.
הפרת אמון ואחריות.
16) מימוש מפת דרכים
1. תגלית: שאילתות/פרופילי נתונים, SLOs, ותקציבים.
2. MVP: Parquet + ZSTD/Snappy, מיון/התקבצות בסיסי.
3. כוונון: רמות ZSTD, גדלי עמודים, אשכול אחר, פריחה/מפות אזור.
4. חם/קר: אחסון מרוכז, ירידה/סקיצות, מדיניות יציאה.
5. התקשות: נסיגה במבחני perf, DQ, טרנסקודינג ספרים.
17) רשימת בדיקות טרום הוצאה לאור
[ ] Format: Parquet/ORC; סטטיסטיקה/מילונים כלולים.
[ ] התקבצות באמצעות סינון מפתחות; מסיבות לפי תאריך/דייר.
[ ] קודקים: חם = Snappy/LZ4, חם/קר = ZSTD (3-7); p95 זה נורמלי.
[ ] הדחיסה מוגדרת; קבצים לא קטנים; גודל קובץ היעד/דף.
[ ] DQ וסטים מוזהבים הם ירוקים; סוגים/טווחים נשמרו.
[ הצפנה ] לאחר דחיסה; PII רעולי פנים; שימור/אחיזה משפטית ציית.
[ רגרסיות ] פרף מנוטרות; התראות על ידי p95/bytes נסרק/CR.
[ מדיניות האחסון וההוראות ] מוכנות.
18) תבניות מיני
DBT (שולחן פרקט עם ZSTD וקיבוצים):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. עיצוב חכם מספק סריקות מהירות יותר, ספירות נמוכות יותר וביצועים צפויים - מבלי להתפשר אמון בנתונים.