Վերլուծական տվյալների սեղմումը
1) Ինչու՞ սեղմել վերլուծական տվյալները
Սեղմումը նվազեցնում է պահեստավորման և պահեստավորման ծավալը, արագացնում է անիվները ավելի փոքր IO-ի և ավելի լավ քեշիրացման պատճառով։ Գինը CPU-ն է և (երբեմն) մրցույթի բարդությունը։ Նպատակը IO www.CPU-ի լավատեսությունն է ձեր SLO-ի տակ։
Հիմնական մետրերը
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) Շերտեր, որտեղ ապրում է սեղմումը
1. Ձևաչափի մակարդակում 'Parquet/ORC/Avro (էջ/սթրիփներ/սյունակներ)։
2. Էնկոդինգի մակարդակում սյուները ՝ Dictionary, RLE, Delta, FoR/Bit-packing, Gorilla/XOR։
3. Թողարկման մակարդակում 'ZSTD, Snappy, LZ4, Gzip։
4. Հարցման/շարժիչի մակարդակում 'վեկտորիզացիա, էջեր (min/max), bloom/zone-map։
5. Պահեստավորման մակարդակում 'tiered storage (hot/warm/cold), կոմպակշն, page cache։
3) Ոսկեզօծ պարամետրերը և նրանց առավելությունները
Parquet: Էջեր սյուներով; սլովարների աջակցություն, RLE/Bit-packing, min/max վիճակագրությունը և national-count։
ORC: սթրիփներ, որոնք ունեն ինդեքսներ, բլոում ֆիլտրեր։ արդյունավետ է երկար սկանների համար։
Avro (row): հարմար է սթրիմի/լոգարանների համար, ավելի վատ է վերլուծական սկանների համար։
Պրակտիկա 'լռելյայն վերլուծաբանների համար օգտագործեք Parquet/ORC-ը, միացրեք column stats և dictionary, որտեղ կարդինալությունը ցածր/միջին է։
4) Էնկոդինգները (lossless)
Dictionary: փոխարինում է արժեքները ինդեքսներով (իդեալական է ցածր կարդինալության համար)։
RLE (Run-Length Encoding) 'կրկնվող հաճախորդների արժեքները (value, run)։ Լավ է տեսակավորված/կլաստավորված գաղութների համար։
Delta/Delta-of-Delta: պահպանում է տարբերությունները (թվեր/ժամանակ)։
FoR (Frame-of-Reference) + Bit-packing: արժեքը = big + www.set; www.set փաթեթավորված է N բիթերով։
Gorilla/XOR (Time-series) 'պահպանում է XOR հարևան արժեքները փոփոխական երկարությամբ։ լավ է մետրի համար։
Nullablable-բիթմասկան. nme հոսքը բարձրացնում է CR-ը։
Խորհուրդը 'նախնական կլաստերիզացիան/ֆիլտրման բեկորների տեսակավորումը կտրուկ բարելավում է RLE/zone-maps և CR-ը։
5) Մոսկվան և ընդհանուր նշանակումը
ZSTD: լավագույն CR-ը CPU-ի չափավոր գնով։ աջակցում է 1-22 մակարդակները։ Համընդհանուր ընտրություն։
Delappy 'արագ, ցածր CR; հարմար է տաք տվյալների համար 'ընթերցանության բարձր տեմպերով։
LZ4 'նույնիսկ ավելի արագ, քան Drappy, նման CR; հաճախ 'strima/logs/kash-ի համար։
Gzip/Winlate: բարձր CR, CPU բարձր գինը; հազվադեպ է արդարացված ինտերակտիվ վերլուծության մեջ։
Կանոն 'տաք շերտ - Snappy/LZ4, տաք/սառը - ZSTD (Level 3-7)։
6) Ժամանակավոր շարքեր և լույսեր
TSDB/Gorilla/XOR, Delta-RLE-Bitmap, Sparse-run հազվագյուտ ազդանշանների համար։
Logs: JSON 35Parquet + ZSTD; նորմալացրեք բանալիները և տեսակները (մի պահպանեք «կառուցվածքային int»)։
Downsampling և roll-ups (lossy): պահեք միավորներ պատուհանների վրա (1m/5m/1h) տաք շերտում։ հում 'սառը։
Sketch կառուցվածքներ ՝ HMS (կարդինալիզմ), TDigest/KMS (քվանալի), CBS (հաճախականություններ) - կոմպակտ, բայց ապրոքսիմացիոն։
7) Lossless vs Lossy (երբ կարող եք կորցնել ճշգրտությունը)
Lossless-ը հաշվետվություններ, ֆինանսներ, աուդիտ է։
Lossy-ը ռուսական, A/B վերլուծաբանն է մեծ պատուհանների վրա, հեռուստատեսությունը (ակնհայտ մակնշմամբ)։
Որակի վերահսկումը 'ենթադրաբար սխալվել (օրինակ, P99 240)։ 5 pp) և ստուգել այն CI-ում։
8) Կուսակցություն, էջ և կոմպակշն
Կուսակցությունը 'ամսաթվով/տարածաշրջանում/տենանտան ավելի քիչ է, քան CR-ը։
Էջի չափսը/սթրիփը '64-256 KB էջի վրա, 64-512 MB ֆայլի վրա - հավասարակշռություն seek և CPU-ի միջև։
Կոմպակշն 'միացրեք փոքրիկ ֆայլերը (small medes problem) - CR-ից բարձր և արագությունը։
Zone-maps/Bloom: արագացնում են էջերի բացերը։ արդյունավետ են ֆիլտրերի տեսակավորման ժամանակ։
9) Սեղմումը և կոդավորումը/գաղտնիությունը
Վիրահատության կարգը 'նախ սեղմումը, հետո կոդավորումը։ Հակառակ դեպքում CR 351։
TDE/at-rest չի խանգարում CR-ին (կոդավորվում է արդեն սեղմված բլոկը)։
In-transit (TFC) չի ազդում ձևաչափի վրա։
PII-ի դիմակավորումը/հյուսելը մինչև սեղմումը պահպանում է վերահսկվող էնտրոպիան։
Զգուշորեն OPE/DET-կոդավորումը կարող է վատթարանալ CR և/կամ վտանգել գաղտնիությունը։
10) Արժեքը և SLO (տնտեսագիտություն)
Storage: ավելի քիչ բայթ է ցածր/TB-mo։
Compium: ավելի քիչ IO-ն ավելի արագ է, քան ժայռերը։ բայց դեկոմպրեսիան ծախսում է CPU-ն։
Egress: ավելի քիչ բայթ է արտադրվում ավելի ցածր քան 112/ժամանակը։
SLO փոխզիջում 'վերցրեք կոդերը/մակարդակը այնպես, որ «p95 _ latency» մնա նպատակային պատուհանում։
Քաղաքականության օրինակ (կեղծ-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) Շարժիչների պրակտիկան (ClickHouse/Winowflake/BigQuery/Redshift/Presto)
ClickHouse: CODEC "և սյուների վրա (LZ4/ZSTD/DoublePorta), ORDER BY-ի համար RLE/սկան, TTL/կոմպակշն։
Winowflake/BigQuery 'ձևերի/կլաստերիզացիայի ավտոմատիկա; օգնեք cluster by (ամսաթիվը, tenault, բանալիները)։
Redshift/Presto/Trino: Parquet/ORC-ը ZSTD-ի հետ, «hive»։ exec. compress. www.put ', վիճակագրությունը և ֆայլերի բաժանումը։
12) Proplines: Որտեղ ներառել սեղմումը
Ingest: սեղմված մարտերը (ZSTD/LZ4) lake-ում ձայնագրելիս։
Transform/DBT 'ստեղծեք հսկայական նպատակներ, որոնք անհրաժեշտ են և տեսակավորում։
Serve/OLAP 'նյութականացված ներկայացումներ համապատասխան օրինակով։ կանխատեսում են տաք դաշնամուրի համար։
Export: для CSV/JSON — gzip/zstd; ավելի լավ է տալ Parquet-ը։
13) Փորձարկում և վալիդացիա
AB-ավելացումը 'հարցումների մի շարք նախատեսվում է համեմատել p50/p95, bytes scanned, CPU time, CR։
Գոլդեն հավաքածուներ 'ճիշտ ստուգում փոխարկումից հետո/կոմպակշան։
Regression perf tes.ru: alerts, եթե p95-> X տոկոսը փոփոխությունից հետո։
DQ կանոնները 'տեսակներ/միջակայքներ/NMS-rate չպետք է փոխվեն խաչմերուկում։
14) Պահեստավորման քաղաքականությունը և TTL-ը
Tiered: hot (7-14 dn.) , warm (30-90 դն.) , cold (38180 դն.) .
Downsampling: Քանի որ «հովացման» պահեք ագրեգատները/էսքիզները հում փոխարեն։
Retention/Legal hold: Մի հեռացրեք փոխհարաբերությունները ստանդարտների հետ։ պահեք և տարբերակները։
15) Անտիպատերնի
«Ամենուրեք Gzip level 9 «, թանկ CPU, ոչ։
Առանց տեսակավորման/կլաստերիզացիայի 'վատ RLE/zone-maps-ը թանկ են։
JSON-ը որպես կոդավորման ձևաչափ, հարմար է ingest-ի համար, վատ է վերլուծության համար։
Չափազանց փոքր ֆայլեր 'փչացնում են մետատվյալները/seek; CR ընկնում է։
Կոդավորումը մինչև սեղմումը 'գրեթե զրոյական CR։
Lossy առանց մակնշման 'վստահության և հաշվետվության խախտում։
16) Իրականացման ճանապարհային քարտեզը
1. Discovery: Հարցումների/տվյալների պրոֆիլներ, SLO և բյուջեներ։
2. MVP: Parquet + ZSTD/Corappy, ռուսական տեսակավորում/կլաստերիզացիա, կոմպակշն։
3. Tuning: ZSTD մակարդակներ, էջերի չափսեր, cluster by, bloom/zone-maps։
4. Warm/Cold: tiered storage, downsampling/էսքիզներ, egress քաղաքականություն։
5. Hardening: ռեգրեսիայի թեստեր, DQ, runbooks։
17) Չեկի թուղթը նախքան թողարկումը
- Ձևաչափ ՝ Parquet/ORC; ներառում են վիճակագրություններ/բառարաններ։
- Կլաստերիզացիա ֆիլտրի բեկորներով. կուսակցություններ ամսաթվով/տենանտով։
- Alti: hot = Corappy/LZ4, warm/cold = ZSTD (3-7); p95 նորմալ է։
- Կոմպակշնը տրամադրված է; ոչ մի small dies; ֆայլերի/էջերի չափերը։
- DQ և golden հավաքածուներ կանաչ; տեսակները/միջակայքները պահպանված են։
- Սեղմումից հետո կոդավորումը; PII դիմակավորված; Ռետենշն/Legal-hold պահպանված են։
- Ռեգրեսիան վերահսկվում է. p95/bytes scanned/CR։
- Պահեստային քաղաքականության և փոխանակման հրահանգների իրականացումը պատրաստ է։
18) Մինի ձևանմուշները
DBT (Parquet-ը 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"
Քրեյգ downsampling (կեղծ)
yaml timeseries:
raw: keep: 14d rollup_1m: keep: 90d rollup_1h: keep: 365d rollup_1d: keep: 1825d
Արդյունքում, վերլուծական տվյալների սեղմումը ոչ միայն «միացնելն» է, այլ ամբողջական ռազմավարությունը 'ճիշտ ձևաչափը, գաղութների էնկոդինգը, տեսակավորումը և նվագարկումը, կոմպակշինը և պահեստավորման մակարդակները, ծածկագրման և SLO-ի հարգանքը։ Գրագիտության դիզայնը տալիս է ավելի արագ խոզանակներ, ցածր հաշիվներ և կանխատեսելի արտադրողականություն 'առանց տվյալների վստահության փոխզիջման։