Ma’lumotlar sxemalari va ularning evolyutsiyasi
1) Nima uchun iGaming platformasi
Ishonchlilik: maʼlumotdagi oʻzgarishlar hisobotlar, API va modellarni buzmaydi.
Fich tezligi: strimlarni toʻxtatmasdan xavfsiz ravishda (KYC/RG/PSP) qoʻshing.
Tartibga solish: kuzatilishi va takrorlanuvchanligi (audit/lineage, DSAR, Legal Hold).
Qiymati: «to’kilishlar» ni va backfilllarning pastligini kamaytiramiz.
2) Sxemalar turlari va ular yashaydigan joy
Hodisalar (oqimlar):’payments. deposit_accepted`, `game. round_finished`.
OLTP/DDL: normallashtirilgan jadvallar (KYC, akkauntlar, limitlar).
DWH/vitrinalar (Gold): BI/ML ostidagi denormallashtirilgan agregatlar.
Feature Store: muvofiqlik kafolatlari bilan onlayn/oflayn fich-setlar.
Tashqi hamkorlar shartnomalari: PSP, oʻyin provayderlari, marketing manbalari.
Notalar: Yevro/Protobuf (oqimlar), JSON Schema (integratsiyalar), SQL DDL (DWH), Parquet schema (lake).
3) Muvofiqlik (evolyutsiya yadrosi)
Backward-compatible: yangi prodyuserlar → eski konsumerlar (c default/nullable maydoni qoʻshilgan).
Forward-compatible: eski prodyuserlar → yangi konsumerlar (yangi o’quvchi ortiqcha narsaga e’tibor bermaydi).
Full-compatible: ikkalasi ham (istalgan maqsad).
Breaking-changes: maydonni qayta nomlash/olib tashlash, turni/semantikani oʻzgartirish, kalitni/partitioning oʻzgartirish.
1-qoida: voqealar qo’shish orqali rivojlanadi, o’zgartirish orqali emas.
2-qoida: o’chirish - faqat MAJOR sxema versiyasida deprekeyt davridan keyin.
4) Semantik versiyalar va siyosatlar
`MAJOR. MINOR. PATCH’har bir sxema/vitrin/fich-set uchun.
MAJOR - mos kelmaydigan (yangi topic/jadval/fich-set, dual-run).
MINOR - mos keladi (yangi nullable/default maydonlari, yangi enum qiymatlari).
PATCH - tavsiflar/limitlar/sharhlarni tuzatish.
Maydon hayoti:’experimental → active → deprecated → removed’(sana va egasi bilan).
5) Sxemalar reyestri va ma’lumotlar kontraktlari
Schema Registry: versiyalar, moslik, evolyutsiya va egalarini saqlaydi.
Data Contract: + SLO sifat sxemasini + maxfiylikni belgilaydi («Maʼlumotlarni validatsiya qilish» boʻlimiga qarang).
json
{
"type":"record","name":"deposit_accepted","namespace":"payments",
"fields":[
{"name":"event_id","type":"string"},
{"name":"occurred_at","type":{"type":"long","logicalType":"timestamp-micros"}},
{"name":"user_id","type":"string"},
{"name":"brand","type":"string"},
{"name":"country","type":"string"},
{"name":"psp","type":"string"},
{"name":"method","type":"string"},
{"name":"amount","type":{"type":"bytes","logicalType":"decimal","precision":18,"scale":2}},
{"name":"currency","type":{"type":"enum","name":"Currency","symbols":["EUR","USD","TRY","BRL"]}},
{"name":"risk_score","type":["null","int"],"default":null}, // MINOR+
{"name":"kyc_level","type":["null",{"type":"enum","name":"Kyc","symbols":["L0","L1","L2","L3"]}],"default":null}
],
"compatibility":"FULL","owner":"team-payments"
}
6) Migratsiya patternlari
6. 1 Voqealar (oqimlar)
Additive-only: default/nullable bilan maydonlarni qoʻshing; eski konsumerlar buzilmaydi.
Enum-kengaytmalar: yangi belgilar MINOR hisoblanadi, konsumerlar’else/unknown’filialiga ega boʻlishlari shart.
MAJOR migratsiyasi: yangi topic’payments. deposit_accepted. v2’, dual-write, shadow-reads, so’ngra konsumerlarni o’zgartirish.
6. 2 DWH/vitrinalar
Blue-Green jadvallari:’gold. ’v1’ yonidagi revenue_v2'; materiallashtiramiz, solishtiramiz, BI o’tkazamiz.
Backfill: snapshotlar + idempotent merge (kalitlar/versiyalar boʻyicha).
SCD: sekin o’zgaruvchan atributlar uchun 2-tur (limitlar, KYC, VIP-maqomlar).
6. 3 Feature Store
Dual-serve: eski fich-setga yangisiga parallel ravishda xizmat ko’rsatiladi; model router orqali xizmat ko’rsatiladi.
Point-in-time muvofiqlik: evolyutsiya PITA-joylarni buzmasligi kerak (MINORda timestamp/granulyarlik o’zgarmaydi).
7) O’zgarishlar taksonomiyasi (chek-varaq)
Xavfsiz (MINOR):- ’nullable/default’ maydonini qoʻshish;
- enum kengaytirish (’unknown’- iste’molchida tarmoq);
- kalitsiz indeks/sharh/tavsifni qoʻshish.
- masshtab/birliklarning o’zgarishi (masalan, amount tsentda → asosiy valyutada) - faqat MAJORda;
- ma’lumotnoma/referensni ko’chirish - taqdimot qatlami orqali amalga oshiriladi.
- maydonni qayta nomlash/olib tashlash;
- / formatini/kalitini/partition oʻzgartirish;
- semantikaning o’zgarishi (masalan,’bonus _ amount’dan’hisoblangan’→’hisobdan chiqarilgan’).
8) Sxemalar linterlari va muvofiqlik testlari
Schema-lint: nomlar uslubi (’snake _ case’), majburiy belgilar (’owner’,’doc’,’pii’), sana/valyuta formati.
Compat-tests: yangi versiyani reyestrga qarshi tekshirmoqdamiz (backward/forward/full).
Consumer-contract-tests: har bir xizmat «foydali yuk namunasi» va kutish; sxemani o’zgartirganda CI ga haydaymiz.
Golden-datasets: haqiqiy va «yovuz» misollar to’plami (yangi enum, bo’sh/kech maydonlar, so’mlarning chegaraviy qiymatlari).
9) Ma’lumotnomalar, enum va mahalliylashtirish
Reference-data (mamlakatlar/valyutalar/PSP/provayderlar): yangilanishlarning alohida versiyalari va SLA; hodisa kodiga tikmaslik.
Locale/Soat zonalari: UTC ni hodisalarda saqlash + taqdimot uchun aniq lokal.
Yurisdiksiya qoidalari: yoshga oid bayroqlar, promo cheklovlari - amal qilish sanalari ko’rsatilgan ma’lumotnomalar tarzida.
10) Multibrend/multiyurisdiksiyalar va PII
Tenant-izolyatsiya:’brand’,’country’,’license’- enum bilan majburiy dalalar; ular bo’yicha routing.
PII-siyosat sxema darajasida:’pii = true’maydonlarini belgilaymiz, niqob/tokenizatsiyani qo’llaymiz; hodisalarda - faqat tokenlar.
DSAR: olib tashlash/qidirish uchun’source _ id/trace _ id’mavjud; MAJOR-migratsiyalarda Legal Hold.
11) DDL va Lake versiyalari
DDL migratsiyasi: deklarativ migratsiya (Liquibase/Flyway/dbt), VCSda saqlash, domen egasi tomonidan g’azab bilan.
Lake formatlari: Euro/Parquet - maydonlarning evolyutsiyasini qayd etamiz; MAJOR - yangi jadval/yo’l’.../v2/’.
Partitioning: partiyalar o’zgarishi (masalan,’date’→’date, brand’) - faqat MAJOR va qo’sh yozuv orqali.
12) iGaming misollari
12. 1 PSP usullarini kengaytirdi
Enumga’method =’MEFETE’qoʻshilgan.
MINOR’deposit _ accepted v1 sxemasining chiqarilishi. 8. 0`; MEFETEni bilmaydigan konsumerlar’unknown _ method’tarmog’iga yuboradilar.
12. 2 O’yin provayderi maydon qo’shdi
V’game. round_finished'’jackpot _ id’(nullable) qoʻshilgan.
Vitrin’gold. game_rounds_v3' MINOR oladi; eski hisobotlar ishlaydi, yangilari jekpotlarni hisoblaydi.
12. 3 RG atributlari
’self _ excluded’ dan status’rg _ state ∈ {none, limit, cooldown, self_excluded}' - MAJOR, yangi topic + dual-write + vitrinalar va modellar migratsiyasiga oʻtish.
13) Evolyutsiya jarayoni (g’oyadan o’zgarishgacha)
1. Proposal (ADR): nima uchun biz o’zgartiramiz, muvofiqlik turi, xavf-xatar va ta’sir ko’rsatgan iste’molchilarni baholash.
2. Dizayn va kontrakt: reyestrdagi sxema, semver, muvofiqlik siyosati.
3. Testlar: linters, compat, consumer-contracts, golden-setlardagi replay.
4. Joylashtirish: dual-write/blue-green/shadow-reads; alertlar.
5. Solishtirish: biznes-balanslar/invariantlar («Ma’lumotlarni validatsiya qilish» ga qarang).
6. Switch: konsumerlarni/BI/fichlarni almashtiring.
7. Deprecate: freze eski sxema, grace-period, olib tashlash va arxiv.
14) Metrika va evolyutsiya SLO
Success-rate migratsiyasi, dual-run vaqti, yangi formatdagi voqealar ulushi, backfill hajmi, lag/freshness.
Moslik hodisalari (P1/P2), vitrinalar sifati.
Cost: $/TB to’kilishi, $/soat dual-write, klaster yuklanishi.
Compliance: 0 PII-sizib chiqish, SLA DSAR/Legal Hold ga rioya qilindi.
15) Asboblar va artefaktlar
15. 1 Muvofiqlik siyosati (reyestr)
yaml schema: payments. deposit_accepted compatibility: FULL default_nulls: true enums:
currency: {allow_new_symbols: true, require_consumer_unknown_branch: true}
pii: false owners: ["team-payments"]
reviewers: ["data-governance","security-dpo"]
15. 2 Migratsiya pasporti (shablon)
yaml change_id: MIG-2025-041 scope: game. round_finished -> v3 type: MAJOR plan:
dual_write: true shadow_reads: consumers: ["gold-rounds","rg-models"]
backfill: {from: "2025-01-01", mode: "idempotent-merge"}
validation:
invariants: ["sum_bets = sum_wins + margin + bonuses"]
freshness_delta_p95_max: "PT5M"
switch_criteria:
error_rate_max: 0. 1%
kpi_diff_pp_max: 0. 5 deprecate_after: "2025-12-31"
15. 3. Nomlar va turlar linteri (qoidalar)
’snake _ case’, UTC timestamps, DECIMAL (18,2) summalari uchun,’country’bo’yicha ISO-3166-1 alpha-2,’currency’bo’yicha ISO-4217.
Enum maydonlari uchun’free _ text’mavjud emas; ma’lumotnomalar - tashqi.
16) Joriy etish yo’l xaritasi
0-30 kun (MVP)
1. Asosiy hodisalar (payments, game_rounds, user) uchun Schema Registry + policy mosligini yoqish.
2. Linterlar/compat-testlar CI; egalari va SLA sharhlar katalogi.
3. ADR shablonlari va migratsiya pasporti; MAJOR chek-varag’i.
30-90 kun
1. Gold-vitrinalar uchun Blue-Green; tanqidiy mavzular uchun dual-write.
2. asosiy servislar uchun Consumer-contract-tests; golden-datasets.
3. Avtomatik diff-solishtirmalar va almashtirishdagi alertlar; qiymat hisobotlari.
3-6 oy
1. grace-period bilan yagona deprecate/remove jarayoni; arxivlash va Legal Hold.
2. Geo/tenant-o’ziga xos sxemalar va shifrlash kalitlari; Sezgir bozorlar uchun DP variantlari.
3. Data dictionary va jonli lineage diagrammalari.
17) RACI
Data Governance (A/R): standartlar, reyestr, migratsiya rivoyati, de-nashr.
Domain Owners (R): maydonlarning ma’nosi, ma’lumotnomalar, biznes invariantlari.
Data Platform (R): reyestr vositalari, compat-testlar, dual-run/backfilllar.
Security/DPO (A/R): PII siyosati, geo/tenant, DSAR/Legal Hold.
SRE/Observability (C): alertlar, evolyutsiya SLO, capacity.
Product/Finance (C): KPI validatsiyasi, almashtirish oynalari.
18) Anti-patternlar
«Uchish maydonini boshqaramiz» versiyasiz va dual-run.
Yangi maydonni qoʻshish oʻrniga nomini oʻzgartirish → ommaviy buzilishlar.
’unknown’ filialisiz qattiq enum → yangi qiymatlarda tushadi.
Barcha yurisdiksiyalar uchun «kodda» yagona ma’lumotnoma.
Idempotent-merge va chek-balanssiz backfill.
Qidirish uchun PII va trace_id boʻlmagan loglar/DSAR.
19) Bog’liq bo’limlar
Ma’lumotlarni validatsiya qilish, Ma’lumotlarning kelib chiqishi va yo’li, DataOps-amaliyotlar, API analitikalari va metrikalari, Audit va versiyadorlik, Ma’lumotlar xavfsizligi va shifrlash, Kirish nazorati, MLOps: modellardan foydalanish.
Jami
Sxemalar evolyutsiyasi - bu bir martalik migratsiya emas, balki jarayon: reyestr, versiyalar va muvofiqlik; «yarim tunda o’tkazgichlar» o’rniga dual-run va blue-green; omad o’rniga muvofiqlik testlari va biznes invariantlari. Shunday qilib, ma’lumotlar barqaror, modellar oldindan aytib bo’ladigan, hisobotlar to’g’ri, regulyatorlar esa xotirjam bo’lib qoladi.