GH GambleHub

Silnik katalogu treści

Silnik katalogowy jest rdzeniem prezentacji gier i kolekcji promocyjnych z przodu: zbiera i normalizuje metadane od dostawców (RGS), zapewnia wyszukiwanie/filtry/ranking, stosuje zasady dostępności według jurysdykcji i marki, miesza personalizację i stacje promocyjne, a następnie dostarcza szybkie odpowiedzi za pośrednictwem API z przewidywalną SLO.


1) Cele i zasady

Szybki odczyt: p95 ≤ 100-150 ms na żądanie katalogu/wyszukiwania.
Prawda i świeżość: gwarantowane znaczenie kluczowych atrybutów (dostępność, jackpoty, statusy dostawców).
Elastyczność: kolekcje redakcyjne i automaty promocyjne bez wydań.
Zgodność: geo/age/content rules, licencje, odpowiedzialne ograniczenia gry.
Multi-najemca/region: izolacja marki i zgodność z rezydencją danych.
Obserwability: Outing Quality Metrics, A/B, Game Conversion/Bet.


2) Model domeny (minimum)

Podmioty:
  • Gra jest grą/produktem dostawcy.
  • Dostawca - RGS/studio.
  • Wariant - warianty jednej gry (zmienność, linie, limity, serwer).
  • Kolekcja - wybór edytorski/automatyczny (np. „Nowe przedmioty”, „Jackpoty”).
  • Umieszczenie - stałe położenie/baner/płytka na stronie/w gnieździe.
  • Możliwość/Funkcja - atrybuty gry (darmowe spiny, funkcja kupna, jackpot).
  • Zasada - zasady dostępności/ograniczenia.
  • Sygnały - sygnały behawioralne/operacyjne (popularność, CTR, przychody).
  • Asset - media (ikony, plakaty, demo video) z opcjami dla urządzeń/gęstości.

Klucze: 'game _ id' (stabilne wewnętrzne, nie równe provider_game_id),' lokator _ id', 'region', 'locale'.


3) Połknięcie i normalizacja

Przenośnik:

1. Adaptery źródłowe (pullery): integracje z RGS/studios (katalogi, funkcje, RTP, tagi).

2. Sanitize & Map - Map pola zewnętrzne do jednego słownika (ACL), zwaliduj i deduplicate.

3. Wzbogacony: lokalizacje, kategorie, znaczniki semantyczne, oceny graniczne wieku.

4. Umiarkowany: flagi treści (NSFW/symbole religijne/tematy wrażliwe) według rynku.

5. Opublikuj: 'GameUpserted/ "wydarzenia → projekcja katalogu.

Idempotencja: wszystkie wiadomości z 'source _ id' +' version _ ts'; powtórzenie jest przetwarzane bez skutków ubocznych.
Schemat ewolucji: 'schema _ version' w adapterach + migracje maperów.


4) Znormalizowany system (uproszczony)

json
{
"game_id": "g_3f92",
"tenant_id": "brand_eu",
"provider": { "id": "pr_evolution", "name": "Evolution" },
"title": { "en": "Lightning Roulette", "de": "Lightning Roulette" },
"capabilities": ["live","roulette","multiplier","bonus"],
"rtp": 97.3,
"volatility": "high",
"limits": { "min": 0.1, "max": 1000.0, "currency": "EUR" },
"jurisdiction": {
"allowed": ["MT","EE","DE"],
"blocked": ["NL","BE"],
"age_rating": 21
},
"assets": {
"tile": { "1x":"...", "2x":"..." },
"poster": { "web":"...", "mobile":"..." }
},
"tags": ["new","jackpot"],
"release_date": "2025-09-12",
"status": "active",
"variants": [{ "id":"v1","server":"eu-central-1","rtp":97.3 }]
}

5) Wyszukiwanie, filtry, fasony

Indeksy: pełny tekst według nazwy/synonimów, facets by 'provider', 'capabilities', 'volatility', 'rtp _ bucket', 'tags'.
Filtry: jurysdykcja/region/język/urządzenie/wiek, tylko aktywne/certyfikowane.
Synonimy/stemming: mapa terminów użytkownika („książki”, „owoce”, „kule”).
Typos: wyszukiwanie tolerancyjne (edycja odległości ≤ 1 -2) z ograniczeniem długości.


6) Ranking: sygnały i formuła

