Verilənlər sxemləri və onların təkamülü
1) Niyə iGaming platforması
Etibarlılıq: Məlumatdakı dəyişikliklər hesabatları, API və modelləri pozmur.
Fich sürəti: axınları dayandırmadan təhlükəsiz sahələr (KYC/RG/PSP) əlavə edin.
Tənzimləyici: izlənmə və təkrarlanabilirlik (audit/lineage, DSAR, Legal Hold).
Qiymət: «daşqınlar» və geri dönüş minimuma endirmək.
2) Sxemlərin növləri və harada yaşayırlar
Hadisələr (axınlar): 'payments. deposit_accepted`, `game. round_finished`.
OLTP/DDL: normallaşdırılmış cədvəllər (KYC, hesablar, limitlər).
DWH/vitrinlər (Gold): BI/ML altında denormallaşdırılmış aqreqatlar.
Feature Store: uyğunluq zəmanəti ilə onlayn/oflayn fich setlər.
Xarici tərəfdaşların müqavilələri: PSP, oyun provayderləri, marketinq mənbələri.
Qeydlər: Avro/Protobuf (axınlar), JSON Schema (inteqrasiya), SQL DDL (DWH), Parquet schema (lake).
3) Uyğunluq (təkamül nüvəsi)
Backward-compatible: yeni prodüserlər → köhnə konsumerlər (c default/nullable sahəsi əlavə).
Forward-compatible: köhnə prodüserlər → yeni konsumerlər (yeni oxucu lazımsız nəzərə alınmır).
Full-compatible: hər ikisi (hadisələr üçün arzu məqsəd).
Breaking-changes: sahənin adının dəyişdirilməsi/silinməsi, növün dəyişdirilməsi/semantika, açarın dəyişdirilməsi/partitioning.
Qayda 1: hadisələr əlavə vasitəsilə inkişaf edir, dəyişiklik vasitəsilə deyil.
Qayda 2: silinir - yalnız MAJOR versiyası sxem sonra deprequit.
4) Semantik versiyalar və siyasətlər
`MAJOR. MINOR. Hər sxem/vitrin/fich set üçün PATCH '.
MAJOR - uyğun deyil (yeni topic/cədvəl/fich-set, dual-run).
MINOR - uyğun (yeni nullable/default sahələri, yeni enum dəyərləri).
PATCH - təsvirlər/limitlər/şərhlər düzəlişlər.
Sahənin həyat dövrü: 'experimental → active → deprecated → removed' (tarixləri və sahibi ilə).
5) Sxemlərin reyestri və məlumat müqavilələri
Schema Registry: versiyaları saxlayır, uyğunluq, təkamül və sahibləri.
Data Contract: sxemi + SLO keyfiyyətini + məxfiliyi qeyd edir (bax: Verilənlərin təsdiqlənməsi).
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) Miqrasiya nümunələri
6. 1 Hadisələr (axınlar)
Additive-only: default/nullable ilə sahələr əlavə; köhnə konsumerlər qırılmaz.
Enum uzantıları: yeni simvollar MINOR hesab olunur, konsumerlər 'else/unknown' filialına sahib olmalıdırlar.
MAJOR-miqrasiya: yeni topic 'payments. deposit_accepted. v2 ', dual-write, shadow-reads, sonra konsumer keçid.
6. 2 DWH/vitrinlər
Blue-Green cədvəllər: 'gold. 'v1' yanında revenue_v2'; materializasiya, yoxlama, BI keçid.
Backfill: snapshot + idempotent merge (açarlar/versiyalar üzrə).
SCD: yavaş dəyişən atributlar üçün tip 2 (limitlər, KYC, VIP statuslar).
6. 3 Feature Store
Dual-serve: köhnə fich-set yenisinə paralel olaraq xidmət göstərir; model router vasitəsilə xidmət.
Point-in-time uyğunluq: təkamül PITA Joyes (timestamp/qranulyarlıq MINOR-da dəyişməz) qırılmamalıdır.
7) Dəyişikliklərin taksonomiyası (çek siyahısı)
Təhlükəsiz (MINOR):- 'nullable/default' sahəsinin əlavə edilməsi;
- enum genişləndirilməsi (istehlakçıda 'unknown' -şaxəsi ilə);
- açar olmayan indeks/şərh/təsvirlər əlavə etmək.
- miqyasın/vahidlərin dəyişməsi (məsələn, əsas valyutada amount →) - yalnız MAJOR-da;
- referans/referans köçürülməsi - təqdimat təbəqəsi vasitəsilə.
- sahənin adının dəyişdirilməsi/silinməsi;
- tip/format/açar/partition dəyişikliyi;
- semantikanın dəyişdirilməsi (məsələn, 'bonus _ amount' «hesablanmış» → «yazılmışdır»).
8) Sxem linterləri və uyğunluq testləri
Schema-lint: ad stili ('snake _ case'), məcburi etiketlər ('owner', 'doc', 'pii'), tarix/valyuta formatı.
Compat-tests: Yeni versiyanı reyestrə qarşı yoxlayırıq (backward/forward/full).
Consumer-contract-tests: Hər bir xidmət «yük nümunəsi» və gözləntiləri təmin edir; sxemi dəyişdirərkən CI-yə qaçırıq.
Golden-datasets: real və «pis» nümunələr dəsti (yeni enum, boş/gec sahələr, məbləğlərin həddi).
9) Referans, enum və lokalizasiya
Reference-data (ölkələr/valyutalar/PSP/provayderlər): fərdi versiyalar və SLA yeniləmələri; hadisə kodu daxil deyil.
Locale/saat kəmərləri: UTC-ni tədbirlərdə saxlayın + təqdimat üçün açıq lokal.
Yurisdiksiya qaydaları: yaş bayraqları, promo məhdudiyyətləri - etibarlılıq tarixləri olan kataloqlar şəklində.
10) Multibrand/multiürisdiksiyalar və PII
Tenant-izolyasiya: 'brand', 'country', 'license' - enum ilə məcburi sahələr; onlara routing.
Sxem səviyyəsində PII siyasəti: 'pii = true' sahələrini qeyd edirik, maskalar/tokenizasiya tətbiq edirik; hadisələrdə - yalnız tokenlər.
DSAR: silinməsi/axtarılması üçün 'source _ id/trace _ id' olması; MAJOR miqrasiyalarında Legal Hold.
11) DDL və Lake versiyası
DDL miqrasiyası: deklarativ miqrasiyalar (Liquibase/Flyway/dbt), VCS-də saxlama, domen sahibi tərəfindən review.
Lake formatları: Avro/Parquet - sahələrin təkamülünü qeyd edin; MAJOR - yeni cədvəl/yol '.../v2/'.
Partitioning: partiyalar dəyişikliyi (məsələn, 'date' → 'date, brand') - yalnız MAJOR və ikiqat giriş vasitəsilə.
12) iGaming nümunələri
12. 1 PSP metodlarını genişləndirdi
Enuma 'method =' MEFETE 'əlavə edildi.
MINOR buraxılış sxemi 'deposit _ accepted v1. 8. 0`; MEFETE bilməyən konsumerlər 'unknown _ method' filialına göndərirlər.
12. 2 Oyun provayderi sahələr əlavə
V 'game. round_finished' 'jackpot _ id' (nullable) əlavə edilmişdir.
Vitrin 'gold. game_rounds_v3' MINOR alır; köhnə hesabatlar işləyir, yeni jackpotlar hesab.
12. 3 RG atributları
Bull 'self _ excluded' -dən status 'rg _ state ∈ {none, limit, cooldown, self_excluded}' - MAJOR, yeni topic + dual-write + vitrinlərin və modellərin miqrasiyasına keçid.
13) Təkamül prosesi (ideyadan keçid)
1. Proposal (ADR): niyə dəyişirik, uyğunluq növü, risk qiymətləndirilməsi və istehlakçılara təsir edir.
2. Dizayn və müqavilə: reyestr sxemi, semver, uyğunluq siyasəti.
3. Testlər: linters, compat, consumer-contracts, golden-setlərdə replay.
4. Yerləşdirmə: dual-write/blue-green/shadow-reads; alertlər.
5. Müqayisə: biznes balansları/invariantları (bax: «Məlumat validasiyası»).
6. Switch: consumer/BI/fich keçid.
7. Deprecate: köhnə sxem freeze, grace-period, silmə və arxiv.
14) Metrika və SLO təkamül
Success-rate miqrasiya, dual-run vaxt, yeni formatlı hadisələrin payı, backfill həcmi, lag/freshness.
Uyğunluq hadisələri (P1/P2), vitrinlərin keyfiyyəti dəyişdirildikdən sonra.
Cost: $/TB daşqın, $/saat dual-write, klaster yükləmə.
Compliance: 0 PII sızıntıları, SLA DSAR/Legal Hold uyğundur.
15) Alətlər və artefaktlar
15. 1 Uyğunluq siyasəti (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 Miqrasiya pasportu (şablon)
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 Linter adları və növləri (qaydalar)
'snake _ case', UTC timestamps, DECIMAL (18,2) məbləğləri üçün, 'country' alpha-2 ISO-3166-1 üzrə, 'currency' ISO-4217 üzrə.
Enum sahələri üçün 'free _ text' yoxdur; kataloqlar - xarici.
16) Tətbiqi yol xəritəsi
0-30 gün (MVP)
1. Əsas hadisələr üçün Schema Registry + policy uyğunluğunu daxil edin (payments, game_rounds, user).
2. CI-də linterlər/compat testləri; sahiblərinin kataloqu və SLA rəyləri.
3. ADR şablonları və miqrasiya pasportu; MAJOR çek siyahısı.
30-90 gün
1. Gold vitrinlər üçün Blue-Green; kritik mövzular üçün dual-write.
2. Əsas xidmətlər üçün Consumer-contract-tests; golden-datasets.
3. Avtomatik diff-yoxlama və keçid zamanı risklər; dəyər hesabatları.
3-6 ay
1. grace-period ilə vahid deprecate/remove prosesi; arxivləşdirilməsi və Legal Hold.
2. Geo/tenant xüsusi sxemlər və şifrələmə açarları; Həssas bazarlar üçün DP variantları.
3. Sahə semantikası kataloqu (data dictionary) və canlı lineage diaqramları.
17) RACI
Data Governance (A/R): standartlar, reyestr, miqrasiya review, de-nəşr.
Domain Owners (R): sahələrin mənası, kataloqlar, biznes invariantları.
Data Platform (R): reyestr alətləri, compat testləri, dual-run/backfills.
Security/DPO (A/R): PII siyasətləri, geo/tenant, DSAR/Legal Hold.
SRE/Observability (C): alertlər, SLO təkamülləri, capacity.
Product/Finance (C): KPI validasiya, keçid pəncərələri.
18) Anti-nümunələr
Versiyasız və dual-run olmadan «Sahəni uçmaq üçün idarə edirik».
Yeni bir sahə əlavə etmək əvəzinə adını dəyişdirin → kütləvi qırılmalar.
dal olmadan sərt enum 'unknown' → yeni dəyərlər altında düşmək.
Bütün yurisdiksiyalar üçün vahid kod kataloqu.
idempotent-merge və check-balans olmadan backfill.
Axtarış/DSAR üçün PII və trace_id olmadan log.
19) Əlaqəli bölmələr
Data validation, Data mənşəyi və yol, DataOps-praktikalar, API analitikləri və metrika, Audit və versiyası, Data Security və şifrələmə, Access Control, MLOps: model istismarı.
Yekun
Sxemlərin təkamülü birdəfəlik miqrasiya deyil, prosesdir: reyestr, versiyalar və uyğunluq; «Gecə yarısı açarları» əvəzinə dual-run və mavi-yaşıl; uğurlar əvəzinə uyğunluq testləri və biznes invariantları. Beləliklə, məlumatlar sabit, modellər proqnozlaşdırıla bilən, hesabatlar düzgün və tənzimləyicilər sakit olaraq qalır.