GH GambleHub

Оптимизатсияи дархостҳои таҳлилӣ

1) Чаро оптимизатсия кардан (контексти IGaming)

Суръати тиҷорат: Ҳисоботҳои GGR/NET, провайдерҳо/бозиҳо, RG/AML ва маркетинг дар p95 SLA.
Арзиш: байтҳои камтар сканшуда ва shafl → аз $/дархост.
Эътимоднокӣ: соатҳои қуллаи устувор, BI ях намекунад.
Миқёс: Даҳҳо брендҳо/бозорҳо, миллиардҳо хатҳо, дақиқаҳои тару тоза.

2) Профили сарборӣ ва SLO

"90% аввалини" дархостҳоро тавсиф кунед: тирезаҳо (7/28/90d), филтрҳо ('бренд, кишвар, провайдер, psp, status'), атрибутҳои JSON, боло K ва фоизҳо.
Намунаҳои SLO: p95 ≤ 1. 2 с барои панели, байтҳои сканшуда ≤ 256 МБ/дархост, тару тоза ≤ 5 дақ.

3) Анатомияи нақшаҳо: чиро бояд ҷустуҷӯ кард

Pushdown пешгӯӣ/пешгӯӣ - Филтрҳо ва рӯйхати сутунҳо ба манбаъ партофта мешаванд.
Навдаи қисмҳо ва партофтани маълумот (min-max/bloom/manifest).
Сканкунии векторӣ/материализатсияи дер: сутун аз ҷониби JOIN/PROJECT мавқуф гузошта шудааст.
Стратегияи ҳамроҳ: Broadcast Hash (BHJ), Sort-Merge (SMJ), Nested Loop (NLJ - избегать).
Spill & shuffle: Ҳаҷми омехта ва рехтан ба диск душмани асосии SLA мебошад.
Иҷрои дархости мутобиқшавӣ: тағир додани стратегия дар вақти корӣ (BHJ↔SMJ гузариш, коалҳои динамикӣ).

Нақша бояд нишон диҳад: мо чанд байт мехонем, шафлим куҷост, мо чӣ кэш мекунем.

4) Тарафҳо, навъбандӣ, ҳолатҳои кластерӣ

Тарафҳо: аз рӯи 'сана' + 1-2 андозаи дастрасӣ (масалан, 'бренд, кишвар').
Гурӯҳбандӣ/кластерӣ: 'Фармоиш аз рӯи/CLUSTER BY/Z-фармоиш' аз ҷониби филтрҳо/пайвастҳои зуд-зуд ('провайдер, game_id, occurred_at').
Таснифот ва фишурдасозӣ: интиқоли мунтазам барои партофтани маълумот; Андозаи файли мақсаднок 128-1024 МБ мебошад.

5) Намунаҳои ҳамроҳ

Broadcast Hash Join (BHJ): андозаи хурд (≤ садҳо МБ) → пахши воқеӣ.

sql
/ hint if engine supports/
SELECT /+ BROADCAST(dim_provider) /...

Ҳамроҳшавии Sort-Merge (SMJ): маҷмӯаҳои калон, навъбандии калидҳо/кластерҳои мувофиқ → чоҳи ҳадди аққал.
Пеш аз пайвастшавӣ/denormalization: гузарондани хусусиятҳои устувор аз 'хира _' ба лаҳзаи воқеӣ (дурнамо/назари моддӣ) - минуси ҳамроҳ шудан ба роҳи интиқодӣ.
Анти/semijoins: аз нав сабт кардани 'NOT/EXISTS' ба нақшаҳои возеҳи нимсола/зидди ҳамроҳ.
Бартараф кардани таркиши куллӣ: калидҳои нусхабардории андозаҳоро санҷед, калидҳои суррогатиро истифода баред.

6) ГУРӮҲ АЗ РӮИ, агрегатҳо ва прегрегатсияҳо

Маҷмӯаҳои Rollup/Cube/Grouping: як марҳила ба ҷои якчанд маҷмӯа.

