GH GambleHub

Analitik soraglary optimizirlemek

1) Näme üçin optimizirlemek (iGaming konteksti)

Iş tizligi: GGR/NET hasabatlary, üpjün edijiler/oýunlar, RG/AML we p95 SLA-da marketing.
Bahasy: az skanirlenýän baýt we şafla → aşakda $/haýyş.
Ygtybarlylyk: durnukly iň ýokary sagat, BI "aýazlarynyň" ýoklugy.
Masştab: onlarça marka/bazar, milliardlarça setirler, minutlar täzelik.

2) Ýük profili we SLO

Soraglaryň "ilkinji 90%" -ini düşündiriň: penjireler (7/28/90d), süzgüçler ('brand, country, provider, psp, status'), join's, JSON atributlary, top K we burç.
SLO mysallar: p95 ≤ 1. 2 s daşbord üçin, scanned bytes ≤ 256 MW/haýyş, freshness ≤ 5 min.

3) Meýilnamalaryň anatomiýasy: näme gözlemeli

Predicate/Projection pushdown: süzgüçler we sütünleriň sanawy çeşmä düşýär.
Partition pruning & data skipping: goşmaça partiýa/faýllary bölmek (min-max/bloom/manifest).
Vectorized scan/late materialization: JOIN/PROJECT tarapyndan yza süýşürilen sütünleri okamak.
Join strategy: Broadcast Hash (BHJ), Sort-Merge (SMJ), Nested Loop (NLJ — избегать).
Spill & shuffle: SLA-nyň esasy duşmanydyr.
Adaptive query execution: Kärendede strategiýany üýtgetmek (BHJ SMJ geçiş, dinamiki koalits).

Meýilnama: näçe baýt okaýandygymyzy, nirede şaflam edýändigimizi, nämäni kesýändigimizi görkezmelidir.

4) Partiýa, sortlama, klaster-keys

Partisiýa: 'date' + 1-2 giriş ölçegleri (mysal üçin 'brand, country').
Sortlamak/toplamak: 'ORDER BY/CLUSTER BY/Z-order' ýygy-ýygydan süzgüçler/joinler boýunça ('provider, game_id, occurred_at').
Reklasterizasiýa we kompaksiýa: data skipping üçin yzygiderli göçürme; maksatly faýl ululygy 128-1024 MB.

5) JOIN-patternleri

Broadcast Hash Join (BHJ): kiçijik ölçeg (≤ ýüzlerçe MB) → hakykata broadcast.

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

Sort-Merge Join (SMJ): uly toplumlar, gabat gelýän esasy sortlar/klaster-mysallar → iň az şafl.
Pre-join/denormalizasiýa: "dim _" -den hakyky surata (projection/materialized view) durnukly atributlary çykaryň - möhüm ýolda minus JOIN.
Anti/semijoins: 'NOT IN/EXISTS' -ni aç-açan semi-/anti-join meýilnamalaryna täzeden ýazyň.
Kardinal partlamany ýok etmek: ölçeglerdäki açarlaryň dublikatlaryny barlaň, surrogate-keys ulanyň.

6) GROUP BY, agregatlar we deslapky agregasiýalar

Rollup/Cube/Grouping Sets: Birnäçe agregasiýanyň ýerine bir faza.

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));

Materiallaşdyrylan pikirler (MV )/proýeksiýalar: 'payments _ 7d _ by _ brand _ psp', 'rounds _ 1d _ by _ provider _ game'.
Partial → Final aggregation: hereketlendirijini bölekleýin workerlerde (local) we ahyrky koordinatorda birleşdirmäge rugsat beriň.
Approximate: HLL for 'COUNT (DISTINCT user)', TDigest for percentile - has arzan we BI üçin ýeterlik.

7) Penjire funksiýalary (seresaplylyk bilen)

PARTITION BY ýokary saýlama açarlar boýunça; ORDER BY - sütünli sortlar boýunça.
Agyr penjireleri mümkin boldugyça predagregatlar we semi-joins bilen çalyşyň.

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) Süzgüçler, paginasiýa we TOP-K

