Inhaltsverzeichnis-Engine
Die Katalog-Engine ist der Kern der Spiele-Schaufenster und Promo-Picks an der Front: Sie sammelt und normalisiert Metadaten von Anbietern (RGS), bietet Suche/Filter/Ranking, wendet Verfügbarkeitsregeln nach Jurisdiktionen und Marken an, mischt Personalisierungen und Promo-Platzierungen und gibt dann schnelle Antworten über eine API mit vorhersehbarem SLO.
1) Ziele und Grundsätze
Schnelle Lesungen: p95 ≤ 100-150 ms pro Katalog-/Suchanfrage.
Wahrheit und Frische: garantierte Relevanz der Schlüsselattribute (Verfügbarkeit, Jackpots, Anbieterstatus).
Flexibilität: redaktionelle Sammlungen und Promo-Slots ohne Releases.
Compliance: Regeln für Geo/Alter/Inhalt, Lizenzen, Einschränkungen für verantwortungsvolles Spielen.
Multi-Tenant/Region: Isolierung von Marken und Einhaltung der Datenresidenz.
Beobachtbarkeit: Output-Qualitätsmetriken, A/B, Umwandlung in Spiel/Wette.
2) Domänenmodell (Minimum)
Entitäten:- Game ist ein Spiel/Produkt des Anbieters.
- Anbieter ist RGS/studio.
- Variante - Varianten eines Spiels (Volatilität, Linien, Limits, Server).
- Sammlung - redaktionelle/automatische Auswahl (z.B. „Neuheiten“, „Jackpots“).
- Platzierung - verankerte Position/Banner/Tile auf der Seite/im Slot.
- Kapazität/Feature - Spielattribute (Freispiele, Buy Feature, Jackpot).
- JurisdictionRule - Regeln für Verfügbarkeit/Einschränkungen.
- Signale - Verhaltens-/Betriebssignale (Popularität, CTR, Revenue).
- Asset - Medien (Icons, Poster, Demo-Videos) mit Optionen für Geräte/Dichten.
Schlüssel: 'game _ id' (stabil intern, nicht gleich provider_game_id), 'tenant _ id', 'region', 'locale'.
3) Ingest und Normalisierung
Förderer:1. Source Adapters (Puller): Integrationen mit RGS/Studios (Kataloge, Fiches, RTP, Tags).
2. Sanitize & Map: Mapping externer Felder in einem einzigen Wörterbuch (ACL), Validierung und Deduplizierung.
3. Enrich: Lokalisierungen, Kategorien, semantische Tags, Altersfreigaben.
4. Moderate: Content Flags (NSFW/religiöse Symbole/sensible Themen) nach Märkten.
5. Publish: Ereignisse' GameUpserted/ProviderStatusChanged '→ Katalogprojektion.
Idempotenz: alle Nachrichten mit 'source _ id' + 'version _ ts'; Die Wiederholung wird ohne Nebenwirkungen verarbeitet.
Evolutionsschema: 'schema _ version' in Adaptern + Mapper-Migration.
4) Normalisiertes Schema (vereinfacht)
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) Suche, Filter, Facetten
Indizes: Volltext durch Namen/Synonyme, Facetten durch 'provider', 'capabilities', 'volatility', 'rtp _ bucket', 'tags'.
Filter: Gerichtsstand/Region/Sprache/Gerät/Alter, nur aktiv/zertifiziert.
Synonyme/Stemming: Eine Karte mit benutzerdefinierten Begriffen („Bücher“, „Früchte“, „Bälle“).
Tippfehler: tolerante Suche (edit distance ≤1 -2) mit Längenbeschränkung.
6) Ranking: Signale und Formel
Signale (Beispiel):- Freshness (Zeit seit der Veröffentlichung).
- Popularity (Starts/Stunde, einzigartige Spieler).
- Qualität (CTR von Katalog zu Spiel, halten 1/7 Tag).
- Geschäft (Marketing-Boosts, Angebote, Promo-Slots).
- Compliance (weiche Downgrades für sensible Inhalte, falls erforderlich).
- Player-fit (Profil/Präferenz Kompatibilität).
score = w1freshness + w2popularity + w3ctr + w4player_fit + w5boost
Gewichte werden durch Konfiguration/Experimente gesteuert; alle Signale sind auf [0; 1].
7) Personalisierung
Kurzes Gedächtnis: die neuesten Starts und Genres, RYW - der Benutzer sieht sofort frische Aktionen.
Langes Gedächtnis: Embeddings von Spielen und Spielerprofilen (Spielgenres/Volatilität/Sessions).
Sicherheit: Personalisierung verstößt niemals gegen Zuständigkeits-/Altersregeln.
Fallback: Wenn es wenig Signale gibt - neutrales Ranking + redaktionelle Sammlungen.
8) Kollektionen und Promo-Platzierungen
Sammlungen:- Auto: Regel/Abfrage (z.B., 'capabilities contains' jackpot 'AND release_date> = NOW () -30d').
- Redaktionell: manuelle Liste mit Reihenfolge und Fristen.
- Platzierungen: verankerte Positionen auf Seiten (Held, Reihe-1-Slot-3), A/B, Targeting nach Segmenten/Jurisdiktionen.
- Fristen und Prioritäten: 'starts _ at/ends _ at', Priorität der Kollisionen, Vorschau vor der Veröffentlichung.
9) Compliance- und Verfügbarkeitspolitik
Geo/Gerichtsbarkeit: weiße/schwarze Listen von Ländern/Regionen, Prüfung von Lizenzen/Zertifikaten.
Alterseinstufung: Mindestalter, Warnungen, Verschleierung für inkompatible Märkte.
Thema/Symbolik: Flaggen sensibler Inhalte nach Ländern (Religion, Alkohol usw.).
Verantwortungsvolles Spielen: Ausblenden/Herunterstufen für Spieler mit Limits/Timeout.
Audit: Unveränderliches Protokoll von Verfügbarkeitsänderungen mit Ursachen.
10) Multi-Tenant und Multi-Region
Alle Daten sind mit 'tenant _ id' und 'region' gekennzeichnet.
Isolierung: Quorum/Speicher nach Region; regionalübergreifende Projektionen - nur Aggregate.
Fairness: Quoten für ingest/Publikationen per tenant, damit die „laute“ Marke die anderen nicht verzögert.
11) Architektonischer Umriss
Verzeichnis Write Core (CP): Normalisierung + Transaktions-Outbox von Ereignissen.
Projektionen/Read Models (EC): Suchindizes, materialisierte Sammlungen, Popularitätszähler.
- Edge/CDN für „kalte“ Seiten/Bilder.
- In-Memory-Caches für Hot Requests (key = Filter + Seite + Tenant + Region).
- Ficheflagi: Rolling Ranking-Regeln/Sammlungen ohne Release.
12) API (REST/GraphQL, Beispiele)
REST
GET /v1/catalog?tenant=brand_eu®ion=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
}
}
Verträge:
- Gib immer 'as _ of/freshnessMs', Packaging, Facetten zurück.
- Zur Personalisierung - Session Token (RYW) ohne PII.
13) Signale und Datenfluss
Popularität: Inkremente beim Start von Spielen → Minutenbakets → Aggregate in der Projektion.
CTR/Conversion: Klick-/Startzähler auf Platzierungen/Sammlungen.
Betriebsstatus: Gesundheitsanbieter (RGS), Jackpots/Limits (Event-Stream).
Marketing-Boosts: Zeitquoten für Spiele/Kategorien/Anbieter.
14) Beobachtbarkeit und SLO
Katalogmetriken:- `catalog_p95_ms`, `catalog_p99_ms`, `error_rate`.
- „index _ freshness _ ms“ (Projektverzögerung), „ingest _ lag _ ms“.
- 'ctr', 'click-to-launch', 'collection _ coverage' (% der Ausgabe aus Sammlungen).
- `lift_ctr`, `lift_conversion`, «explore vs exploit» доля.
- % korrekt angewendete Geo-/Altersregeln, Blockanzahl/Stunde.
Alertas: das Wachstum von 'ingest _ lag _ ms', der Rückgang der CTR bei Schlüsselsammlungen, die Degradierung des Anbieters (Tags in der Ausgabe).
15) Leistung und Caching
Strategie: Hot Requests - Cache für 30-120 s mit einem Schlüssel für Filter; persönliche Blöcke - kurze TTL (10-30 s) oder kein Cache.
Behinderung: durch Ereignisse' GameUpserted/AvailabilityChanged/PlacementUpdated'.
Paginierung: Stabile Cursor, damit die Karten beim Aktualisieren der Signale nicht „galoppieren“.
16) Umgang mit Medien
Renderprofile: Größen/Dichten für Web/Mobile/TV.
Optimierung: WebP/AVIF, lazy-load, sprite/atlas für Fliesen.
Content-Sicherheit: Scannen, Wasserzeichen, Inline-PII-Verbot.
17) Testen
Vertrags-/Schema-Tests für Adapter und APIs.
Relevante Tests: Goldabfragesätze → erwartete Ergebnisse/Reihenfolge.
Personalisierung: offline AUC/NDCG + online A/B mit Guardrail-Metriken (Spielzeit, Einzahlungen, RG-Signale).
Chaos: Degradierung der Anbieter, Ingest-Spitzen, Indexierungsverzögerungen.
18) Playbooks (Runbooks)
1. Index Lag> SLO: Sekundärsammlungen stoppen, ingest priorisieren, Ranking vorübergehend vereinfachen.
2. Anbieter „rot“: Herunterstufen/Ausblenden seiner Spiele, heben alternative Sammlungen.
3. API-Fehlersprung: Cache/Backend überprüfen, Schutzzeitpunkte aktivieren, Seitengröße reduzieren.
4. Falsche Verfügbarkeiten: Rücknahme der letzten Regel, Aufnahme einer „Whitelist“ kritischer Märkte, Prüfung von Änderungen.
5. Ranking-Release: Kanarienroll (5% → 25% → 50% → 100%), CTR/Conversion-Rollback.
19) Typische Fehler
Mischen der externen Schemata der Provider mit dem internen Modell (keine ACL).
Das Fehlen von „as _ of/freshness“ → Kontroversen über das „veraltete“ Verzeichnis.
Personalisierung, die gegen die Zuständigkeitsregeln verstößt.
Die einzige „magische“ Ranking-Formel ohne Zerlegung der Signale und A/B.
Große Seiten ohne Zwischenspeicherung und Cursor → p99 „schießen“.
Dual-write in Index und OLTP statt Events + Projektionen.
20) Checkliste vor dem Verkauf
- Normalisiertes Feld Wörterbuch und ACL für alle Anbieter.
- Idempotent ingest, outbox/inbox, DLQ und redrive.
- Katalogprojektionen und Suchindizes mit SLO Frische.
- Rangfolge mit steuerbaren Gewichten, Signalzerlegung und A/B
- Compliance-Regeln (Geo/Alter/Thema) und Änderungsaudits.
- Multi-Tenant/Region: Datenisolation, Fairness, Residency.
- API mit 'as _ of', Facetten, Cursor; Cache und Behinderung durch Ereignisse.
- Metriken p95/p99, ingest/indexing, CTR/conversion; Alertas.
- Playbooks der Vorfälle; kanarische Releases und Ficheflagen.
- Tests für Relevanz, Verträge, Chaos und Personalisierung.
Schluss
Die Katalog-Engine ist „Suchmaschine + Regelsystem + Schaufenster“ über den Spielinhalten. Starke ACLs, normalisierte Daten, Projektionen für schnelle Lesungen, transparente Rankingsignale, Personalisierung mit Guardrail-Metriken und strikte Compliance machen den Katalog zu einem nachhaltigen und messbaren Produktwachstumshebel - ohne Überraschungen in der Produktion und ohne Kompromisse bei den Regulatoren.