sql
SELECT brand, country, DATE(ts) d, SUM(amount)
FROM gold. payments
WHERE ts >= NOW() - INTERVAL '7 days'
GROUP BY GROUPING SETS ((brand,country,d),(brand,d),(d));

Назари материализатсияшуда (MV )/пешгӯиҳо: 'пардохтҳо _ 7d _ by _ brand _ psp', 'rounds _ 1d _ by _ provider _ game'.
Қисман → Ҷамъбасти ниҳоӣ: имкон диҳед, ки муҳаррик қисман ба коргарон (маҳаллӣ) ва дар ниҳоят ба координатор муттаҳид карда шавад.
Тахминан: HLL барои 'COUNT (корбари DISTICT)', TD 'iest барои фоизҳо - якчанд маротиба арзонтар ва барои BI кофӣ аст.

7) Функсияҳои тиреза (тозагӣ)

ҚИСМАТ АЗ РӮИ тугмаҳо бо интихоби баланд; Фармоиш аз рӯи - аз рӯи навъбандии сутун.
Дар ҷойҳои имконпазир тирезаҳои вазнинро бо preaggregates ва нимпайкараҳо иваз кунед.

sql
-- Instead of window distinct
SELECT brand, COUNT() users
FROM (SELECT DISTINCT brand, user_id FROM gold. sessions WHERE d>=CURRENT_DATE-7) t
GROUP BY brand;

8) Филтрҳо, саҳифабандӣ ва TOP-K

Тартиби филтр барои CBO муҳим нест, аммо интихоб ва индексатсия/навъбандӣ мебошанд.
МАҲДУДИЯТ... БО TIES/REACX TOP-K - сканро кӯтоҳ кунед.
Пагинатсия: 'pagination keyset' ба ҷои 'OFFSET/LIMIT' барои ҷадвалҳои калон.

sql
-- keyset
SELECT FROM t WHERE (date, id) > (:last_date,:last_id) ORDER BY date, id LIMIT 1000;

9) JSON/Нимсохторӣ

Ҷобаҷогузории роҳҳои гарм ба сутунҳо ('дастгоҳ. os ',' psp. усул ').
Агар муҳаррик дастгирӣ кунад, индексҳои баръакс/GIN-ро дар роҳҳои JSON истифода баред.
Аз хатти UDF канорагирӣ кунед: дурнамои беҳтар бо хусусиятҳои равшаншуда.

10) Тақрибан ва интихоб

Эскизи HLL/Theta: Арзони 'COUNT DISTICT'.
TD iest/KLL: фоизҳо p95/p99 бидуни навъи пурра.
Интихоби обанбор/стратификатсияшуда: таҳқиқоти интерактивӣ ва пешнамоиш.

11) Хотира, тангӣ ва мувофиқат

Муҳофизаткунанда: маҳдудиятҳои хотира оид ба ҳамроҳ/agg; ҳангоми рехтан - партия/параллелизмро кам кунед, навъбандиро аз рӯи калид зиёд кунед.
Ҳамоҳангсозӣ ва QOS: ҳавзҳо барои панелҳои "гарм" ва ҷаҳаннами вазнин; скан/маҳдудияти вақт; куштан-гузариш ба дархостҳои "фаромӯшшуда".
Кэши кэш/дархости натиҷа: барои қолибҳои такрории BI фаъол кунед, бо аломати тару тоза хомӯш кунед.

12) Санҷишҳои регрессия ва "давиши дукарата"

Нигоҳ доштани профилҳои истинод (нақша/скан байт/вақт) барои дархостҳои боло N.
Пеш аз баровардани индексатсияҳо/кластерҳо - A/B иҷро: муқоиса кунед p95, байтҳои сканшуда, ҳиссаи партофташуда, омехта.
Сохтани ҳудудҳои "номуваффақ-тез": агар p95 боло равад> X% - бознишастагӣ.

13) Мушоҳида ва SLO

SLI:
  • p50/p95/p99 дермонӣ, байтҳо/дархостҳои сканшуда, байтҳои партофташуда%, файлҳо ламс карда шуданд;
  • байтҳои омехта, байтҳои рехта, хотираи қулла;
  • хит-меъёри кэш; равиши дақиқ-агрегатҳо.

