GH GambleHub

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).

Nümunə (Avro, payments. deposit_accepted v1. 7. 0):
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.
Şərti təhlükəsiz:
  • 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ə.
Sındırıcı (MAJOR):
  • 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.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.