GH GambleHub

콘텐츠 카탈로그 엔진

카탈로그 엔진은 전면의 게임 쇼케이스 및 프로모션 컬렉션의 핵심입니다. 공급자 (RGS) 의 메타 데이터를 수집 및 정규화하고 검색/필터/순위를 제공하며 관할권 및 브랜드별로 접근성 규칙을 적용한 다음 예측 가능한 SLO를 통해 API를 통해 빠른 응답변.


1) 목표와 원칙

빠른 읽기: 디렉토리/검색 요청 당 p95 λ100-150 ms.
진실과 신선도: 주요 속성 (가용성, 대박, 공급자 상태) 의 관련성 보장.
유연성: 릴리스가없는 편집 컬렉션 및 프로모션 슬롯.
준수: 지리/연령/컨텐츠 규칙, 라이센스, 책임있는 플레이 제한.
멀티 테넌트/지역: 브랜드 격리 및 데이터 레지던트 준수.
관찰 가능성: Outing Quality Metrics, A/B, 게임 변환/베팅.


2) 도메인 모델 (최소)

엔터티:
  • 게임은 공급자의 게임/제품입니다.
  • 공급자-RGS/스튜디오.
  • 변형 - 한 게임의 변형 (변동성, 라인, 한계, 서버).
  • 수집 - 편집/자동 선택 (예: "새로운 아이템", "잭팟").
  • 배치 - 페이지/슬롯의 고정 위치/배너/타일.
  • 기능/기능-게임 속성 (무료 스핀, 구매 기능, 잭팟).
  • JurisdictionRule-접근성/제한 규칙.
  • 신호-행동/운영 신호 (인기, CTR, 수익).
  • 자산-장치/밀도 옵션이있는 미디어 (아이콘, 포스터, 데모 비디오).

키: 'game _ id' (공급자 _ game _ id와 같지 않은 안정적인 내부), 'tenant _ id', 'region', 'locale'.


3) 소화 및 정규화

컨베이어:

1. 소스 어댑터 (풀러): RGS/스튜디오와의 통합 (디렉토리, 기능, RTP, 태그).

2. Sanitize & Map-외부 필드를 단일 사전 (ACL) 으로 매핑하고 검증 및 복제합니다.

3. Enrich: 지역화, 카테고리, 시맨틱 태그, 연령 제한 등급.

4. 보통: 시장별 콘텐츠 플래그 (NSFW/종교적 기호/민감한 주제).

5. 게시 날짜: 'GameUpserted/ProviderStatusChanged' 이벤트 → 카탈로그 프로젝션.

이데올로기: 'source _ id' + 'version _ ts' 가있는 모든 메시지; 부작용없이 반복이 처리됩니다.
진화 체계: 어댑터 + 매퍼 마이그레이션의 '스키마 _ 버전'.


4) 정규화 된 체계 (단순화)

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) 검색, 필터, 측면

색인: 이름/동의어 전체 텍스트, '제공자', '기능', '변동성', 'rtp _ bucket', '태그'.
필터: 관할권/지역/언어/장치/연령, 활성/인증 만.
동의어/줄기: 사용자 용어 맵 ("책", "과일", "공").
타이포: 길이 제한이있는 허용 가능한 검색 (거리 편집 번호 1-2).


6) 순위: 신호 및 공식

신호 (예):
  • 신선도 (출시 이후 시간).
  • 인구 (시작/시간, 고유 한 플레이어).
  • 품질 (카탈로그에서 게임까지 CTR, 1/7 일 보류).
  • 비즈니스 (마케팅 부스트, 거래, 프로모션 슬롯).
  • 준수 (필요한 경우 민감한 콘텐츠에 대한 소프트 다운 그레이드).
  • 플레이어 적합 (프로필/선호도 호환성).
조합 (개념):

score = w1freshness + w2popularity + w3ctr + w4player_fit + w5boost

무게는 구성/실험에 의해 제어됩니다. [0으로 정규화 된 모든 신호; 1].


7) 개인화

짧은 메모리: 최근 출시 및 장르 인 RYW-사용자는 즉시 새로운 행동을 봅니다.
긴 메모리: 게임 및 플레이어 프로필 임베딩 (게임 장르/변동성/세션).
보안: 개인화는 관할권/연령 규칙을 위반하지 않습니다.
폴백: 중립 순위 + 편집 모음과 같은 신호가 거의없는 경우.


8) 컬렉션 및 프로모션 배치

컬렉션:
  • 자동: 규칙/쿼리 (예: '기능에는' 잭팟 '및 릴리스 _ date> = NOW () -30d' 가 포함되어 있습니다.
  • 편집: 순서와 타이밍이있는 수동 목록.
  • 배치: 세그먼트/관할권별로 대상으로 페이지 (영웅, 행 -1 슬롯 -3), A/B의 고정 위치.
  • 날짜 및 우선 순위: 'starts _ at/end _ at', 충돌 우선 순위, 게시 전 미리보기.

9) 준수 및 접근성 정책

지리/관할권: 국가/지역의 흰색/검은 색 목록, 라이센스/인증서 확인.
연령 등급: 최소 연령, 경고, 호환되지 않는 시장 숨기.
주제/상징: 국가 별 민감한 내용의 깃발 (종교, 알코올 등).
책임있는 플레이: 한계/타임 아웃 플레이어의 경우 숨기기/강등.
감사: 이유에 따라 가용성 변경에 대한 불변의 로그.


10) 다중 테넌트 및 다중 지역

모든 데이터는 '테넌트 _ id' 및 '지역' 으로 표시됩니다.
격리: 지역별 쿼럼/볼트; 지역 간 예측-집계 만 가능합니다.
공정성: "잡음" 브랜드가 나머지를 지연시키지 않도록 임차인 당 섭취/게시물에 대한 할당량.


