Veri şemaları ve evrimleri
1) Neden bu bir iGaming platformu
Güvenilirlik - Verilerdeki değişiklikler raporları, API'leri veya modelleri bozmaz.
Özellik hızı: akışları durdurmadan alanları (KYC/RG/PSP) güvenle ekleyin.
Düzenleyici: izlenebilirlik ve tekrarlanabilirlik (denetim/soy, DSAR, Yasal Bekletme).
Maliyet: "Taşmaları've arka dolguların duruş sürelerini en aza indirin.
2) Şemaların türleri ve nerede yaşadıkları
Olaylar (akışlar): 'ödemeler. deposit_accepted', 'oyun. round_finished'.
OLTP/DDL: Normalleştirilmiş tablolar (KYC, hesaplar, limitler).
DWH/vitrinler (Altın): BI/ML altında denormalize agregalar.
Özellik Mağazası: Tutarlılık garantili çevrimiçi/çevrimdışı özellik setleri.
Dış ortak sözleşmeleri: PSP, oyun sağlayıcıları, pazarlama kaynakları.
Gösterimler: Avro/Protobuf (akışlar), JSON Şeması (entegrasyonlar), SQL DDL (DWH), Parke şeması (göl).
3) Uyumluluk (evrimin çekirdeği)
Geriye dönük uyumlu: yeni üreticiler - eski tüketiciler (eklenen alan c varsayılan/geçersiz).
İleri uyumlu: eski üreticiler - yeni tüketiciler (yeni okuyucu gereksiz yere görmezden gelir).
Tam uyumlu: her ikisi de (olaylar için arzu edilen hedef).
Breaking-changes: bir alanı yeniden adlandırma/silme, türü/anlambilimi değiştirme ,/bölümleme anahtarını değiştirme.
Kural 1: Olaylar değişim yoluyla değil, toplama yoluyla gelişir.
Kural 2: sil - yalnızca kullanımdan kaldırılma süresinden sonra planın MAJOR sürümünde.
4) Semantik sürümler ve politikalar
'BINBAŞI. MINÖR. Her şema/vitrin/özellik seti için PATCH '.
MAJOR - uyumsuz (yeni konu/tablo/özellik seti, çift çalıştırma).
MINOR - uyumlu (yeni geçersiz/varsayılan alanlar, yeni enum değerleri).
PATCH - açıklamaları/sınırları/yorumları düzenleyin.
Alan yaşam döngüsü: 'Deneysel - aktif - kullanımdan kaldırılmış - kaldırıldı' (tarihler ve sahibi ile).
5) Şema kaydı ve veri sözleşmeleri
Şema Kayıt Defteri: sürümleri, uyumluluğu, evrimi ve sahipleri saklar.
Veri Sözleşmesi: Şemayı + SLO kalitesini + gizliliği düzeltir ("Veri doğrulama" bölümüne bakın).
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) Göç kalıpları
6. 1 Olaylar (akışlar)
Yalnızca eklemeli: varsayılan/geçersiz olan alanları ekleyin; Eski tüketiciler bozulmaz.
Enum uzantıları: yeni karakterler MINOR olarak kabul edilir, tüketicilerin 'else/unknown' şubesine sahip olmaları gerekir.
BÜYÜK göç: yeni konu 'ödemeler. deposit_accepted. V2 ', çift yazma, gölge okuma, sonra tüketicileri değiştirme.
6. 2 DWH/vitrin
Mavi-Yeşil masalar: 'altın. 'v1'in yanındaki revenue_v2'; BI'yi gerçekleştir, doğrula, değiştir.
Geri doldurma: anlık görüntüler + idempotent birleştirme (tuşlara/sürümlere göre) ile tekrar oynatın.
SCD: Yavaş değişen nitelikler için tip 2 (limitler, KYC, VIP durumları).
6. 3 Özellikli Mağaza
Dual-serve: eski özellik seti yenisine paralel olarak sunulur; Model bir yönlendirici aracılığıyla servis edilir.
Zaman içinde tutarlılık: evrim PITA sevinçlerini kırmamalıdır (MINOR'da zaman damgası/granülarite değişmez).
7) Değişikliklerin taksonomisi (kontrol listesi)
Güvenli (MINOR):- 'Geçersiz/varsayılan' alanı ekleme;
- Enum uzantısı (tüketicide 'bilinmeyen'bir şube ile);
- Anahtar olmayan bir dizin/yorum/açıklama ekleme.
- Ölçek/birim değişimi (örneğin, sent cinsinden tutar - temel para birimi) - Yalnızca MAJOR
- Referans/referans aktarımı - sunum katmanı boyunca.
- Alanı yeniden adlandırma/silme
- Türü/formatı/anahtarı/bölümü değiştirme
- Anlambilim değişikliği (örneğin, "tahakkuk ettirilmiş" - "silinmiş" arasındaki "bonus _ miktar").
8) Devre Çizgileri ve Uyumluluk Testleri
Schema-lint: isim stili ('snake _ case'), gerekli etiketler ('owner', 'doc', 'pii'), tarih/para birimi biçimi.
Compat-testes: yeni sürümü kayıt defterine karşı kontrol etme (geri/ileri/tam).
Tüketici-sözleşme-testleri: Her hizmet bir "örnek yük've beklenti sağlar; Düzeni değiştirirken CI üzerinde çalışın.
Altın veri kümeleri: bir dizi gerçek ve "kötü" örnek (yeni enum, boş/geç alanlar, toplamların sınır değerleri).
9) Dizinler, enum ve yerelleştirme
Referans veriler (ülkeler/para birimleri/PSP/sağlayıcılar): bireysel sürümler ve SLA güncellemeleri; Olay koduna dikmeyin.
Yerel/saat dilimleri: Etkinliklerde UTC'yi saklayın + sunum için açık yerel ayar.
Yargı kuralları: yaş bayrakları, promosyon kısıtlamaları - eylem tarihleri olan dizinler şeklinde.
10) Çok Markalı/Çok Yetkili ve PII
Kiracı izolasyonu: 'marka', 'ülke', 'lisans' - enum ile zorunlu alanlar; Onları yönlendiriyor.
Şema düzeyinde PII politikası: alanları 'pii = true'olarak işaretleyin, maskeler/tokenizasyon uygulayın; olaylarda, sadece belirteçler.
DSAR: silme/alma için 'source _ id/trace _ id' varlığı; BÜYÜK göçler üzerinde Yasal Tutma.
11) DDL ve Lake sürümleri
DDL geçişleri: bildirimsel geçişler (Liquibase/Flyway/dbt), VCS'de depolama, etki alanı sahibi tarafından inceleme.
Göldeki Formatlar: Avro/Parke - alanların evrimini kaydedin; MAJOR'da - yeni tablo/yol '.../v2/'.
Bölümleme: parça değiştirme (örneğin, 'tarih' - 'tarih, marka') - sadece MAJOR ve çift giriş yoluyla.
12) iGaming örnekleri
12. 1 PSP genişletilmiş yöntemler
Enuma 'method = "MEFETE"' eklendi.
'Keposit _ accepted v1'in MINOR sürümü. 8. 0`; MEFETE'yi tanımayan tüketiciler 'unknown _ method' adresine şube gönderir.
12. 2 Oyun sağlayıcı eklenen sahalar
V 'game. round_finished' 'jackpot _ id' (geçersiz) ekledi.
Vitrin 'altın. game_rounds_v3' MINOR alır; Eski raporlar işe yarıyor, yenileri ikramiye sayıyor.
12. 3 RG nitelikleri
Boolean 'self _ excluded' durumundan'rg _ state ∈ {none, limit, cooldown, self_excluded}' - MAJOR, yeni konu + çift yazma + vitrinlerin ve modellerin geçişi.
13) Evrim süreci (fikirden anahtara)
1. Teklif (ADR): Neden değişiklik, uyumluluk türü, risk değerlendirmesi ve etkilenen tüketiciler.
2. Tasarım ve sözleşme: kayıt şeması, semver, uyumluluk politikası.
3. Testler: astarlar, compat, tüketici sözleşmeleri, altın setlerde tekrar oynatma.
4. Dağıtım: Çift yazma/mavi-yeşil/gölge okuma; Uyarılar.
5. Mutabakat: İş dengeleri/değişmezler (bkz. Veri Doğrulama).
6. Anahtar: tüketicileri/BI/özelliklerini değiştirin.
7. Deprecate: eski şemayı dondur, grace-period, sil ve arşivle.
14) Evrimin metrikleri ve SLO'ları
Geçişlerin başarı oranı, çift çalışma süresi, yeni format olaylarının paylaşımı, dolgu hacmi, gecikme/tazelik.
Uyumluluk olayları (P1/P2), geçiş sonrası pencere kalitesi.
Maliyet: $/TB taşma, $/saat çift yazma, küme yükü.
Uyumluluk: 0 PII sızıntısı, SLA DSAR/Yasal Bekletme karşılandı.
15) Araçlar ve eserler
15. 1 Uyumluluk politikası (kayıt defteri)
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 Geçiş pasaportu (ş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 İsimlerin ve türlerin astarı (kurallar)
'sake _ case', UTC zaman damgaları, DECIMAL (18. 2) toplamlar için, alfa-2 ISO-3166-1 için 'ülke', ISO-4217 için 'para birimi'.
Enum alanları için 'free _ text' yok; referans kitapları - dış.
16) Uygulama Yol Haritası
0-30 gün (MVP)
1. Önemli olaylar (ödemeler, game_rounds, kullanıcı) için Schema Registry + uyumluluk ilkesini etkinleştirin.
2. CI'da Linters/compat testleri; Sahip dizini ve SLA incelemeleri.
3. ADR şablonları ve geçiş pasaportu; BÜYÜK kontrol listesi.
30-90 gün
1. Altın vitrinler için Mavi-Yeşil; Kritik konular için çift yazma.
2. Temel hizmetler için tüketici-sözleşme-testleri; Altın veri setleri.
3. Geçiş yaparken otomatik diff-mutabakatları ve uyarıları; Maliyet raporları.
3-6 ay
1. Grace-period ile tek kullanımdan kaldırma/kaldırma işlemi; Arşivleme ve Yasal Bekletme.
2. Jeo/kiracıya özgü şifreleme şemaları ve anahtarları; Hassas pazarlar için DP çeşitleri.
3. Veri sözlüğü ve canlı soy çizelgeleri.
17) RACI
Veri Yönetişimi (A/R): standartlar, kayıt defteri, geçiş incelemesi, yayın.
Alan Sahipleri (R): Alanların anlamı, referans kitapları, iş değişmezleri.
Veri Platformu (R): kayıt defteri araçları, compat testleri, çift çalıştırma/arka dolgular.
Güvenlik/DPO (A/R): PII politikaları, coğrafi/kiracı, DSAR/Yasal Bekletme.
SRE/Gözlenebilirlik (C): uyarılar, evrim SLO, kapasite.
Ürün/Finans (C): KPI'ların doğrulanması, pencerelerin değiştirilmesi.
18) Anti-desenler
Sürümler olmadan ve çift çalıştırma olmadan "Alanı anında düzenleyin".
Yeni bir alan eklemek yerine yeniden adlandırma - büyük arızalar.
'Bilinmeyen' dalı olmayan sert enum - yeni değerlerde düşüş.
Tüm yetki alanları için "kodda'tek dizin.
Idempotent-birleştirme ve bakiyeleri kontrol etmeden dolgu.
PII ile ve arama/DSAR için trace_id olmadan günlükleri.
19) İlgili bölümler
Veri Doğrulama, Veri Kökeni ve Yolu, DataOps Uygulamaları, Analitik ve Metrikler API, Denetim ve Sürüm Oluşturma, Veri Güvenliği ve Şifreleme, Erişim Denetimi, MLOps: Model Kullanımı.
Toplam
Şemaların evrimi bir defaya mahsus bir geçiş değil, bir süreçtir: kayıt defteri, sürümler ve birlikte çalışabilirlik; "Gece yarısı anahtarlar" yerine çift çalışma ve mavi-yeşil; Şans yerine uyumluluk testleri ve iş değişmezleri. Böylece veriler sabit kalır, modeller tahmin edilebilir, raporlar doğrudur ve düzenleyiciler sakindir.