GH GambleHub

Analitik anbarların indeksləşdirilməsi

1) Niyə iGaming-platforma indeksləşdirilməsi

Analitikanın sürəti: GGR/NET, konversiyalar, RG/AML və A/B təcrübələri üzrə hesabatlar SLA-ya uyğunlaşdırılır.
Qiymət: daha az scanning bayt → aşağı hesablama/anbar.
Etibarlılıq: sabit p95/p99 dashboard gecikmə və API metrik.
Miqyaslı: «tam scan» cəhənnəm dəyəri olmadan onlarla marka/bazar/PSP/provayder.

2) Yük modeli (indeksləşdirmədən əvvəl)

Факты: `payments`, `game_rounds`, `sessions`, `bonus_events`.
Ölçülər: 'dim _ user' (PII olmadan), 'dim _ provider', 'dim _ psp', 'dim _ country'.
Sorğular: «Son N gün», 'brand/country/provider/psp' aqreqasiyaları, status sahəsi üzrə filtrlər, surrogate-keys üzrə join's, JSON atributları (ödəmə metodu, cihaz), top-K/percentile.

Seçicilik, kardinallıq və istifadə tezliyinə əsaslanaraq indeksləri seçirik.

3) Indekslərin növləri və onları nə vaxt almaq

3. 1 Klassik

B-tree: yüksək selektiv sütunlar üzrə bərabərlik/diapazonlar ('user _ surrogate _ id', 'occurred _ at', 'amount').
Hash: saf bərabərlik; analitikada daha az (zəif diapazonlara qarşı).
Bitmap: aşağı kardinallıq və tez-tez birləşdirilmiş filtrlər ('country', 'kyc _ level', 'rg _ state', 'brand'). Maskaların cəmlənməsi üçün əladır.

3. 2 Columnar spesifikasiyası

Min-max (data skipping): parket strayps/hissələrində avtomatik «minimum/maksimum» statistikası → mühərrik blokları buraxır. Süzülən sahələr üzrə çeşidlənərkən daha yaxşı işləyir.
Bloom indeksləri: blok dəyərinin sürətli ehtimal testləri ('user _ id', 'transaction _ id', 'psp' üçün faydalıdır).
BRIN (Block Range Index): verilənlər təbii qaydada (vaxt) blok diapazonlarına ucuz «işarələr». Ucuz, lakin time-series üçün təsirli.

3. 3 Qabaqcıl/ixtisaslaşmış

GiST/GIN (tərs): JSON/arrays/mətn, daxili atributlar üzrə filtrlər ('metadata. method = 'Papara'`, `device. os in [...]`).
Join/Projection (ClickHouse/MPP): join/agg sürətləndirmək üçün materiallar (pre-join key faktın yanında saxlanılır, əvvəlcədən yığma).
Vektor (ANN): oxşar embeddinqlərin axtarışı (tövsiyələr/antifrod davranışı) - IVF/HNSW/Flat «yaxın qonşuların indeksi» kimi.
Z-sifariş/Z-order (lakehouse/Databricks )/Cluster keys (Snowflake )/ORDER BY (ClickHouse): Daha yaxşı data skipping üçün diskdə çoxölçülü məlumat klasterləşdirilməsi.

4) Partizan, çeşidləmə, klasterləşdirmə

Parties (date/country/brand): böyük (gün/həftə) «kiçik faylları lənətləmək» qarşısını almaq üçün. WHERE/Access Rights yüksək seçicilik sahələri seçin.
Partiya daxilində çeşidləmə: 'ORDER BY (occurred_at, brand, psp)' və ya Z-order '(brand, country, provider)' - belə ki, min-max və bloom daha yaxşı işləyir.
Cluster/Recluster: yerli saxlamaq üçün periodik pereklasterization.
TTL və retenshn: köhnə partiyalar/seqmentlərin avtomatik çıxarılması.

5) Materiallaşdırılmış təsəvvürlər və proyeksiyalar

Qaynar kəsiklər üçün MV: 'payments _ 7d _ by _ brand _ psp', 'rounds _ 1d _ by _ provider'. Biz inkremental dəstək (streaming upserts).
Proyeksiyalar (ClickHouse )/Aggregate tables: qabaqcıl qruplar, roll-up səviyyələri (saat → gün → həftə).
Nəticələr cache: təkrarlanan dashboard üçün query result cache/warehouse result cache (sorğu tokenini və məlumatların təravətini təsdiqləyirik).

6) Yarı strukturlu məlumatlar (JSON/VARIANT)

Yol indeksləri: çevirilmiş/json yollarında GIN indeksi ('$ .device. os`, `$.psp. details. method`).
Dinamiklərdə mühüm atributların materiallaşdırılması: sabit filtrlər üçün (ödəmə metodu, cihaz, proqram versiyası).
Açar statistikası: selektiv plan üçün distribyutorların toplanması.

7) Məlumat gölləri: Iceberg/Delta/Hudi