Sygnały (przykład):
  • Świeżość (czas od wydania).
  • Populacja (początki/godzinę, unikalnych graczy).
  • Jakość (CTR od katalogu do gry, trzymaj 1/7 dnia).
  • Biznes (promocje, promocje, automaty promocyjne).
  • Zgodność (miękkie obniżki dla treści wrażliwych, jeśli jest to wymagane).
  • Dopasowanie gracza (kompatybilność profilu/preferencji).
Połączenie (pojęcie):

score = w1freshness + w2popularity + w3ctr + w4player_fit + w5boost

Wagi są kontrolowane przez konfigurację/eksperymenty; wszystkie sygnały znormalizowane do [0; 1].


7) Personalizacja

Krótka pamięć: ostatnie starty i gatunki, RYW - użytkownik natychmiast widzi świeże działanie.
Długa pamięć: osadzanie profilu gier i graczy (gatunki gier/zmienność/sesje).
Bezpieczeństwo: Personalizacja nigdy nie narusza zasad jurysdykcyjnych/wiekowych.
Fallback: jeśli jest mało sygnałów - ranking neutralny + kolekcje redakcyjne.


8) Kolekcje i staż promocyjny

Zbiory:
  • Auto: reguła/zapytanie (np. 'możliwości zawiera' jackpot 'AND release_date> = NOW () -30d').
  • Redakcja: lista ręczna z zamówieniem i terminem.
  • Rozmieszczenie: stałe pozycje na stronach (bohater, wiersz-1-slot-3), A/B, ukierunkowane według segmentu/jurysdykcji.
  • Daty i priorytety: 'starts _ at/ends _ at', priorytet kolizji, podgląd przed publikacją.

9) Polityka w zakresie zgodności i dostępności

Geo/jurysdykcja: białe/czarne listy krajów/regionów, weryfikacja licencji/certyfikatów.
Ocena wieku: minimalny wiek, ostrzeżenia, ukrywanie się na rynkach niezgodnych ze wspólnym rynkiem.
Temat/symbolizm: flagi treści wrażliwych według krajów (religia, alkohol itp.).
Odpowiedzialna gra: Ukryj/demote dla graczy limitu/timeout.
Audyt: niezmienny dziennik zmian w dostępności z przyczyn.


10) Wielopoziomowy i wielobranżowy

Wszystkie dane są oznaczone jako 'lokator _ id' i' region '.
Izolacja: kworum/sklepienie według regionu; projekcje międzyregionalne - tylko kruszywa.
Sprawiedliwość: kwoty na połknięcie/publikacje na najemcę, aby „hałaśliwa” marka nie opóźniała reszty.


11) Zarys architektoniczny

Katalog write-core (CP): normalizacja + transactional outbox events.
Projections/Read Models (EC): indeksy wyszukiwania, zmaterializowane zbiory, liczniki popularności.

Warstwy pamięci podręcznej:
  • Krawędź/CDN dla zimnych stron/obrazów.
  • Pamięć podręczna dla zapytań na gorąco (klucz = filtry + strona + lokator + region).
  • Ficheflags: ranking toczenia/zasady zbierania bez zwolnienia.

12) API (REST/GraphQL, przykłady)

ODPOCZYNEK


GET /v1/catalog?tenant=brand_eu&region=EE&locale=ru
&filter=jackpot,true&sort=score_desc&page=1&size=24
→ 200 { items:[...], facets:{...}, as_of:"2025-10-31T12:10:02Z" }

GraphQL (fragment)

graphql query Catalog($tenant:String!,$region:String!,$q:String,$filters:Filters){
catalog(tenant:$tenant, region:$region, q:$q, filters:$filters){
items { gameId title provider { name } score badges assets { tile } }
facets { providers { key,count } capabilities { key,count } }
freshnessMs
}
}
Umowy:
  • Zawsze wracaj 'as _ of/freshMs', page, facets.
  • Do personalizacji - marker sesji (RYW) bez PII.

13) Sygnały i przepływ danych

Popularność: przyrosty podczas uruchamiania gier → minutowe wiadra → jednostki w projekcji.
CTR/konwersja: Kliknij/uruchom liczniki na lokalizacje/kolekcje.
Statusy operacyjne: podmioty świadczące usługi zdrowotne (RGS), jackpoty/limity (strumień zdarzeń).
Bodźce marketingowe: czynniki czasowe dla gier/kategorii/dostawców.


14) Obserwowalność i SLO

