შინაარსის კატალოგის ძრავა
კატალოგის ძრავა არის თამაშების ფანჯრის ბირთვი და პრომო შერჩევა ფრონტზე: ის აგროვებს და ნორმალიზებს მეტამონაცემებს პროვაიდერებისგან (RGS), უზრუნველყოფს ძებნას/ფილტრებს/რანჟირებას, იყენებს იურისდიქციებსა და ბრენდებზე წვდომის წესებს, აფერხებს პერსონალიზაციას და სარეკლამო პლაკატებს, შემდეგ კი პროგნოზირებადი SLI- ით აძლევს სწრაფ - ს ო.
1) მიზნები და პრინციპები
სწრაფი კითხვა: p95-100-150 ms კატალოგის/ძიების მოთხოვნით.
სიმართლე და სიახლე: ძირითადი ატრიბუტების გარანტირებული აქტუალობა (წვდომა, ჯეკპოტები, პროვაიდერის სტატუსი).
მოქნილობა: სარედაქციო კოლექციები და სარეკლამო სლოტები გამოშვების გარეშე.
შესაბამისობა: გეო/ასაკის/შინაარსის წესები, ლიცენზია, პასუხისმგებლობის თამაშის შეზღუდვები.
მრავალ ჩრდილში/რეგიონში: ბრენდების იზოლაცია და მონაცემთა დათმობის დაცვა.
დაკვირვება: გაცემის ხარისხის მეტრიკა, A/B, კონვერტაცია თამაშში/ფსონში.
2) დომენის მოდელი (მინიმალური)
არსება:- თამაში არის თამაში/პროვაიდერის პროდუქტი.
- Provider - RGS/სტუდია.
- Variant - ერთი თამაშის ვარიანტები (ცვალებადობა, ხაზები, ლიმიტები, სერვერი).
- კოლექცია არის სარედაქციო/ავტომატური შერჩევა (მაგ., „სიახლეები“, „ჯეკპოტები“).
- Placement - ფიქსირებული პოზიცია/ბანერი/ტაილი გვერდზე/სლოტში.
- Capability/Feature - თამაშის ატრიბუტები (უფასო spins, buy feature, ჯეკპოტი).
- Jurisdicute Rule - ხელმისაწვდომობის/შეზღუდვების წესები.
- Signals - ქცევითი/ოპერაციული სიგნალები (პოპულარობა, CTR, revenue).
- Asset - მედია (ხატები, პლაკატები, დემო ვიდეო) მოწყობილობების/სიმკვრივის ვარიანტებით.
გასაღებები: 'game _ id' (სტაბილური შიდა, არ ტოლია provider _ game _ id), 'tenant _ id', 'region', 'locale'.
3) ინჯესტი და ნორმალიზაცია
კონვეიერი:1. წყაროს მიმდევრები (ტყვია): ინტეგრაცია RGS/სტუდიებთან (კატალოგები, ფიჩები, RTP, ჭდეები).
2. Sanitize & Map: გარე ველების მაპინგი ერთ ლექსიკონში (ACL), ვალიდაცია და დედუპლიკაცია.
3. Enrich: ლოკალიზაცია, კატეგორიები, სემანტიკური ჭდეები, ასაკობრივი შეზღუდვების რეიტინგი.
4. თანამედროვე: შინაარსის დროშები (NSFW/რელიგიური სიმბოლოები/მგრძნობიარე თემები) ბაზრებზე.
5. Publish: მოვლენები 'GameUpserted/ProviderStatusChanged' კატალოგის პროექციები.
Idempotence: ყველა შეტყობინება 'source _ id' + 'version _ ts'; გამეორება დამუშავებულია გვერდითი მოვლენების გარეშე.
ევოლუციის სქემა: 'schema _ version' ადაპტერებში + მაპერის მიგრაცია.
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) ძებნა, ფილტრები, ფასეტები
ინდექსები: სრული ტექსტი სახელის/სინონიმების მიხედვით, ფასადები 'provider', 'capabilities', 'volatily', 'rtp _ bucket', 'tags'.
ფილტრები: იურისდიქცია/რეგიონი/ენა/მოწყობილობა/ასაკი, მხოლოდ აქტიური/სერთიფიცირებული.
სინონიმები/სტემინგი: მომხმარებლის ტერმინების რუკა („წიგნები“, „ხილი“, „ბურთები“).
ტიპაჟები: tolerant search (edit distance 1-2) სიგრძის შეზღუდვით.
6) რანჟირება: სიგნალები და ფორმულა
სიგნალები (მაგალითი):- Freshness (გამოსვლის დრო).
- Popularity (გაშვება/საათი, უნიკალური მოთამაშეები).
- Quality (CTR კატალოგიდან თამაშში, გამართვა 1/7 დღე).
- ბიზნესი (მარკეტინგული ბუჩქები, გარიგებები, სარეკლამო სლოტები).
- კომპლექტი (რბილი ვარდნა მგრძნობიარე შინაარსისთვის, საჭიროების შემთხვევაში).
- Player-fit (პროფილის/პრეფერენციების თავსებადობა).
score = w1freshness + w2popularity + w3ctr + w4player_fit + w5boost
წონებს აკონტროლებენ კონფიგურაცია/ექსპერიმენტები; ყველა სიგნალი ნორმალიზებულია [0; 1].
7) პერსონალიზაცია
მოკლე მეხსიერება: უახლესი გაშვება და ჟანრები, RYW - მომხმარებელი დაუყოვნებლივ ხედავს ახალ მოქმედებებს.
გრძელი მეხსიერება: მოთამაშის თამაშების და პროფილის ემბედინგი (თამაშის ჟანრები/ცვალებადობა/სესიები).
უსაფრთხოება: პერსონალიზაცია არასოდეს არღვევს იურისდიქციულ/ასაკობრივ წესებს.
Fallback: თუ სიგნალები ცოტაა - ნეიტრალური რანგი + სარედაქციო კოლექციები.
8) კოლექციები და სარეკლამო პლაკატები
კოლექციები:- ავტო: წესი/მოთხოვნა (მაგ., 'capilities contains' jackpot 'and release _ date> NOW () -30d').
- რედაქტორი: სახელმძღვანელო სია შეკვეთით და ვადებით.
- Placements: დაფიქსირებული პოზიციები გვერდებზე (hero, row-1-slot-3), A/B, მიზნობრივი სეგმენტები/იურისდიქციები.
- ვადები და პრიორიტეტები: 'starts _ at/ends _ at', შეჯახების პრიორიტეტი, გამოქვეყნებამდე გადახედვა.
9) შესაბამისობა და ხელმისაწვდომობის პოლიტიკა
გეო/იურისდიქცია: ქვეყნების/რეგიონების თეთრი/შავი სიები, ლიცენზიის/სერთიფიკატების შემოწმება.
ასაკობრივი რეიტინგი: მინიმალური ასაკი, გაფრთხილება, დამალვა შეუთავსებელი ბაზრებისთვის.
თემა/სიმბოლიზმი: მგრძნობიარე შინაარსის დროშები ქვეყნებში (რელიგია, ალკოჰოლი და ა.შ.).
საპასუხისმგებლო თამაში: დამალვა/ვარდნა მოთამაშეებისთვის, რომელთაც აქვთ შეზღუდვები/დრო.
აუდიტი: მიზეზებთან წვდომის ცვლილების უცვლელი ლოგი.
10) მულტფილმები და მულტფილმის რეგიონი
ყველა მონაცემი აღინიშნება 'tenant _ id' და 'region'.
იზოლაცია: კვორუმი/საცავი რეგიონებში; ჯვარედინი რეგიონალური პროგნოზები - მხოლოდ აგრეგატები.
Fairness: კვოტები ingest/პუბლიკაციებისთვის per tenant ისე, რომ „ხმაურიანი“ ბრენდი არ დააკავოს დანარჩენებს.
11) არქიტექტურული წრე
Write დირექტორიის ბირთვი (CP): + გარიგების გარე მოვლენების ნორმალიზაცია.
პროგნოზები/Read Models (EC): ძიების ინდექსები, მატერიალიზებული კოლექციები, პოპულარობის მრიცხველები.
- Edge/CDN „ცივი“ გვერდებისთვის/სურათებისთვის.
- ცხელი მოთხოვნის სამახსოვრო ქეში (key = ფილტრები + გვერდი + tenant + region).
- ფიჩეფლაგები: რანგის/კოლექციების მოძრავი წესები გამოშვების გარეშე.
12) API (REST/GraphQL, მაგალითები)
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 (ფრაგმენტი)
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
}
}
კონტრაქტები:
- ყოველთვის დაბრუნდით 'as _ of/freshnessMs', paging, ფასეტები.
- პერსონალიზაციისთვის - სესიის მარკერი (RYW) PII- ს გარეშე.
13) სიგნალები და მონაცემთა ნაკადი
პოპულარობა: თამაშების დაწყების დროს ინკრეტები - წუთიანი სატანკოები და პროექციების დანაყოფები.
CTR/კონვერტაცია: დაწკაპუნების/გაშვების მრიცხველები პლეიზმენტებზე/კოლექციებზე.
ოპერაციული სტატუსები: ჯანმრთელობის პროვაიდერები (RGS), ჯეკპოტები/ლიმიტები (მოვლენების ნაკადი).
მარკეტინგის ბუსტები: დროებითი კოეფიციენტები თამაშები/კატეგორიის/მომწოდებლებისთვის.
14) დაკვირვება და SLO
კატალოგის მეტრიკა:- `catalog_p95_ms`, `catalog_p99_ms`, `error_rate`.
- 'index _ freshness _ ms' (დიზაინის შეფერხება), 'ingest _ lag _ ms'.
- 'ctr', 'click-to-launch', 'collection _ coverage' (კოლექციების%).
- `lift_ctr`, `lift_conversion`, «explore vs exploit» доля.
- % სწორად გამოყენებული გეო/ასაკობრივი წესები, ბლოკების რაოდენობა/საათი.
ალერტები: ზრდა 'ingest _ lag _ ms', CTR- ის ვარდნა საკვანძო კოლექციებზე, პროვაიდერის დეგრადაცია (ეტიკეტები გაცემაში).
15) პროდუქტიულობა და ქეშირება
სტრატეგია: ცხელი მოთხოვნები - 30-120 ქეში, ფილტრაციის გასაღებით; პერსონალური ბლოკები - მოკლე TTL (10-30 წმ) ან ქეში გარეშე.
ინვალიდობა: მოვლენებზე 'GameUpserted/AvailabilityChanged/PlaceUntrated'.
პაგინაცია: სტაბილური კურსორები ისე, რომ ბარათის „გადახტომა“ სიგნალების განახლებისას.
16) მედიასთან მუშაობა
Render პროფილები: ზომები/სიმკვრივე ვებ/მობილური/TV.
ოპტიმიზაცია: WebP/AVIF, lazy-load, sprite/atlas ფილებისთვის.
შინაარსის უსაფრთხოება: სკანირება, წყლის ნიშნები, აკრძალვა inline-PII.
17) ტესტირება
Contract/Schema tests გადამყვანებისა და API- სთვის.
Relevancy tests: მოთხოვნის ოქროს ნაკრები, მოსალოდნელი შედეგები/რიგი.
პერსონალიზაცია: ოფლაინ AUC/NDCG + ონლაინ A/B guardrail მეტრებით (თამაშის დრო, ანაბრები, RG სიგნალები).
ქაოსი: პროვაიდერების დეგრადაცია, ინვესტიციის ზრდა, ინდექსაციის შეფერხება.
18) Playbooks (runbooks)
1. ინდექსის ლაგი> SLO: შეაჩერეთ მეორადი კოლექციები, გაზარდეთ ingest პრიორიტეტი, დროებით გაამარტივეთ რანჟირება.
2. პროვაიდერი „წითელი“: მისი თამაშების შემცირება/დამალვა, ალტერნატიული კოლექციების ამაღლება.
3. API შეცდომების გადახტომა: ქეშის/ზურგჩანთების შემოწმება, დამცავი ტაიმაუტის ჩართვა, გვერდების ზომის შემცირება.
4. არასწორი ხელმისაწვდომობა: ბოლო წესის შეცვლა, კრიტიკული ბაზრების „თეთრი ჩამონათვალის“ ჩართვა, ცვლილებების აუდიტის ჩატარება.
5. რანჟირების გამოშვება: კანარის rollout (5% - 25%, 50% - 100%), CTR/კონვერტაციის გამოტოვება.
19) ტიპიური შეცდომები
ერთადერთი „ჯადოსნური“ რანგის ფორმულა სიგნალის დაშლის გარეშე და A/B
გარე პროვაიდერების სქემების შერევა შიდა მოდელთან (ACL- ის არარსებობა).
'as _ of/freshness' - ის არარსებობა არის დავა „მოძველებული“ კატალოგის შესახებ.
პერსონალიზაცია, რომელიც არღვევს იურისდიქციულ წესებს.
დიდი გვერდები ქეშისა და კურსორების გარეშე p99 „გადაღებულია“.
ორმაგი write ინდექსი და OLTP + პროექციის მოვლენების ნაცვლად.
20) ჩეკის სია გაყიდვამდე
- ნორმალიზებული ველების ლექსიკონი და ACL ყველა პროვაიდერისთვის.
- Idempotent ingest, outbox/inbox, DLQ და redriv.
- კატალოგის პროგნოზები და ძიების ინდექსები ახალი SLO.
- რანჟირება კონტროლირებადი წონით, სიგნალების დაშლა და A/B.
- შესაბამისობის წესები (გეო/ასაკი/თემა) და ცვლილებების აუდიტი.
- მულტფილმი-ტენანტი/რეგიონი: მონაცემთა იზოლაცია, fairness, residence.
- API ერთად 'as _ of', ფასეტები, კურსორები; ქეში და შეზღუდული შესაძლებლობის მქონე პირები.
- მეტრიკა p95/p99, ingest/ინდექსაცია, CTR/კონვერტაცია; ალერტა.
- ინციდენტების ფლეიბუკი; კანარის გამოშვებები და ფიჩფლაგები.
- შესაბამისობის, კონტრაქტების, ქაოსისა და პერსონალიზაციის ტესტები.
დასკვნა
კატალოგის ძრავა არის „საძიებო სისტემა + იურიდიული სისტემა + ვიტრინა“ თამაშის შინაარსზე. ძლიერი ACL, ნორმალიზებული მონაცემები, სწრაფი კითხვის პროგნოზები, გამჭვირვალე რანგის სიგნალები, პერსონალიზაცია guardrail მეტრებით და მკაცრი შესაბამისობა კატალოგს გადააქცევს სტაბილურ და გაზომილ ზრდის ბერკეტად - წარმოების გარეშე სიურპრიზების გარეშე და რეგულატორებთან კომპრომისის გარეშე.