Süzgüçleriň tertibi CBO üçin möhüm däl, ýöne saýlama we indeksler/sortlamak möhümdir.
LIMIT … WITH TIES/APPROX TOP-K - skany gysgaldýarlar.
Paginasiýa: 'OFFSET/LIMIT' ýerine 'keyset pagination'.

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

9) JSON/ýarym gurluş

Sütünlere barýan gyzgyn ýollary materiallaşdyryň ('device. os`, `psp. method`).
Hereketlendiriji goldaýan bolsa, JSON ýollarynda ters indeksleri/GIN ulanyň.
Setirlerde UDF-den gaça duruň: atributlary saýlamak bilen has gowy proýeksiýa.

10) Approx we sampler

HLL/Theta Sketch: arzan 'COUNT DISTINCT'.
TDigest/KLL: p95/p99 doly sort.
Reservoir/stratified sampling: interaktiw gözleg we preview.

11) Ýat, bogazy we konkarrensi

Spill-guard: join/agg üçin ýat çäkleri; dökülende - batch/parallelismi azaldyň, açar boýunça sortlamany artdyryň.
Concurrency & QoS: "gyzgyn" daşbordlar we agyr ad-hoc üçin howuzlar; skan/wagt çäkleri; "unudylan" soraglara kill-switch.
Result cache/query cache: gaýtalanýan BI şablonlary açyň, täzelik belligi boýunça maýyp boluň.

12) Regressiýanyň we "goşa geçmegiň" synaglary

Top-N soraglary üçin salgylanma profillerini (meýilnama/skan-baýt/wagt) saklaň.
Indeksleri/klasterleri çykarmazdan ozal - A/B geçişi: p95, scanned bytes, skipped share, shuffle.
"Fil-fast" bosagasyny dörediň: p95 össe> X% - yza gaýdyň.

13) Synlamak we SLO

SLI:
  • p50/p95/p99 latency, scanned bytes/query, skipped bytes %, files touched;
  • shuffle bytes, spilled bytes, peak memory;
  • cache hit-rate; accuracy approx-agregatlar.

Aladalar: scanned bytes, skipped paýyň düşmegi, ýygy-ýygydan NLJ, bogazy> bosagasy.

14) iGaming halatlary (reseptler)

14. 1 Tölegler/PSP: "şowsuzlyklaryň iň ýokary derejesi"

WHERE: `ts BETWEEN now()-7d AND now()`, `brand,country,psp,status`.
Partiýa: day; ORDER/Z-order: `(brand,country,ts)`; bitmap: `psp,status`; bloom: `transaction_id`.
MV: `payments_7d_by_brand_psp(status)`.
Netije: p95 → ~ 1s, scanned bytes ↓ 5-10 ×, nol bogazy.

14. 2 Oýun tapgyrlary: Top-K oýunlary/sagat

ORDER BY / cluster по `(provider, game_id, occurred_at)`; Pre-agregatlar üçin projection.
Approx Top-K + TDigest p95 tapgyryň dowamlylygy üçin.
Jemleýji: gyzgyn keşde subsentrik grafikler.

14. 3 RG/AML: işjeň çäklendirmeler

JSON 'reason' → sütün; bitmap `rg_state`, `kyc_level`; semi-join iň soňky ýagdaýy bilen.
Netije: "30 gün üçin" hasabat - sekuntda, doly skansyz.

15) Optimizirlemegiň çek-sanawy (gündelik)

1. Top-N haýyşlary we olaryň profillerini ýygnamak (meýilnama/baýt/şafl).
2. Partisiýa senesi boýunça + ylalaşylan sortlama/klaster-hadysalar.
3. pushdown we projection pruning barlagy (diňe zerur sütünler).
4. JOIN-strategiýasy: kiçi broadcast, SMJ üçin sortlamak, NLJ ýok.
5. Gyzgyn daşbordlar üçin öňünden agregasiýa/MV.
6. Approx (distinct/percentiles/top-k).
7. JSON → sütünler we/ýa-da ters indeksler.
8. Kompaksiýa/reklasterizasiýa; skipped bytes maksady ≥ 70%.
9. Netijeleri kesmek we konkarrensi howuzlary.
10. Gözegçilik: p95, scanned bytes, shuffle, spill, hit-rate.