Metryka katalogu:
  • 'catalog _ p95 _ ms', 'catalog _ p99 _ ms', 'error _ rate'.
  • „index _ freshness _ ms” (opóźnienie projektu), „ingest _ lag _ ms”.
  • 'ctr', 'click-to-launch', 'collection _ coverage' (% check out from collections).
Personalizacja:
  • 'lift _ ctr', 'lift _ conversion', 'explore vs exploit' дола.
Zgodność:
  • % prawidłowo stosowane zasady geo/wiekowe, liczba bloków/godzinę.

Wpisy: wzrost 'ingest _ lag _ ms', spadek CTR na zbiorach kluczowych, degradacja dostawcy (tagi w wydaniu).


15) Wydajność i buforowanie

Strategia: gorące zapytania - pamięć podręczna dla 30-120 s z kluczem przez filtry; bloki osobowe - krótki TTL (10-30 s) lub brak pamięci podręcznej.
Niepełnosprawność: Przez 'GameUpsested/KeyChanged/PlacementUpdated' wydarzenia.
Paginacja: stabilne kursory, aby nie „skakać” kartami podczas aktualizacji sygnałów.


16) Praca z mediami

Profile renderowania: rozmiary/gęstości dla sieci web/mobile/TV.
Optymalizacja: WebP/AVIF, leniwe obciążenie, sprite/atlas dla płytek.
Bezpieczeństwo treści: skanowanie, znaki wodne, zakaz inline-PII.


17) Badanie

Testy kontraktowe/schematyczne dla adapterów i API.
Testy przydatności: złote zestawy zapytań → oczekiwane wyniki/zamówienie.
Personalizacja: offline AUC/NDCG + online A/B z metrykami bariery (czas gry, depozyty, sygnały RG).
Chaos: degradacja dostawcy, kolce połykania, opóźnienia indeksowania.


18) Playbooks (książki startowe)

1. Index lag> SLO: zatrzymać kolekcje wtórne, zwiększyć priorytet spożycia, tymczasowo uprościć ranking.
2. Dostawca „czerwony”: niżej/ukryć swoje gry, podnieść kolekcje alternatywne.
3. Skok błędu API: sprawdź pamięć podręczną/backend, włącz czasy zabezpieczeń, zmniejszyć rozmiar strony.
4. Nieprawidłowa dostępność: wycofać ostatnią regułę, włączyć „białą listę” rynków krytycznych, zmiany audytu.
5. Wydanie rankingu: canary rollout (5% → 25% → 50% → 100%), CTR/conversion rollback.


19) Typowe błędy

Mieszanie schematów zewnętrznych dostawców z modelem wewnętrznym (bez ACL).
Brak 'as _ of/freshness' → spory o „przestarzały” katalog.
Personalizacja, która narusza przepisy jurysdykcyjne.
Jedyna „magiczna” formuła rankingu bez rozkładu sygnałów i A/B.
Duże strony bez buforowania i kursorów → p99 „strzelać”.
Dual-write do indeksu i OLTP zamiast zdarzeń + projekcje.


20) Lista kontrolna przedsprzedaży

  • Znormalizowany słownik pola i ACL dla wszystkich dostawców.
  • Idempotent ingest, outbox/inbox, DLQ i redrive.
  • Prognozy katalogowe i indeksy wyszukiwania ze świeżością SLO.
  • Ranking kontrolowany wagą, rozkład sygnału i A/B.
  • Zasady zgodności (geo/wiek/temat) i audyt zmian.
  • Multi-najemca/region: izolacja danych, uczciwość, miejsce zamieszkania.
  • API z 'as _ of', fasady, kursory; pamięci podręcznej i niepełnosprawności według zdarzeń.
  • p95/p99 metryki, połknięcie/indeksowanie, CTR/konwersja; wpisy.
  • Playbooks incydentów; kanarki i ficheflagi.
  • Testy znaczenia, kontrakty, chaos i personalizacja.

Wniosek

Silnik katalogowy to „wyszukiwarka + system reguł + prezentacja” nad treścią gry. Silny ACL, znormalizowane dane, projekcje do szybkich odczytów, przejrzyste sygnały rankingowe, personalizacja z metrykami bariery i ścisła zgodność przekształca katalog w zrównoważoną i wymierną dźwignię wzrostu produktu - bez niespodzianek w produkcji i bez kompromisów z regulatorami.

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.