GH GambleHub

Indeksowanie repozytoriów analitycznych

1) Dlaczego indeksowanie platformy iGaming

Prędkość analizy: raporty z eksperymentów GGR/NET, konwersji, RG/AML i A/B pasują do SLA.
Koszt: mniej bajtów do skanowania → niższy rachunek obliczeniowy/magazynowy.
Niezawodność: stabilna płyta rozdzielcza p95/p99 i metryki API.
Skala: dziesiątki marek/rynków/PSP/dostawców bez „pełnego skanowania” hellish wartość.

2) Model obciążenia (przed indeksowaniem)

Макта: 'płatności', 'game _ rounds', 'sessions', 'bonus _ events'.
Wymiary: 'dim _ user' (bez PII), 'dim _ provider', 'dim _ psp', 'dim _ country'.
Żądania: „Ostatnie dni N”, agregacje według 'marki/kraju/dostawcy/psp', filtry według pola statusu, przyłączenie przez klucze zastępcze, wyszukiwanie przez atrybuty JSON (metoda płatności, urządzenie), top-K/percentile.

Wybieramy wskaźniki oparte na selektywności, kardynalności i częstotliwości stosowania.

3) Rodzaje wskaźników i kiedy je przyjąć

3. 1 Klasyka

B-drzewo: równość/zakresy dla kolumn wysoce selektywnych ('user _ surrogate _ id',' occurred _ at ',' amount ').
Hash: czysta równość; rzadziej w analityce (wobec słabych zakresów).
Mapa bitowa: niska kardynalność i częste połączone filtry ('country', 'kyc _ level', 'rg _ state', 'brand'). Inne na maski sumujące.

3. 2 Specyfika kolumny

Min-max (pomijanie danych): automatyczne statystyki „minimum/maximum” w paskach/częściach parkietu → silnik pomija bloki. Działa lepiej po sortowaniu przez pola filtrowane.
Indeksy Bloom: szybkie testy probabilistyczne przynależności do wartości w bloku (przydatne dla 'user _ id',' transaction _ id', 'psp').
BRIN (Block Range Index): tanie „wskaźniki” do blokowania zakresów, jeśli dane są naturalnie zamawiane (czas). Tanie, ale skuteczne dla serii czasowych.

3. 3 Zaawansowane/specjalistyczne

GiST/GIN (odwrócony): JSON/tablice/tekst, filtry według atrybutów gnieżdżonych ('metadane. metoda = 'Papara', 'urządzenie. os w [...] ").
Połączenie/projekcja (ClickHouse/MPP): materiały do przyspieszania połączenia/agg (klucz wstępnego połączenia jest przechowywany obok faktu, wstępne agregacje).
Wektor (ANN): wyszukiwanie podobnych osadów (zalecenia/zachowanie przeciw oszustwom) - IVF/HNSW/Flat jako „najbliższy indeks sąsiada”.
Z-ordering/Z-order (lakehouse/Databricks )/Cluster keys (Snowflake )/ORDER BY (ClickHouse): multidimensional clustering of data on disk for better data skipping.

4) Podział, sortowanie, klastrowanie

Strony (data/kraj/marka): duże (dzień/tydzień), aby uniknąć "przekleństwa małych plików. "Wybieramy pola o wysokiej selektywności w WHERE/prawa dostępu.
Sortowanie w ramach strony: „ORDER BY (occurred_at, marka, psp)” lub Z-order według „(marka, kraj, dostawca)” - tak działa min-max i bloom lepiej.
Cluster/Recluster: okresowa reklasyfikacja w celu utrzymania lokalizacji.
TTL i retencja: automatyczne usuwanie starych części/segmentów.

5) Zmaterializowane widoki i projekcje

MV dla plasterków na gorąco: 'payments _ 7d _ by _ brand _ psp', 'rounds _ 1d _ by _ provider'. Wspieramy nadawanie strumieni.
ClickHouse/Aggregate tables-Presets, roll-up levels (chas → den → nedelya).
Cache result: cache rezultat zapytania/magazyn wynik pamięci podręcznej dla powtarzalnych desek rozdzielczych (zatwierdzone za pomocą tokenu zapytania i świeżości danych).