Огоҳиҳо: болоравии байтҳои сканшуда, афтодани ҳиссаи партофташуда, зуд-зуд NLJ, рехтан> ҳудудҳо.

14) Ҳолатҳои бозӣ (аз меъ-)

14. 1 Пардохт/PSP: "қуллаҳои радкунӣ"

ДАР куҷо: 'ts now () -7D now ()', 'бренд, кишвар, psp, status'.
Ҳизб: рӯз; Фармоиш/Z-фармоиш: '(бренд, кишвар, ts)'; bitmap: 'psp, status'; балоғат: 'транзаксия _ ид'.
MV: 'пардохтҳо _ 7d _ by _ brand _ psp (ҳолат)'.
Натиҷа: p95 → ~ 1s, байтҳои сканшуда ↓ 5-10 ×, тангии сифр.

14. 2 Даври бозӣ: Бозиҳои Top K/Соат

Фармоиш аз рӯи/кластер po '(провайдер, game_id, occurred_at)'; дурнамо барои preaggregates.
Тақрибан Top-K + TD iest барои давомнокии даври p95.
Сатри поён: графикҳои зер-сония дар кэши гарм.

14. Маҳдудиятҳои фаъоли 3 RG/AML

JSON 'reason' → сутун; bitmap 'rg _ state', 'kyc _ level'; нимтайёр бо ҳолати охирин.
Натиҷа: гузориш "барои 30 рӯз" - сонияҳо, бе сканкунии пурра.

15) Рӯйхати санҷиши оптимизатсия (ҳамарӯза)

1. Ҷамъоварии дархостҳои боло N ва профилҳои онҳо (нақша/байт/шафл).
2. Маҷмӯаҳо аз рӯи сана + ҳолатҳои мувофиқашудаи навъбандӣ/кластерӣ.
3. Санҷиши буридани pushdown ва проексия (танҳо сутунҳои зарурӣ).
4. Стратегияи ҳамроҳ: пахши хурд, навъ барои SMJ, NLJ.
5. Пеш аз агрегатсия/MV барои панелҳои гарм.
6. Тақрибан дар ҷое ки эътибор дорад (фарқият/фоизҳо/top-k).
7. JSON → сутунҳо ва/ё индексатсияҳои баръакс.
8. Фишурдасозӣ/таснифот; ҳадафи байтҳои партофташуда ≥ 70%.
9. Натиҷаҳо кэш ва ҳавзҳои ҳамбастагии алоҳида.
10. Мониторинг: p95, байтҳои сканшуда, омезиш, рехтан, зарба.

16) Қолибҳо (барои истифода омодаанд)

16. 1 Сиёсати оптимизатсия (YAML)

yaml workload: bi_hot slo:
p95_latency_ms: 1200 scanned_bytes_max_mb: 256 skipped_bytes_share_min: 0. 70 storage:
partition_by: ["date"]
cluster_by: ["brand","country","occurred_at"]
indexes:
bloom: ["transaction_id","user_surrogate_id"]
bitmap: ["psp","status","rg_state"]
aggregation:
mv:
- name: mv_payments_7d_brand_psp window: "7d"
group_by: ["brand","psp","status"]
approx:
count_distinct: "hll"
percentile: "tdigest"
concurrency:
pools: {bi_hot: 50, adhoc: 10}
timeout_s: 120

16. 2 Санҷиши регрессияи дархостҳо (псевдо-SQL)

sql
-- baseline: p95<=1200ms, scanned_bytes<=256MB
EXPLAIN ANALYZE
SELECT brand, psp, status, COUNT() cnt, SUM(amount) amt
FROM gold. payments
WHERE ts >= NOW() - INTERVAL '7 days'
AND brand =:brand AND country =:country
GROUP BY brand, psp, status;

16. 3 Навиштани DISTINCT

sql
-- Bad: Heavy COUNT (DISTINCT user_id)
SELECT COUNT(DISTINCT user_id) FROM gold. sessions WHERE d>=CURRENT_DATE-7;

