GH GambleHub

Esquemas de dados e sua evolução

1) Por que é uma plataforma iGaming

Confiabilidade: alterações de dados não quebram relatórios, API e modelos.
Velocidade Fiech: Adicionamos campos com segurança (KYC/RG/PSP) sem parar striptease.
Regulação: rastreabilidade e reprodução (auditoria/lineagem, DSAR, Legal Hold).
Custo: Minimizamos as «transfusões» e o downthyme dos backphils.

2) Tipos de circuito e onde eles vivem

Eventos: 'payments. deposit_accepted`, `game. round_finished`.
OLTP/PDL: tabelas normalizadas (KYC, contas, limites).
DWH/Vitrines (Gold): Máquinas denormalizadas sob BI/ML.
Função Store: Redes de fich online/offline com garantias de coerência.
Contratos de parceiros externos PSP, provedores de jogos, fontes de marketing.

Notações de Avro/Protobuf, JSON Schema, SQL DDL, Parket schema (lake).

3) Compatibilidade (núcleo da evolução)

Backward-compatível: Novos projetores → consoadores antigos (adicionaram o campo c default/nullable).
Forward-compatível: Os antigos vendedores → novos conceituadores (o novo leitor ignora os demais).
Full-compatível: ambos (destino desejável para eventos).
Breaking-changes: renomear/remover campo, mudar de tipo/semântica, alterar chave/partitioning.

Regra 1: eventos evoluímos por adição, não por alteração.
Regra 2: Remover - apenas na versão MAIOR do esquema após o período de depredação.

4) Versões e políticas semânticas

`MAJOR. MINOR. PATCH 'para cada esquema/vitrine/fich set.

MAJOR - incompatível (nova topic/tabela/fich set, dual-run).
MENOR - compatível (novos campos nullable/default, novos valores enum).
PATCH - Editar descrições/limites/comentários.

O ciclo de vida do campo é 'experimental → ativo → deprecated → removed' (com datas e proprietário).

5) Registro de esquemas e contratos de dados

Schema Registry: armazena versões, compatibilidade, evolução e proprietários.
Data Contract: capta + SLO qualidade + privacidade (consulte Validação de dados).

Exemplo (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) Patternos de migração

6. 1 Eventos (striptease)

Adificável-only: Adicione campos com default/nullable; os velhos consórcios não quebram.
Extensões enum: novos símbolos são considerados MINOR e os consoadores são obrigados a ter um ramo 'else/unknown'.
Migração MAJOR: novo topic 'payments. deposit_accepted. v2 ', dual-write, shadow-reads, depois alterna os consoadores.

6. 2 DWH/vitrines

Tabelas Blue-Green: 'gold. revenue _ v2 'ao lado de' v1 '; materializamos, cruzamos, alteramos o BI.
Backfill: réplicas por snapshot + idempotent merge (chaves/versões).
SCD: tipo 2 para atributos que mudam lentamente (limites, KYC, status VIP).

6. 3 Feature Store

Dual-serve: O antigo fich set é servido paralelamente ao novo; O modelo é mantido através de um roteador.
Coerência point-in-time: a evolução não deve quebrar os joynos PITA (timestamp/granulosidade inalterada em MENOR).

7) Mudança taxonomia (folha de cheque)

Seguro (MENOR):
  • adicionar 'nullable/default' ao campo;
  • extensão enum (com 'unknown' - ramo no consumidor);
  • adição de índice/comentário/descrição fora da luz.
Condicional seguro:
  • mudança de escala/unidade (por exemplo, amount em centavos de → na moeda principal) - apenas em MAJOR;
  • transferência de guia/árbitro - através de uma camada de representação.
Quebrantes (MAJOR):
  • renomear ou remover um campo;
  • alterar o tipo/formato/chave/partition;
  • mudança de semântica (por exemplo, «bônus _ amount» de «atribuído» → «descartado»).

8) Liners de circuito e testes de compatibilidade

Schema-lint: estilo de nome ('snake _ case'), rótulos obrigatórios ('owner', 'doc', 'pii'), formato de data/moeda.
Compat-testes: Verificando a nova versão contra o registro (backward/forward/full).
Consumer-contracto-testes: cada serviço fornece um «exemplo de carga útil» e expectativa; Vamos para a CI quando mudarmos de esquema.
Golden-datasets: conjunto de exemplos reais e «maléficos» (novos enum, campos vazios/tardios, valores de soma limite).

9) Guias, enum e localização

Reference-data (países/moedas/PSP/provedores): versões individuais e atualizações SLA; Não entrar no código de eventos.
Local/fuso horário: armazene UTC em eventos + local explícito para apresentação.
Regras de jurisdição: bandeiras de idade, restrições de promoção - como guias com datas de validade.

10) Multiplicidade/Multiplicagem e PII

Confinamento tenante: 'brand', 'country', 'license' - campos obrigatórios com enum; Routing por eles.
Política PII ao nível do esquema: marcando os campos 'pii = true', aplicando máscaras/torneamento; nos eventos, apenas os tokens.
DSAR: disponibilidade de 'fonte _ id/trace _ id' para remover/pesquisar; Legal Hold nas migrações MAJOR.

11) Versionização de DDL e Lake

Migrações DDL: migrações declaratórias (Liquibase/Flyway/dbt), armazenamento em VCS, revezamento pelo dono do domínio.
Formatos em Lake: Avro/Parquet - Registramos a evolução dos campos; O MAJOR é uma nova tabela/caminho '.../v2/'.
Partitioning: alteração de partituras (por exemplo, 'date'→'date,brand') - somente através do MAJOR e de uma gravação dupla.

12) Exemplos de iGaming

12. 1 PSP expandiu métodos

Adicionado 'method =' MEFETE 'ao enum.
MENOR lança o esquema 'deposit _ aceited v1. 8. 0`; os consórcios que não conhecem o MEFETE enviam para o ramo 'unknown _ method'.

