Аналитикалык маалыматтарды кысуу
1) Эмне үчүн аналитикалык маалыматтарды кысып
Кысуу сактоо көлөмүн жана трафикти азайтат, аз IO жана жакшыраак кэштоо менен сканерлерди тездетет. Баасы - CPU жана (кээде) тактоо татаалдыгы. Максаты - оптималдуу "IO, 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/Euro (барактар/Stripes/мамычалар).
2. Энкодинг тилкесинде: Dictionary, RLE, Delta, FoR/Bit-packing, Gorilla/XOR.
3. codec деъгээлинде: 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 жана null-count.
ORC: агымдарда индекстери менен strayps, bloom-чыпкалар; узак сканерлер үчүн натыйжалуу.
Euro (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: мааниси = base + offset; offset N биттер менен капталган.
Gorilla/XOR (Time-series): өзгөрмө узундуктагы кошуна маанилердин XOR сактайт; метриктер үчүн жакшы.
Nullable-Битки: null's өзүнчө агым CR жогорулатат.
Кеңеш: чыпкалоо ачкычтары боюнча алдын ала кластерлештирүү/сорттоо RLE/zone-maps жана CR кескин жакшыртат.
5) Жалпы максаттагы кодекстер
ZSTD: мыкты CR орточо баасы менен CPU; 1-22 деңгээлдерин колдойт. Универсалдуу тандоо.
Snappy: тез, төмөн CR; жогорку окуу жыштыгы менен ысык маалыматтар үчүн ылайыктуу.
LZ4: дагы тез Snappy, окшош CR; көбүнчө - стрим/логдор/кэштер үчүн.
Gzip/Deflate: жогорку CR, жогорку CPU баасы; өз ара аналитикада сейрек акталат.
Эреже: ысык катмар - Snappy/LZ4, жылуу/муздак - ZSTD (деңгээл 3-7).
6) Убактылуу катарлар жана логдор
TSDB/колонка DD: Gorilla/XOR, Delta-RLE-Bitmap, сейрек сигналдар үчүн Sparse-run.
Логи: JSON → Parquet + ZSTD; ачкычтарды жана түрлөрүн нормалдаштыруу ("сап int" сактоо эмес).
Downsampling жана roll-ups (lossy): ысык катмарда терезелер (1m/5m/1h) боюнча агрегаттарды сактоо; чийки - муздак.
Sketch структуралар: HLL (кардиналдуулук), TDigest/KLL (quantiles), CMS (жыштыктар) - компакт, бирок аппроксимациялык.
7) Lossless vs Lossy (качан тактыгын жоготсо болот)
Lossless - отчеттуулук, каржы, аудит.
Lossy - мониторинг, чоң терезелерде A/B-аналитика, телеметрия (ачык белги менен!).
Сапатты көзөмөлдөө: жол ката (мисалы, P99 ± 0. 5 п.п.) жана CI аны текшерүү.
8) Партиялаштыруу, беттер жана компакшн
Партия: дата/аймак/тенант → аз сканер, жакшы CR.
Page/Stripe көлөмү: 64-256 KB баракка, 64-512 MB бир файл - seek жана CPU ортосундагы балансы.
Компакшн: майда файлдарды бириктирүү (small files problem) - CR жана ылдамдыктан жогору.
Zone-maps/Bloom: беттерди жылдыруу; фильтрлер боюнча сорттоодо эффективдүү.
9) кысуу жана шифрлөө/купуялуулук
Операциялардын тартиби: адегенде кысуу, андан кийин шифрлөө. Болбосо CR ≈ 1.
TDE/ат-rest CR тоскоолдук кылбайт (буга чейин кысылган блок шифрленген).
In-transit (TLS) форматына таасир этпейт.
PII камуфляж/токенизациялоо кысууга чейин башкарылуучу энтропияны сактайт.
OPE/DET шифрлөө менен этият: CR начарлашы жана/же купуялуулукту тобокелге салышы мүмкүн.
10) Наркы жана SLO (экономика)
Storage: аз байт → төмөн $/TB-mo.
Compute: аз IO → тез сканер; бирок декомпрессия CPU сарптайт.
Egress: аз байт → төмөнкү трафик/көчүрмө убактысы.
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) Motorlar үчүн Practices (ClickHouse/Snowflake/BigQuery/Redshift/Presto)
ClickHouse: Колонкалар боюнча CODEC 'i (LZ4/ZSTD/DoubleDelta), RLE/сканерлер үчүн ORDER BY, TTL/компакшн.
Snowflake/BigQuery: автоматтык түрдө/кластерлештирүү; жардам cluster by (date, tenant, filter ачкычтары).
Redshift/Presto/Trino: ZSTD менен Parquet/ORC, орнотуу 'hive. exec. compress. output ', статистика жана файлдарды бөлүштүрүү.
12) Пайплайндар: кайда кысуу керек
Ingest: кысылган батчи (ZSTD/LZ4) lake жазуу.
Трансформация/DBT: керектүү кодек жана сорттоо менен колонка максаттарын түзүү.
Serve/OLAP: ылайыктуу кодек менен материалдык көрүнүшү; ысык дашборддор үчүн предагрегаттар.
Export: для CSV/JSON — gzip/zstd; Parquet берүү жакшы.
13) Тестирлөө жана валидация
AB-кароо: суроолор топтому → p50/p95 салыштыруу, bytes scanned, CPU убакыт, CR.
Golden-топтомдору: кайра/компакшн кийин туура текшерүү.
Regression perf tests: p95 ↑> X% кодек/деңгээл өзгөргөндөн кийин, эгерде алерт.
DQ-эрежелери: түрлөрү/диапазондору/NULL-rate которуу учурунда өзгөрүшү керек.
14) Сактоо саясаты жана TTL
Tiered: hot (7-14 күн) , warm (30-90 күн.) , cold (≥ 180 күн.) .
Downsampling: "муздатуу" агрегаттарды/чийки ордуна эскиздерин сактоо.
Retention/Legal hold: ченемдер менен карама-каршылыктарды алып салуу эмес; каталогдорду жана версияларды сактаңыз.
15) Антипаттерндер
"Бардык жерде Gzip деңгээл 9 ": кымбат CPU, эч кандай пайда.
сорттоо/кластерлештирүү жок: жаман RLE/zone-карталар → кымбат сканер.
JSON сактоо форматы катары: ingest үчүн ыңгайлуу, аналитика үчүн жаман.
Өтө майда файлдар: метадеректерди/seek; CR түшөт.
Кысууга чейин шифрлөө: дээрлик нөл CR.
Lossy маркировкасы жок: ишеним жана отчеттуулукту бузуу.
16) Ишке ашыруунун жол картасы
1. Discovery: суроо/маалымат профилдери, SLO жана бюджеттер.
2. MVP: Parquet + ZSTD/Snappy, негизги сорттоо/кластерлештирүү, компакшн.
3. Tuning: ZSTD деңгээл, барак өлчөмдөрү, cluster by, bloom/zone-maps.
4. Warm/Cold: tiered storage, downsampling/эскиздери, egress саясаты.
5. Hardening: регрессия perf-тесттер, DQ, runbooks code.
17) чыгаруу алдында чек тизмеси
- Формат: Parquet/ORC; статистиканы/сөздүктөрдү камтыйт.
- чыпкалоо ачкычтары боюнча кластерлештирүү; датасы/тенанты боюнча партиялардын
- Codec: hot = Snappy/LZ4, warm/cold = ZSTD (3-7); p95 нормалдуу.
- Компакшн орнотулган; жок small files; максаттуу файлдардын/беттердин өлчөмдөрү.
- DQ жана алтын топтому жашыл; түрлөрү/диапазондору сакталган.
- кысуу кийин шифрлөө; PII жашырылган; retenshn/legal-hold сакталат.
- Перф-регрессия мониторинг; p95/bytes scanned/CR.
- сактоо саясаты жана нускамаларды документтештирүү даяр.
18) Mini үлгүлөрү
DBT (ZSTD жана кластерлештирүү менен Parquet жадыбалы):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ну сыйлоо. Компетенттүү дизайн тезирээк сканерлөө, төмөн эсептөө жана болжолдонгон аткаруу берет - эч кандай компромисс маалымат ишеним.