-- Better: HLL sketch/preaggregate
SELECT hll_union(user_hll) FROM agg. sessions_7d_user_hll WHERE d>=CURRENT_DATE-7;

16. 4 Саҳифаҳои калидӣ

sql
SELECT
FROM gold. game_rounds
WHERE (occurred_at, round_id) > (:ts,:rid)
AND brand=:brand AND country=:country
ORDER BY occurred_at, round_id
LIMIT 1000;

17) Анти-намунаҳо

'SELECT' in prod; набудани навдаро пешгӯӣ.
Саҳифаи OFFSET дар миллионҳо хатҳо.
Ҳисоб кардани фарқият бе эскизҳо; фоизҳо тавассути навъи пурра.
NLJ дар маҷмӯаҳои калон; ҳамроҳ бо ибораҳои JSON.
Маҷмӯаҳои хурд ва файлҳои пароканда (тӯфони метамаълумот).
Сатрҳои UDF дар КУҶО ба ҷои материализатсия кардани сутунҳо.
Оморро нодида гиред/ANALIZE - оптимизатори нобино ва сканкунии пурра.
Не озмоишҳои регрессия ва на ҳадди ақалли бозгашт.

18) Харитаи роҳсозӣ

0-30 рӯз (MVP)

1. Андозагирии дархостҳои боло N ва насби SLO/SLI.
2. Маҷмӯаҳо аз рӯи сана + навъбандӣ/кластер; имкон медиҳад, ки партофтани маълумот/балоғат.
3. Як MV барои як ҳисоботи пардохти гарм; HLL/TD jiest в BI.
4. Тақсим кардани ҳавзҳои дархост, имкон диҳед кэши натиҷа.

30-90 рӯз

1. Барӯйхатгирии тирезаҳои вазнин/JSON → preaggregation/сутунҳо.
2. Пахш-ҳамроҳ кардани андозаҳои хурд; SMJ барои калон; барҳам додани NLJ.
3. Ҷадвали фишурдасозӣ ва таснифот; Мушовири асосӣ.
4. Мушоҳида ва огоҳиҳои таназзул, нақшаҳои A/B, худкор.

3-6 моҳ

1. Каталоги дурнамо/MV бо версия ва SLA.
2. Тақрибан ядро ​ ​ барои фарқият/фоизӣ/боло-к дар ҳама панелҳо.
3. Қолабҳои ягона барои санҷишҳои регрессия ва буҷетҳо $/дархост.
4. Гигиенаи доимии JSON ва UDF: амалисозӣ ва нишондиҳандаҳо.

19) RACI

Платформаи маълумот (R): қисмҳо/кластерӣ/фишурдасозӣ, MV/пешгӯиҳо, кэшҳо, мониторинг.
Аналитика/BI (R): навиштани SQL, агрегатҳои тақрибан, санҷишҳои регрессия.
Соҳибони домейн (C): талабот ба бахшҳо ва дақиқӣ.
Амният/DPO (A/R): махфият/PII, k-беном будани агрегатҳо.
SRE/Мушоҳида (C): SLO/ҳушдор, мувофиқат ва қобилият.
Молия (C): буҷаҳо барои $/дархост ва таъсири иқтисодӣ.

20) Қисматҳои марбут

Индексатсияи нигаҳдории таҳлилӣ, схемаҳои маълумот ва эволютсия, тасдиқи маълумот, амалияи маълумот, кластери маълумот, кам кардани андоза, таҳлил ва ченакҳои API, MLOps: Истифодаи моделҳо.

Ҷамъ

Оптимизатсияи дархостҳо "ишораи сеҳрнок" нест, балки система: бақайдгирии салоҳиятноки маълумот (қисмҳо/кластерҳо), алгоритмҳои пешакӣ ва тахминӣ, стратегияҳои дурусти JOIN, кэш/ҳамоҳангӣ ва мониторинги доимии p95 ва байтҳои сканшуда. Барои IGaming, ин маънои ченакҳои зуд ва устувор барои пардохтҳо, бозиҳо ва мутобиқатро дар доираи SLA ва буҷа дорад.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Telegram
@Gamble_GC
Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.