12. 2 Provedor de jogos adicionou campos

No 'game. round _ finished 'adicionado' jackpot _ id '(nullable).
Vitrine 'gold. game _ rounds _ v3 'recebe MINOR; os relatórios antigos funcionam, os novos contam jackpots.

12. atributos RG 3

Vai de «self _ excluded» para «rg _ state» para «state _ state» «∈\none, limit, cooldown, self _ excluded)» - MAJOR, novo topic + dual-write + migração de vitrines e modelos.

13) Processo de evolução (da ideia à mudança)

1. Proposal (ADR): porquê mudar, tipo de compatibilidade, avaliação de risco e consumidores afetados.
2. Design e contrato: esquema de registro, semver, política de compatibilidade.
3. Testes: linters, compat, consumer-contracts, réplicas em golden-sets.
4. Implantação: dual-write/blue-green/shadow-reads; Alertas.
5. Cruzamento: balanços de negócios/invariantes (consulte Validação de dados).
6. Switch: Alterna os consumers/BI/ficci.
7. Deprecate: freeze padrão antigo, grace-period, remoção e arquivo.

14) Métricas e SLO da evolução

Sucess-rate migrações, tempo dual-run, proporção de eventos do novo formato, volume de backfill, lag/freshness.
Incidentes de compatibilidade (P1/P2), vitrines de qualidade após a mudança.
Costa: $/TB transfusão, $/hora dual-write, download do cluster.
Compliance: 0 vazamentos PII, SLA DSAR/Legal Hold cumprido.

15) Ferramentas e artefactos

15. 1 Política de compatibilidade (registro)

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 Passaporte de migração (modelo)

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 Nomes e tipos linter (regras)

'snake _ case', UTC timestams, DECIMAL (18,2) para somas, 'country' por ISO-3166-1 alpha-2, 'currency' por ISO-4217.
Nenhum 'free _ text' para campos enum; os guias são externos.

16) Mapa de trânsito de implementação

0-30 dias (MVP)

1. Incluir Schema Registry + policy compatibilidade para eventos-chave (payments, game _ rounds, user).
2. Linter/testes compat em CI; catálogo de proprietários e resenhas SLA.
3. Modelos ADR e passaporte de migração; folha de cheque MAJOR.

30 a 90 dias

1. Blue-Green para vitrines Gold; dual-write para temas críticos.
2. Consumer-contracto-testes para serviços básicos; golden-datasets.
3. Comprimidos e alertas de ajuste automáticos; relatórios de valor.

3-6 meses

1. Um único processo de deprecate/remove com grace-period; arquivamento e Legal Hold.
2. Geo/tenante-circuitos específicos e chaves de criptografia; Opções DP para mercados sensíveis.
3. Catálogo de semântica de campos (data dictionary) e diagramas lineage ao vivo.

17) RACI

Data Governance (A/R): padrões, registro, registo das migrações, de-publicação.
Domain Owners (R): sentido campos, guias, invariantes de negócios.
Data Platford (R): ferramentas de registro, testes compat, dual-run/backfill.
Segurança/DPO (A/R): Políticas PII, geo/tenant, DSAR/Legal Hold.
SRE/Observabilidade (C): alerts, SLO evolução, capacidade.
Produt/Finance (C): validação do KPI, janelas de mudança.

18) Anti-pattern

«Ajustando o campo de voo» sem versões ou dual-run.
Renomear em vez de adicionar um novo campo → falhas em massa.
Enum rígido sem o ramo 'unknown' → queda em novos valores.
Um guia único de código para todas as jurisdições.
Backphill sem idempotent-merge e balanços de cheque.
Logs com PII e sem trace _ id para pesquisa/DSAR.

19) Seções relacionadas

Validação de dados, Origem e Caminho de dados, Práticas de Ops, API Analistas e Métricas, Auditoria e Versões, Segurança de Dados e Criptografia, Controle de Acesso, MLOs: Operação de modelos.

Resultado

A evolução dos esquemas é um processo, não uma migração única: registro, versões e compatibilidade; dual-run e blue-green em vez de «alternadores à meia-noite»; testes de compatibilidade e invariantes de negócios em vez de boa sorte. Assim, os dados permanecem estáveis, os modelos previsíveis, os relatórios corretos e os reguladores calmos.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.