6) Dane półstrukturalne (JSON/VARIANT)

Indeksy według ścieżki: odwrócony/indeks GIN na ścieżkach json ('$ .device. os ',' $ .psp. szczegóły. metoda ").
Materializacja ważnych atrybutów w kolumnach: dla stabilnych filtrów (metoda płatności, urządzenie, wersja aplikacji).
Najważniejsze statystyki: gromadzenie dystrybucji dla planu selektywnego.

7) Jeziora danych: Góra Lodowa/Delta/Hudi

Indeksy manifestów: metadane o plikach parkietów (min-max, null-count, bloom) → przycinanie partycji + pomijanie plików.
Kompresja/łączenie plików: regularne łączenie małych plików w „optymalny” rozmiar (128-1024 MB).
Clustering/Z-order: przepakowywanie plików dla pól korelujących (np. „marka, kraj, wystąpił _ at”).
Usuń/Aktualizuj indeksy: delta pozycyjne i kwitną, aby przyspieszyć scalanie-on-read.

8) Jak wybrać indeksy: praktyczna lista kontrolna

1. Zbierz żądania top N (90% obciążenia) → pola filtra/join/group.
2. Dla każdego pola należy ocenić selektywność 'sel = 1 - distinct (value )/rows' i cardinality.
3. Partia według czasu + 1-2 pomiary z stabilnymi filtrami/dostępami.
4. Sortuj/klaster, aby dopasować filtry i przyłączyć klucze.
5. Dodaj kwiat dla id punktu, bitmap dla niskiej kardynalności.
6. Agregacje gorące → MV/projekcje.
7. Ścieżki JSON → indeksy odwrócone + materializacja.
8. Na jeziorach - zagęszczenie i zgrupowanie na harmonogramie.
9. Wprowadź SLO: p95 latency, bajty skanowane/żądanie, pominięta szybkość danych.

9) Wsparcie i konserwacja

ANALIZA/statystyki: aktualizacja kardynalności i histogramów; w przeciwnym razie optymizer jest „ślepy”.
VACUUM/OPTIMIZE/RECLUSTER: defragmentacja i przeklasyfikowanie.
Monitorowanie stosowania indeksów: „wskaźnik pokrycia”, „niewykorzystana lista indeksów”, „skanowane bajty/pominięte bajty”.
Auto-doradcy: okresowe zalecenia dla klawiszy i sortowania na podstawie dziennika zapytań.
Testy regresyjne: przed wyczerpaniem nowych klawiszy - porównanie profilu żądania i kosztów.

10) Wskaźniki i indeksowanie SLO

Techniczne: p95/p99 latency, skanowane bajty/zapytanie, pominięte bajty%, dotknięte pliki, cache hit-rate.
Gospodarka: $/request, $/deska rozdzielcza, $/TB skanowanie.
Operacje: czas zagęszczenia, kolejka przeklasyfikowania, udział „małych plików”.
Jakość planów: odsetek zapytań przy użyciu indeksów/prognoz, dokładność kardynalności.

11) iGaming cases (gotowe przepisy)

11. 1 Płatności/dostawcy usług płatniczych: krople/odmowy

Partia: „w dzień”. Sortuj „(marka, kraj, occurred_at)”.
Bloom: 'transaction _ id',' user _ id'. mapa bitowa: 'psp', 'status'.
MV: „płatności _ 7d _ by _ brand _ psp (status, spadki)”.
Wynik: p95 na 8. 2s do 1. 1s, zeskanowane bajtów, 87%.

11. 2 rundy gry: dostawca/gra

Z-ORDER/ORDER BY: '(dostawca, game_id, occurred_at)'.
Projekcja/agg: 'runda _ 1d _ by _ provider _ game'.
BRIN (jeśli magazynowanie podobne do Postgres): przez „occurred _ at”.
Wynik: gry top-K/godzina - sub-sekunda na gorącym pamięci podręcznej.

11. 3 RG/AML Ograniczenie/Zdarzenia Self Exclusion

Mapa bitowa: 'rg _ state', 'kyc _ level'. GIN ścieżki JSON: '$ .reason'.
MV: „aktywne ograniczenia przez 30 dni” + materializacja poziomu użytkownika bez PII.
Wynik: szybkie próbki do zgodności bez pełnego skanowania miliarda zdarzeń.

