데이터 스키마와 진화
1) 왜 이것이 iGaming 플랫폼인가
신뢰성-데이터 변경으로 인해 보고서, API 또는 모델이 중단되지 않습니다.
기능 속도: 스트림을 멈추지 않고 필드 (KYC/RG/PSP) 를 안전하게 추가합니다.
규제: 추적 성 및 재현성 (감사/계보, DSAR, 법률 보유).
비용: 백필의 "오버 플로" 및 다운 타임을 최소화하십시오.
2) 계획의 종류와 거주 지역
이벤트 (스트림): '지불. (PHP 3 = 3.0.6, PHP 4) 라운드 _ 완료 '.
OLTP/DDL: 정규화 된 테이블 (KYC, 계정, 한계).
DWH/상점 (골드): BI/ML에서 비정규화 된 집계.
Feature Store: 일관성을 보장하는 온라인/오프라인 기능 세트.
외부 파트너 계약: PSP, 게임 제공 업체, 마케팅 소스.
표기법: Avro/Proto (스트림), JSON 스키마 (통합), SQL DDL (DWH), Parquet 스키마 (호수).
3) 호환성 (진화의 핵심)
역 호환: 새로운 생산자 → 오래된 소비자 (필드 c 기본/nulable 추가).
앞으로 호환: 오래된 생산자 → 새로운 소비자 (새로운 독자는 불필요하게 무시).
완전 호환: 둘 다 (이벤트에 바람직한 대상).
파괴 변경: 필드 이름 변경/삭제, 유형/의미 변경, 키/분할 변경.
규칙 1: 이벤트는 변화가 아니라 추가를 통해 진화합니다.
규칙 2: 삭제-폐기 된 기간 후 MAJOR 버전의 체계에서만 가능합니다.
4) 시맨틱 버전 및 정책
'마조 르. 미노르. 각 구성표/쇼케이스/기능 세트에 대한 PATCH '.
메이저 - 호환되지 않음 (새 주제/테이블/기능 세트, 이중 실행).
MINOR - 호환 (새로운 널릴 수/기본 필드, 새로운 enum 값).
PATCH-설명/제한/설명 편집.
현장 수명주기: '실험적 → 활성 → 더 이상 사용되지 않음 → 제거' (날짜 및 소유자 포함).
5) 계획 등록 및 데이터 계약
스키마 등록: 버전, 호환성, 진화 및 소유자를 저장합니다.
데이터 계약: 체계 + 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 개의 이벤트 (스트림)
첨가제 전용: 기본/널링 가능한 필드 추가; 오래된 소비자는 깨지지 않습니다.
Enum 확장: 새로운 문자는 MINOR로 간주되며 소비자는 '기타/알 수없는' 지점이 있어야합니다.
메이저 마이그레이션: 새로운 주제 지불. 예금 _ 수락. v2 ', 이중 쓰기, 그림자 읽기, 소비자 전환.
6. 2 DWH/상점
청록색 테이블: '금. 'v1' 옆의 수익 _ v2 '; BI를 구체화, 확인, 전환.
백필: 스냅 샷 + demempotent 병합 (키/버전 별) 으로 재생
SCD: 천천히 변화하는 속성 (한계, KYC, VIP 상태) 에 대한 타입 2.
6. 3 피처 스토어
이중 서브: 이전 기능 세트는 새 기능 세트와 병렬로 제공됩니다. 모델은 라우터를 통해 서비스됩니다.
적시 일관성: 진화가 PITA 기쁨을 깨뜨리지 않아야합니다 (MINOR에서는 타임 스탬프/세분성이 변경되지 않음).
7) 변경 분류 (체크리스트)
안전 (MINOR):- '널링 가능/기본' 필드 추가;
- enum 확장 (소비자에게 '알 수없는' 지점 포함);
- 비 키 인덱스/댓글/설명 추가
- 스케일/단위 변경 (예: 센트 → 기본 통화 금액) -MAJOR 만
- 프리젠 테이션 레이어를 통한 참조/참조 전송.
- 필드 이름 바꾸기/삭제
- 형식/형식/키/파티션 변경
- 의미론 변경 (예: "accrued" → "writed off" 에서 'bonus _ amount ").
8) 회로 라이터 및 호환성 테스트
스키마 린트: 이름 스타일 ('snake _ case'), 필요한 레이블 ('owner', 'doc', 'pii'), 날짜/통화 형식.
컴파트 테스트: 레지스트리에 대해 새 버전을 확인합니다 (뒤로/앞으로/전체).
소비자 계약 테스트: 각 서비스는 "샘플 페이로드" 및 기대치를 제공합니다. 계획을 변경할 때 CI에서 실행하십시오.
황금 데이터 세트: 일련의 실제 및 "악" 예 (새로운 enum, 빈/후기 필드, 합의 경계 값).
9) 디렉토리, 에넘 및 현지화
참조 데이터 (국가/통화/PSP/제공 업체): 개별 버전 및 SLA 업데이트; 이벤트 코드에 바느질하지 마십시오.
로케일/시간 영역: 이벤트에 UTC 저장 + 프리젠 테이션을위한 명시 적 로케일.
관할권 규칙: 연령 플래그, 프로모션 제한-행동 날짜가있는 디렉토리 형태.
10) 다중 브랜드/다중 관리 및 PII
세입자 격리: '브랜드', '국가', '라이센스' - enum이있는 필수 필드; 그들에게 라우팅.
스키마 수준에서의 PII 정책: 'pii = 참' 필드를 표시하고 마스크/토큰 화를 적용하십시오. 이벤트에서는 토큰 만 있습니다.
DSAR: 삭제/검색을위한 'source _ id/trace _ id' 의 존재; MAJOR 마이그레이션에 대한 법적 보류.
11) DDL 및 호수 버전 지정
DDL 마이그레이션: 선언적 마이그레이션 (Liquibase/Flyway/dbt), VCS 스토리지, 도메인 소유자의 검토.
호수의 형태: Avro/Parquet-들판의 진화를 기록하십시오. MAJOR에서-새로운 테이블/경로 '.../v2/'.
파티셔닝: 부품 변경 (예: '날짜' → '날짜, 브랜드') -MAJOR 및 이중 항목을 통해서만 가능합니다.
12) iGaming의 예
12. 1 PSP 확장 방법
에넘에 '메소드 =' MEFETE '를 추가했습니다.
(PHP 3 = 3.0.6, PHP 4) 8. 0`; MEFETE를 모르는 소비자는 '알 수없는 _ 방법' 으로 지점을 보냅니다.
12. 2 게임 제공 업체가 피치를 추가했습니다
V 'game. (PHP 3 = 3.0.6, PHP 4)
쇼케이스의 금. game _ rounds _ v3 '은 MINOR를받습니다. 오래된 보고서가 작동하고 새로운 보고서는 잭팟을 계산합니다.
12. 3 가지 RG 속성
부울 '자체 _ 제외' 에서 상태 'rg _ state {none, 한계, 대기 시간, 자체 제외}' - MAJOR, 새로운 주제 + 이중 쓰기 + 쇼케이스 및 모델의 마이그레이션.
13) 진화 과정 (아이디어에서 전환으로)
1. 제안 (ADR): 변경, 호환성 유형, 위험 평가 및 영향을받는 소비자.
2. 설계 및 계약: 등록, 준결승, 호환성 정책 체계.
3. 테스트: 인쇄기, compat, 소비자 계약, 골든 세트에서 재생.
4. 배포: 이중 쓰기/청록색/그림자 읽기; 경고.
5. 조정: 비즈니스 균형/불변량 (데이터 검증 참조).
6. 스위치: 소비자/BI/기능 전환.
7. 우선 순위: 오래된 스키마, 유예 기간, 삭제 및 보관
14) 진화의 지표와 SLO
이주의 성공률, 이중 실행 시간, 새로운 형식 이벤트의 공유, 백필 볼륨, 지연/신선도.
호환성 사고 (P1/P2), 전환 후 창 품질.
비용: $/TB 오버플로, $/시간 이중 쓰기, 클러스터로드.
준수: 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 라인터 (규칙)
'sake _ case', UTC 타임 스탬프, DECIMAL (18. 2) 합의, 알파 -2 ISO-3166-1의 경우 '국가', ISO-4217의 경우 '통화'.
에넘 필드에 대한 '자유 _ 텍스트'; 참고서-외부.
16) 구현 로드맵
0-30 일 (MVP)
1. 주요 이벤트 (결제, 게임 _ 라운드, 사용자) 에 대한 Schema Registry + 호환성 정책 사용
2. CI의 라이터/컴파트 테스트; 소유자 디렉토리 및 SLA 리뷰.
3. ADR 템플릿 및 마이그레이션 여권; 메이저 점검표.
30-90 일
1. 골드 매장을위한 Blue-Green; 중요한 주제에 대한 이중 쓰기.
2. 기본 서비스에 대한 소비자 계약 테스트; 황금 데이터 세트.
3. 전환 할 때 자동 diff 조정 및 경고; 비용 보고서.
3-6 개월
1. 유예 기간으로 단일 제거/제거 프로세스; 보관 및 법적 보류.
2. Geo/테넌트 별 암호화 체계 및 키; 민감한 시장을위한 DP 변형.
3. 데이터 사전 및 라이브 계보 차트.
17) RACI
데이터 거버넌스 (A/R): 표준, 레지스트리, 마이그레이션 검토, 출판 해제.
도메인 소유자 (R): 필드, 참고 서적, 비즈니스 불변의 의미.
데이터 플랫폼 (R): 레지스트리 도구, 컴파트 테스트, 듀얼 런/백필.
보안/DPO (A/R): PII 정책, 지리/테넌트, DSAR/법적 보류.
SRE/Observability (C): 경고, 진화 SLO, 용량.
제품/금융 (C): KPI 검증, 창 전환.
18) 반 패턴
버전과 듀얼 런없이 "즉석에서 필드 편집".
새 필드 → 대규모 고장을 추가하는 대신 이름을 변경하십시오.
'알 수없는' 분기가없는 단단한 enum → 새로운 값으로 떨어집니다.
모든 관할 구역에 대한 단일 디렉토리 "코드".
dempotent 병합 및 점검 잔액이없는 백필.
검색/DSAR에 대한 PII 및 trace _ id가없는 로그.
19) 관련 섹션
데이터 유효성 검사, 데이터 원점 및 경로, DataOps 관행, 분석 및 메트릭 API, 감사 및 검증, 데이터 보안 및 암호화, 액세스 제어, MLops: 모델 탐색.
합계
체계의 진화는 일회성 마이그레이션이 아닌 프로세스입니다. 레지스트리, 버전 및 상호 운용성; "자정에 스위치" 대신 듀얼 런 및 블루 그린; 운이 아닌 호환성 테스트 및 비즈니스 불변. 따라서 데이터는 안정적으로 유지되고 모델은 예측 가능하며 보고서는 정확하며 규제 기관은 침착합니다.