11) 건축 개요

쓰기 코어 디렉토리 (CP): 정규화 + 트랜잭션 아웃 박스 이벤트.
프로젝션/읽기 모델 (EC): 검색 지수, 구체화 된 컬렉션, 인기 카운터.

캐시 레이어:
  • 콜드 페이지/이미지의 가장자리/CDN입니다.
  • 핫 쿼리에 대한 메모리 내 캐시 (키 = 필터 + 페이지 + 테넌트 + 영역).
  • Ficheflags: 릴리스없이 순위/수집 규칙 롤링.

12) API (REST/GraphQL, 예)

REST


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 (조각)

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
}
}
계약:
  • 항상 '_ of/freshnessM', 페이징, 패싯으로 반환합니다.
  • 개인화-PII가없는 세션 마커 (RYW).

13) 신호 및 데이터 흐름

인기: 게임을 시작할 때의 증분 → 미세한 버킷 → 투영 단위.
CTR/변환: 배치/수집시 클릭/시작 카운터.
운영 상태: 의료 제공자 (RGS), 대박/제한 (이벤트 스트림).
마케팅 향상: 게임/카테고리/공급 업체의 시간 요소.


14) 관찰 및 SLO

디렉토리 메트릭:
  • '카탈로그 _ p95 _ ms', '카탈로그 _ p99 _ ms', '오류 _ rate'.
  • 'indx _ freshness _ ms' (프로젝트 지연), 'ingest _ lag _ ms'.
  • 'ctr', 'cluck-to-launch', 'collection _ coverage' (컬렉션에서% 체크 아웃).
개인화:
  • 'lift _ ctr', 'lift _ conversion', "탐색 대 악용"
준수:
  • % 는 지리/연령 규칙, 블록/시간 수를 올바르게 적용했습니다.

경고: 'ingest _ lag _ ms' 의 성장, 주요 컬렉션의 CTR 감소, 공급자의 저하 (문제의 태그).


15) 성능과 캐싱

전략: 핫 쿼리-필터 별 키로 30-120 초 동안 캐시; 개인 블록-짧은 TTL (10-30 초) 또는 캐시 없음.
장애: 'GameUpserted/AvailabiliyChanged/Placementuped' 이벤트.
페이지 화: 신호를 업데이트 할 때 카드를 "점프" 하지 않도록 안정적인 커서.


16) 미디어와 협력

렌더 프로필: 웹/모바일/TV의 크기/밀도.
최적화: WebP/AVIF, 게으른로드, 타일 용 스프라이트/아틀라스.
콘텐츠 보안: 스캔, 워터 마크, 인라인 -PII 금지.


17) 테스트

어댑터 및 API에 대한 계약/스키마 테스트.
관련 테스트: 골든 쿼리 세트 → 예상 결과/순서.
개인화: 가드 레일 메트릭 (게임 내 시간, 예금, RG 신호) 이있는 오프라인 AUC/NDCG + 온라인 A/B.
혼돈: 공급자 저하, 스파이크 섭취, 색인 지연.


18) 플레이 북 (런북)

1. 지연> SLO: 2 차 수집을 중단하고 섭취 우선 순위를 높이고 순위를 일시적으로 단순화하십시오.
2. 공급자 "빨간색": 게임을 낮추거나 숨기고 대체 컬렉션을 높이십시오.

3. API 오류 점프: 캐시/백엔드를 확인하고 보안 시간 초과를 활성화하며 페이지 크기를 줄입니

4. 잘못된 가용성: 마지막 규칙을 롤백하고 중요한 시장의 "화이트리스트", 감사 변경 사항을 포함합니다.
5. 랭킹 릴리스: 카나리아 롤아웃 (5% → 25% → 50% → 100%), CTR/변환 롤백.


19) 전형적인 오류

신호와 A/B를 분해하지 않는 유일한 "매직" 순위 공식

외부 공급자 스키마와 내부 모델 (ACL 없음) 을 혼합합니다.
'as _ of/freshness' 의 부재 → "오래된" 디렉토리에 대해 이의를 제기합니다.
관할권 규칙을 위반하는 개인화.
캐싱과 커서가없는 큰 페이지 → p99 "촬영".
이벤트 + 프로젝션 대신 색인 및 OLTP에 이중 쓰기.


20) 사전 판매 점검표

  • 모든 공급자를위한 정규화 된 필드 사전 및 ACL.
  • Idempotent 섭취, 아웃 박스/받은 편지함, DLQ 및 재 드라이브.
  • 신선도 SLO가있는 카탈로그 예측 및 검색 색인.
  • 무게 제어 순위, 신호 분해 및 A/B
  • 규칙 준수 (지리/연령/주제) 및 변경 감사.
  • 다중 임차인/지역: 데이터 격리, 공정성, 거주지.
  • 'as _ of', 패셋, 커서가있는 API; 이벤트 별 캐시 및 장애.
  • p95/p99 메트릭, 섭취/인덱싱, CTR/변환; 경고.
  • 사건 플레이 북; 카나리아 릴리스 및 변형.
  • 관련성, 계약, 혼돈 및 개인화 테스트.

결론

카탈로그 엔진은 게임 컨텐츠에 대한 "검색 엔진 + 규칙 시스템 + 쇼케이스" 입니다. 강력한 ACL, 정규화 된 데이터, 빠른 읽기 예측, 투명한 순위 신호, 가드 레일 지표를 사용한 개인화 및 엄격한 준수는 카탈로그를 생산에 놀라움이없고 규제 기관과의 타협없이 지속 가능하고 측정 가능한 성장 수단으로 바꿉니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.