Manifest indeksləri: parket faylları haqqında metadata (min-max, null-count, bloom) → partition pruning + file skipping.
Kompaksiya/faylların birləşməsi: «optimal» ölçülü (128-1024 MB) kiçik faylların müntəzəm merge.
Clustering/Z-order: korrelyasiya sahələri üçün faylların yenidən doldurulması (məsələn, 'brand, country, occurred _ at').
Delete/Update indeksləri: merge-on-read sürətləndirmək üçün mövqeli deltalar və bloom.

8) Indeksləri necə seçmək olar: praktik yoxlama siyahısı

1. Top N sorğuları toplayın (90% yük) → filter sahələri/join/group.
2. Hər bir sahə üçün selektivliyi qiymətləndirin 'sel = 1 - distinct (value )/rows' və kardinallığı.
3. Partisia + 1-2 sabit filtr/giriş ilə ölçülür.
4. Sıralama/klaster keys filterlər və join-açarları ilə əlaqələndirmək.
5. Aşağı kardinallıq üçün nöqtə id, bitmap üçün bloom əlavə edin.
6. isti aqreqasiya → MV/proyeksiyalar.
7. JSON yolları → invertasiya indeksləri + materiallaşdırma.
8. Göllərdə - cədvəl üzrə kompaksiya və clustering.
9. SLO daxil edin: p95-gizli, taranabilir baytlar/sorğu, pay skipped data.

9) Dəstək və xidmət

ANALYZE/statistika: kardinallıq və histoqramları yeniləyin; əks halda optimizator «kor».
VACUUM/OPTIMIZE/RECLUSTER: defragmentasiya və pereklasterizasiya.
Indekslərin istifadəsinin monitorinqi: «covering rate», «unused index list», «bytes scanned/bytes skipped».
Avtomatik məsləhətçilər: query log əsasında klaster açarları və çeşidləmə üzrə dövri tövsiyələr.
Reqressiya testləri: yeni açarları deploymadan əvvəl - sorğu profili və dəyəri müqayisə.

10) Metrika və SLO indeksləşdirmə

Texniki: p95/p99 latency, scanned bytes/query, skipped bytes%, files touched, cache hit-rate.
İqtisadiyyat: $/sorğu, $/dashboard, $/TB skan.
Əməliyyatlar: kompaksiya vaxtı, pereklasterləşmə növbəsi, «kiçik faylların» payı.
Planların keyfiyyəti: indekslərdən/proyeksiyalardan istifadə edən sorğuların payı, kardinallıqların dəqiqliyi.

11) iGaming Cases (hazır reseptlər)

11. 1 Ödənişlər/PSP: düşmə/uğursuzluqlar

Partiya: 'by day'. Çeşidləmə: '(brand, country, occurred_at)'.
Bloom: `transaction_id`, `user_id`. Bitmap: `psp`, `status`.
MV: `payments_7d_by_brand_psp(status, declines)`.
Nəticə: p95 ↓ 8 ilə. 2s qədər 1. 1s, scanned bytes ↓ на 87%.

11. 2 Oyun raundları: provayder/oyun

Z-order / ORDER BY: `(provider, game_id, occurred_at)`.
Projection/agg: `rounds_1d_by_provider_game`.
BRIN (Postgres kimi saxlama varsa): 'occurred _ at'.
Nəticə: Top K oyunları/saat - isti cache sub-second.

11. 3 RG/AML: məhdudiyyətlər/özünü istisna hadisələri

Bitmap: `rg_state`, `kyc_level`. JSON-path GIN: `$.reason`.
MV: «30 gün ərzində aktiv məhdudiyyətlər» + PII olmadan istifadəçi səviyyəsinin materiallaşdırılması.
Nəticə: milyardlarla hadisələrin tam scan olmadan uyğunluq üçün sürətli nümunələr.

11. 4 Antifrod: marşrutlar və qurğular

JSON → sütunlarının materiallaşdırılması: 'device. os`, `device. model`, `payment. method`.
Bloom: `graph_device_id`. Cluster: `(brand, country, device. os)`.
Vektor indeksi: oxşar anomaliyalar üçün «7d üçün depozit davranışı» → sürətli k-NN embeddingi.

12) Təhlükəsizlik və məxfilik

Zero-PII indeksləşdirilən sahələrdə və plan loqlarında.
Disk şifrələmə: indekslər/statistik məlumatlar kimi şifrələnir.
Aqreqatların K-anonimliyi: MV/proyeksiyaları yalnız ≥ N qrupları tərəfindən yayımlanır.
Geo/tenant-izolyasiya: partiyalar/açarlar 'brand/country/license' daxildir.
Legal Hold: indekslər/manivestlər də «dondurulur».

