Деректер схемалары және олардың эволюциясы
1) Неліктен бұл iGaming платформасы
Сенімділік: деректердегі өзгерістер есептерді, API және модельдерді бұзбайды.
Fich жылдамдығы: ағындарды тоқтатпастан қауіпсіз өрістерді (KYC/RG/PSP) қосыңыз.
Реттеуіш: қадағалануы және жаңғыртылуы (audit/lineage, DSAR, Legal Hold).
Құны: «құйылуды» және бэкфилл даунтаймын барынша азайтамыз.
2) Схемалардың түрлері және олар қайда тұрады
Оқиғалар (ағымдар): 'payments. deposit_accepted`, `game. round_finished`.
OLTP/DDL: қалыпқа келтірілген кестелер (KYC, аккаунттар, лимиттер).
DWH/витриналар (Gold): BI/ML астында нормаланған агрегаттар.
Feature Store: келісу кепілдіктері бар онлайн/офлайндық фич-сеттер.
Сыртқы серіктестердің келісімшарттары: PSP, ойын провайдерлері, маркетингтік көздер.
Нотациялар: Euro/Protobuf (ағындар), JSON Schema (интеграциялар), SQL DDL (DWH), Parquet schema (lake).
3) Үйлесімділік (эволюция ядросы)
Backward-compatible: жаңа продюсерлер → ескі консультанттар (c default/nullable өрісін қосқан).
Forward-compatible: ескі продюсерлер → жаңа консультанттар (жаңа оқырман артық нәрсені елемейді).
Full-compatible: екеуі де (оқиғалар үшін қажетті мақсат).
Breaking-changes: өрісті қайта атау/жою, түрін/семантикасын өзгерту, кілтті/partitioning өзгерту.
1-ереже: оқиғалар өзгеріс арқылы емес, қосу арқылы дамиды.
2-ереже: алып тастау - тек қана MAJOR нұсқадағы схемада депрекейт кезеңінен кейін.
4) Семантикалық нұсқалар және саясат
`MAJOR. MINOR. Әрбір схема/витрина/фич-сет үшін PATCH '.
MAJOR - сыйыспайтын (жаңа topic/кесте/фич-сет, dual-run).
MINOR - үйлесімді (жаңа nullable/default өрістері, жаңа enum мәндері).
PATCH - сипаттамаларды/лимиттерді/түсініктемелерді түзету.
Өрістің тіршілік циклі: 'experimental → active → deprecated → removed' (күні және иесі).
5) Схемалар тізілімі және деректер келісімшарттары
Schema Registry: нұсқаларын, үйлесімділігін, эволюциясын және иелерін сақтайды.
Data Contract: + SLO сапа схемасын + құпиялылықты тіркейді («Деректерді валидациялау» бөлімін қараңыз).
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) Көші-қон паттерндері
6. 1 Оқиғалар (ағымдар)
Additive-only: default/nullable өрістерін қосыңыз; ескі консумерлер сынбайды.
Enum-кеңейтулер: жаңа символдар MINOR болып саналады, консьютерлерде 'else/unknown' тармағы болуы тиіс.
MAJOR-көші-қон: жаңа topic 'payments. deposit_accepted. v2 ', dual-write, shadow-reads, содан кейін консьюмерлерді ауыстырып қосу.
6. 2 DWH/витриналар
Blue-Green кестелері: 'gold. 'v1' қасында revenue_v2'; материалдандырамыз, салыстырамыз, BI ауыстырып қосамыз.
Backfill: snapshot + idempotent merge бойынша реплика (кілттер/нұсқалар бойынша).
SCD: баяу өзгеретін атрибуттар үшін 2-үлгі (лимиттер, KYC, VIP-мәртебелер).
6. 3 Feature Store
Dual-serve: ескі фич-сет жаңасына параллель қызмет көрсетіледі; моделі роутер арқылы қызмет көрсетіледі.
Point-in-time үйлесімділігі: эволюция PITA-джойндарды бұзбауы тиіс (timestamp/гранулярлық MINOR кезінде өзгермейді).
7) Өзгерістердің таксономиясы (чек-парақ)
Қауіпсіз (MINOR):- 'nullable/default' өрісін қосу;
- enum кеңеюі (тұтынушының 'unknown' тармағымен);
- кілт емес индексті/түсініктемені/сипаттаманы қосу.
- масштабты/бірлікті ауыстыру (мысалы, негізгі валютадағы amount → центпен) - тек MAJOR-да;
- анықтамалықты/референсті көшіру - ұсыну қабаты арқылы.
- өрісті қайта атау/жою;
- түрін/пішімін/кілтін/partition өзгерту;
- семантиканың өзгеруі (мысалы, «есептелген» → «есептен шығарылған» 'bonus _ amount').
8) Сызба линтерлері және үйлесімділік тестілері
Schema-lint: атаулар стилі ('snake _ case'), міндетті белгілер ('owner', 'doc', 'pii'), күн/валюта пішімі.
Compat-tests: тізілімге қарсы жаңа нұсқаны тексереміз (backward/forward/full).
Consumer-contract-tests: әрбір сервис «пайдалы жүктеме үлгісін» және күтулерді ұсынады; схеманы ауыстырған кезде CI-ге айдаңыз.
Golden-datasets: нақты және «жаман» мысалдар жиынтығы (жаңа enum, бос/кеш өрістер, сомалардың межелік мәндері).
9) Анықтамалықтар, enum және оқшаулау
Reference-data (елдер/валюталар/PSP/провайдерлер): жаңартулардың жекелеген нұсқалары мен SLA; оқиғалар кодына кірмеу.
Locale/сағат белдеулері: оқиғаларда UTC + презентация үшін айқын локалды сақтау.
Юрисдикция ережелері: жас жалаулары, промо шектеулері - қолданылу мерзімі көрсетілген анықтамалықтар түрінде.
10) Мультибренд/мультиюрисдикциялар және PII
Тенант-оқшаулау: 'brand', 'country', 'license' - enum бар міндетті өрістер; олар бойынша роутинг.
PII-саясат сызба деңгейінде: 'pii = true' өрістерін белгілейміз, маскаларды/токенизацияны қолданамыз; оқиғаларда - тек токендер.
DSAR: жою/іздеу үшін 'source _ id/trace _ id' болуы; MAJOR-көші-қондағы Legal Hold.
11) DDL және Lake нұсқалары
DDL-көші-қон: декларативтік көші-қон (Liquibase/Flyway/dbt), VCS-де сақтау, домен иесінің ревуары.
Lake форматтары: Euro/Parquet - өрістердің эволюциясын тіркейміз; MAJOR кезінде - жаңа кесте/жол '.../v2/'.
Partitioning: партияларды өзгерту (мысалы, 'date' → 'date, brand') - тек MAJOR және қос жазба арқылы.
12) iGaming мысалдары
12. 1 PSP әдістерін кеңейтті
'method =' MEFETE 'enuma қосылды.
MINOR 'deposit _ accepted v1. 8. 0`; MEFETE білмейтін консьюмерлер 'unknown _ method' тармағын жібереді.
12. 2 Ойын провайдері өріс қосты
В 'game. round_finished' 'jackpot _ id' (nullable) қосылды.
'gold. game_rounds_v3' MINOR алады; ескі есептер жұмыс істейді, жаңалары джекпоттарды санайды.
12. 3 RG төлсипаттары
'self _ excluded' буласынан 'rg _ state ∈ {none, limit, cooldown, self_excluded}' - MAJOR, жаңа topic + dual-write + витриналар мен үлгілердің көші-қоны.
13) Эволюция процесі (идеядан қайта қосуға дейін)
1. Proposal (ADR): неге өзгертеміз, үйлесімділік түрі, тәуекелді бағалау және әсер еткен тұтынушылар.
2. Дизайн және келісімшарт: тізілімдегі схема, semver, үйлесімділік саясаты.
3. Тесттер: linters, compat, consumer-contracts, golden-сеттердегі реплика.
4. Орналастыру: dual-write/blue-green/shadow-reads; алерта.
5. Салыстыру: бизнес-баланстар/инварианттар («Деректер валидациясын» қараңыз).
6. Switch: Консумерлерді/BI/фичтерді ауыстырыңыз.
7. Deprecate: freeze ескі схемасы, grace-period, жою және мұрағат.
14) Метрика және SLO эволюциясы
Success-rate көші-қон, dual-run уақыты, жаңа форматтағы оқиғалардың үлесі, backfill көлемі, lag/freshness.
Үйлесімділік инциденттері (P1/P2), ауыстырып қосқаннан кейін витриналардың сапасы.
Құн: $/TB, $/сағ dual-write, кластерді жүктеу.
Compliance: 0 PII-жылыстау, SLA DSAR/Legal Hold сақталған.
15) Аспаптар мен артефактілер
15. 1 Үйлесімділік саясаты (тізілім)
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 Көші-қон паспорты (үлгі)
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 Атаулар мен типтердің линтері (ережелер)
'snake _ case', UTC timestamps, DECIMAL (18,2) сомалары үшін, 'country' ISO-3166-1 бойынша alpha-2, 'currency' ISO-4217 бойынша.
Enum өрістері үшін 'free _ text' жоқ; анықтамалықтар - сыртқы.
16) Енгізу жол картасы
0-30 күн (MVP)
1. Негізгі оқиғалар (payments, game_rounds, user) үшін Schema Registry + policy үйлесімділігін қосу.
2. CI-дегі линтерлер/compat-тестілер; иелері мен SLA пікірлер каталогы.
3. ADR үлгілері және көші-қон паспорты; MAJOR чек-парағы.
30-90 күн
1. Gold-витриналар үшін Blue-Green; күрделі тақырыптар үшін dual-write.
2. Негізгі сервистер үшін Consumer-contract-tests; golden-datasets.
3. Автоматты diff-салыстыру және қайта қосу кезіндегі алерталар; құн есептері.
3-6 ай
1. Бірыңғай deprecate/remove процесі grace-period; мұрағаттау және Legal Hold.
2. Гео/тенант-ерекше схемалар және шифрлау кілттері; сезімтал нарықтар үшін DP-нұсқалары.
3. Өріс семантикасы каталогы (data dictionary) және lineage тірі диаграммалары.
17) RACI
Data Governance (A/R): стандарттар, тізілім, көші-қон өрісі, де-жариялау.
Domain Owners (R): өрістердің мағынасы, анықтамалықтар, бизнес инварианттар.
Data Platform (R): тізілім құралдары, compat-тестілер, dual-run/бэкфилл.
Security/DPO (A/R): PII-саясат, geo/tenant, DSAR/Legal Hold.
SRE/Observability (C): алерта, SLO эволюция, capacity.
Product/Finance (C): KPI валидациясы, ауыстырып қосу терезелері.
18) Қарсы үлгілер
«Ұшудағы жолды» нұсқасыз және dual-run.
Жаңа өрісті қосудың орнына қайта атау → жаппай сынулар.
'unknown' тармағы жоқ қатты enum → жаңа мәндерде құлау.
Барлық юрисдикциялар үшін «кодта» бірыңғай анықтамалық.
idempotent-merge және чек-балансы жоқ бэкфилл.
Іздеуге арналған PII және trace_id жоқ логтар/DSAR.
19) Байланысты бөлімдер
Деректерді валидациялау, Деректердің шығу тегі және жолы, DataOps-практикасы, API аналитикасы және метрикасы, Аудит және нұсқалылық, Деректердің қауіпсіздігі және шифрлау, Қолжетімділікті бақылау, MLOps: модельдерді пайдалану.
Жиынтығы
Схемалардың эволюциясы - бұл біржолғы көші-қон емес, процесс: тізілім, нұсқалар және үйлесімділік; «түн ортасындағы ауыстырып қосқыштардың» орнына dual-run және blue-green; сәттілік орнына үйлесімділік тестілері мен бизнес-инварианттар. Осылайша деректер тұрақты, модельдер - болжамды, есептер - дұрыс, ал реттеушілер - тыныш болып қалады.