11. 4 Antyfraud: trasy i urządzenia

Materializacja JSON → kolonki: 'urządzenie. os ',' urządzenie. model „,” płatność. metoda ".
Bloom: 'graph _ device _ id'. Klaster: '(marka, kraj, urządzenie. os) ".
Indeks wektorowy: osadzenia „7d zachowanie depozytu” → szybki k-NN dla podobnych anomalii.

12) Bezpieczeństwo i prywatność

Zero-PII w indeksowanych polach i logach.
Szyfrowanie na dysku: Indeksy/statystyki są szyfrowane w taki sam sposób jak dane.
K-anonimowość agregatów: MV/projekcje są publikowane tylko przez grupy ≥ N.
Geo/lokator-izolacja: strony/klucze obejmują „marka/kraj/licencja”.
Legal Hold: indeksy/manivests również wpadają w „zamrożenie”.

13) Anty-wzory

Indeks „wszystko z rzędu” → eksplozja objętości i amplifikacja zapisu.
Małe imprezy (godzina/minuty) → burza desek i „małe pliki”.
Sortuj klucze, które nie pasują do zero pomijania danych → filtry.
Brak statystyk → złe plany, pełne skanowanie.
JSON bez indeksów ścieżki i bez urzeczywistniania gorących atrybutów.
Ignorować zagęszczanie i odsuwanie → degradacja w 2-4 tygodnie.

14) Szablony (gotowe do użycia)

14. 1 Polityka klastrowania/indeksowania (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 plan zagęszczenia jeziora (góra lodowa/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 indeksy dla pól JSON

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 Index Monitoring SLO

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) Plan działania w zakresie wdrażania

0-30 dni (MVP)

1. Zbieranie najlepszych zapytań N i profile skanowania.
2. Podział według daty + sort dopasowany do filtrów.
3. Włącz pomijanie danych (min-max) i bloom dla pól id.
4. Jedno MV na gorącą metrykę (płatności 7d).
5. Deska rozdzielcza SLI: p95, skanowane bajty, pominięty udział, małe pliki.

30-90 dni

1. Ścieżki JSON: indeksy odwrócone + materializacja.
2. Jezioro: zagęszczanie i Z-order/klastrowanie przez 2-3 klawiszy.
3. Klucz/projekcja Auto Advisor; REGULARNA ANALIZA.
4. Przegląd partii (dzień → tydzień), gdzie „małe pliki”.

3-6 miesięcy

1. Katalog MV/projekcji z wersją i SLA.
2. Wskaźniki wektorowe dotyczące zaleceń/zwalczania nadużyć finansowych.
3. Ujednolicona polityka SLO i budżety $/żądanie; ostrzeżenia o degradacji.
4. Indeks audytu prywatności, izolacja geo/lokatora.

16) RACI

Platforma danych (R): strony/indeksy/kompakty, auto-doradcy, monitoring.
Analityka/BI (R): MV/projekcje do desek rozdzielczych, profilowanie zapytań.
Właściciele domeny (C): kryteria dla gorących plasterków i filtrów.
Bezpieczeństwo/DPO (A/R): prywatność, polityka PII, klucze geo/najemcy.
SRE/Observability (C): SLO/alerting, kapasiti for compaction.
Finanse (C): budżety $/zapytanie i oszczędności z indeksów.

17) Sekcje powiązane

Schematy danych i ewolucja, walidacja danych, praktyki w zakresie OPS, analiza anomalii i korelacji, API analityki i metryk, klastrowanie danych, redukcja wymiarów, MLOp: wykorzystanie modelu.

Razem

Indeksowanie pamięci analitycznej to strategia, a nie "tworzenie indeksu wszystkiego. "Poprawne partycje i sortowanie, pomijanie i kwitnienie danych, przemyślane MV/projekcje i regularna kompresja dają szybkie i przewidywalne zapytania po kontrolowanych kosztach i bez ryzyka dla prywatności. Dla iGaming oznacza to rozwiązania operacyjne dla płatności, dostawców i RG/AML - w ramach SLA i budżetu.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.