13) Anti-nümunələr

«Hər şeyi» indeksləşdirin → həcm partlayışı və write-amplification.
Kiçik partiyalar (saat/dəqiqə) → fırtına zolaqları və «kiçik fayllar».
Filtrlərlə üst-üstə düşməyən çeşidləmə açarları → sıfır data skipping.
Statistikanın olmaması → pis planlar, tam scan.
JSON səyahət indeksləri olmadan və «isti» atributları materiallaşdırmadan.
kompaksiya və recluster → 2-4 həftə sonra deqradasiya ignor.

14) Şablonlar (istifadəyə hazır)

14. 1 Klasterləşdirmə/indeksləşdirmə siyasəti (YAML)

yaml dataset: gold. payments partition_by: ["date"]
order_by: ["brand","country","occurred_at"]
indexes:
bloom: ["transaction_id","user_surrogate_id"]
bitmap: ["psp","status","rg_state"]
materialized_views:
- name: mv_payments_7d_brand_psp group_by: ["brand","psp","status"]
window: "7d"
slo:
p95_latency_ms: 1200 scanned_bytes_per_query_max_mb: 256 maintenance:
compact_small_files: true recluster_cron: "0 /6  "
privacy:
pii_in_index: false

14. 2 Göl kompaksiya planı (Iceberg/Delta)

yaml compaction:
target_file_size_mb: 512 small_file_threshold_mb: 64 zorder_by: ["brand","country","occurred_at"]
run_every: "PT6H"
max_concurrency: 4

14. 3 JSON sahələri üçün indekslər

sql
-- GIN/inverted index on device attributes
CREATE INDEX idx_device_json ON gold. sessions
USING GIN ((device_json));
-- Materialization of critical pathways
ALTER TABLE gold. sessions ADD COLUMN device_os TEXT;
UPDATE gold. sessions SET device_os = device_json->>'os';
CREATE BITMAP INDEX idx_device_os ON gold. sessions(device_os);

14. 4 SLO monitorinq indeksləri

yaml monitoring:
skipped_bytes_share_min: 0. 70 index_usage_rate_min: 0. 85 stats_freshness_max_hours: 24 small_files_share_max: 0. 10

15) Tətbiqi yol xəritəsi

0-30 gün (MVP)

1. Top N sorğuları və scan profilləri toplayın.
2. Filtrlərlə razılaşdırılmış + çeşidləmə tarixinə görə partikulyasiya.
3. ID sahələri üçün data skipping (min-max) və bloom daxil edin.
4. «Isti» metrika üçün bir MV (payments 7d).
5. Dashboard SLI: p95, scanned bytes, skipped share, small files.

30-90 gün

1. JSON yolları: invertasiya indeksləri + materiallaşdırma.
2. Göl: kompaksiya və 2-3 açar üzrə Z-order/clustering.
3. Avtomatik açar/proyeksiya məsləhətçisi; müntəzəm ANALYZE.
4. «Kiçik fayllar» harada partiyalar (day → week) yenidən baxın.

3-6 ay

1. Version və SLA ilə MV/proyeksiya kataloqu.
2. Tövsiyələr/antifrod üçün vektor indeksləri.
3. Vahid SLO və büdcə siyasəti $/sorğu; deqradasiya alertləri.
4. İndeks gizlilik auditi, geo/tenant-izolyasiya.

16) RACI

Data Platform (R): partiyalar/indekslər/kompaksiyalar, avto-məsləhətçilər, monitorinq.
Analytics/BI (R): MV/dashboard proyeksiyaları, sorğuların profilləşdirilməsi.
Domain Owners (C): «isti» kəsmə və filtrlərin meyarları.
Security/DPO (A/R): gizlilik, PII siyasəti, geo/tenant açarları.
SRE/Observability (C): SLO/alerting, kompaksiyalar üçün kapasiti.
Finance (C): büdcələr $/sorğu və indekslərdən qənaət.

17) Əlaqəli bölmələr

Verilənlər sxemləri və onların təkamülü, Verilənlərin validasiyası, DataOps-praktikalar, Anomaliyalar və korrelyasiyaların təhlili, API analitikası və metrikası, Verilənlərin klasterləşdirilməsi, Ölçünün azaldılması, MLOps: modellərin istismarı.

Yekun

Analitik anbarın indeksləşdirilməsi «hər şey üçün indeks yaratmaq» deyil, strategiyadır. Düzgün partisiyalar və çeşidləmə, data skipping və bloom, düşünülmüş MV/proyeksiyalar və müntəzəm kompaksiya sürətli və proqnozlaşdırıla bilən sorğular təmin edir. iGaming üçün bu, SLA və büdcə daxilində ödənişlər, provayderlər və RG/AML üçün operativ həllər deməkdir.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.