16) Şablonlar (ulanmaga taýýar)

16. 1 Optimizasiýa syýasaty (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 Soragyň regressiýa synagy (psevdo-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 täzeden ýazmak

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 Keýset-paginasiýa

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) Anti-patternler

'SELECT' prodda; projection pruning ýoklugy.
Millionlarça setirde OFFSET paginasiýasy.
COUNT DISTINCT eskizsiz; doly sort.
Uly toplumlarda NLJ; JSON sözleri boýunça join.
Ownuk bölekler we bölünen faýllar (meta-maglumatlar tupany).
Sütünleri materiallaşdyrmagyň ýerine, WHERE-de UDF setirleri.
Ignor statistik/ANALYZE - kör optimizator we full scan.
Regression synaglaryň we yza gaýdyp geliş çäkleriniň ýoklugy.

18) Durmuşa geçirmegiň ýol kartasy

0-30 gün (MVP)

1. Top-N soraglaryny ölçemek we SLO/SLI gurmak.
2. Sortlamak senesi/klaster-mysallar boýunça partiýa; data skipping/bloom.
3. Tölegler boýunça "gyzgyn" hasabat üçin bir MV; HLL/TDigest в BI.
4. Gözleg howuzlaryny bölmek, result cache goşmak.

30-90 gün

1. Agyr penjireleriň sanalmagy/JSON → agregasiýadan öňki/sütün.
2. Kiçi ölçegli Broadcast-join; Uly üçin SMJ; NLJ-ni ýok etmek.
3. Meýilnama boýunça kompaksiýa we reklasterizasiýa; Açar maslahatçysy.
4. Syn edilmegi we pese gaçmagyň töwekgelçiligi, A/B meýilnamalary, awto-yza gaýdyp gelmek.

3-6 aý

1. / MV proýeksiýa katalogy we SLA.
2. Approx-ýadro distinct/percentile/top-k üçin ähli daşbordlar boýunça.
3. Regress-synaglaryň we býudjetleriň bitewi şablonlary $/haýyş.
4. JSON we UDF hemişelik arassaçylygy: materiallaşma we indeksler.

19) RACI

Data Platform (R): partiýa/klaster/kompaksiýa, MV/proýeksiýa, nagt pul, gözegçilik.
Analytics/BI (R): SQL täzeden ýazmak, approx-agregatlar, regressiýa synaglary.
Domain Owners (C): Kesmek we takyklyk talaplary.
Howpsuzlyk/DPO (A/R): Gizlinlik/PII, agregatlaryň k-anonimligi.
SRE/Observability (C): SLO/alerting, konkarrensi we kapasiti.
Maliýe (C): $/haýyş üçin býudjetler we ykdysady täsir.

20) Baglanyşykly bölümler

Analitik ammarlaryň indeksasiýasy, Maglumat shemalary we olaryň ewolýusiýasy, Maglumatlary tassyklamak, DataOps-praktikalary, Maglumatlary toparlaşdyrmak, Ölçegleriň peselmegi, API analitikleri we metrikleri, MLOps: modelleriň işleýşi.

Jemi

Soraglary optimizirlemek "jadyly hint" däl-de, ulgam: maglumatlary başarnykly bellemek (partisiýa/klaster), deslapky agregasiýa we approximate-algoritmler, dogry JOIN strategiýalary, nagt pul/konkarrensi we p95 we scanned bytes yzygiderli gözegçilik etmek. iGaming üçin bu SLA we býudjetiň çäginde tölegleriň, oýunlaryň we gabat gelmegiň çalt we durnukly ölçeglerini aňladýar.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Telegram
@Gamble_GC
Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.