Data Lake e storage centralizzato
(Sezione Tecnologia e infrastruttura)
Breve riepilogo
Data Lake è uno strato di storage centralizzato delle materie prime e dei dataset consolidati. Per essere iGaming, accetta eventi di scommesse/pagamenti/fogli di gioco, download, CDC da OLTP e li consegna a analisi, antifrode, CRM e BI. Prassi moderna - Lakehouse - formati invertebrati aperti + livello tabella ACID + catalogo unico + transazioni/versioni dati. La chiave del successo è la disciplina dei circuiti e della partizionalizzazione, la gestione dei costi, la sicurezza PII e la rigida cultura operativa (DQ, lineage, DR).
Ruolo di Data Lake nella piattaforma iGaming
Unico punto di verità per gli analisti: conservazione dei dati crudi e puliti indipendentemente dall'origine e dal formato.
Flessibilità: supporto di batch e streaming (CDC/connettori, event striam).
Evoluzione da Bronze crude a Silver conformi e alle vetrine aziendali Gold.
Separazione di responsabilità: i servizi prod scrivono su bus/stage, l'analista/ML consuma dai livelli Lake.
Modelli architettonici: Lake vs Lakehouse
Data Lake (S3/ADLS/GCS + Parket/ORC): schema-on-read, storage economico, flessibilità dei formati.
Lakehouse (Delta/Iceberg/Hudi sopra Parket): transazioni ACID, upsert/merge, time-travel, file compatti, vuoto, indicizzazione/clustering.
Pratica: Lakehouse è vantaggioso come livello principale e OLAP ( ) come vetrine e motori speciali.
Modello di livello a medagliere
Bronze (Raw/Staging) - File crudi provenienti da sorgenti (CDC, logo-damp, CSV partner, webhooks). Un minimo di validazione, «com'è».
Silver (Conformed) - Pulizia/Deduplicazione, normalizzazione delle valute/fusi orari, indicazione dei tipi, misurazioni SCD, chiavi consistenziali.
Gold (Marts/Serving) - Unità per GGR/NGR/LTV/Retention, vetrine materializzate sotto BI/CRM/antifrode.
TTL: aggressivo su Bronze, moderato su Silver, a lungo termine su unità Gold.
Formati e livelli di tabella
Invertebrati: Parket (standard di fatto), ORC.
Formati tabella aperti (ACID):- Delta Lake - transazioni, 'MERGE', time-travel, ottimizzazione/vuoto, Z-order.
- Apache Iceberg - tabelle con manifesti/snapshot, partizionazione nascosta, 'MERGE/DELETE/UPDATE', time-travel.
- Apache Hudi - copy-on-write/merge-on-read, upsert-ottimizzazione, estrazioni incrementali.
- Scegliere l'ecosistema e i requisiti di upsert/stryming/flessibilità dell'evoluzione dei circuiti.
Cartella e metastore
Un unico catalogo (Hive Metastore/Unity/Glue/Platform) memorizza schemi, partenze, versioni, diritti.
Requisiti: coerenza transazionale con livello tabella, supporto per più motori (Spark, Trino/Preto, Flink, dbt), audited/lineage.
Schemi e evoluzione
Schema contract - Fissa i campi obbligatori, i tipi, la semantica; versionare le sorgenti ('schema _ variante').
Evoluzione: aggiunta di campi opzionali, divieto di interruzioni senza migrazioni schemi-checker automatici in pipline.
Segmentazione PII: campi sensibili in singole colonne/tabelle crittografate e diritti separati.
Partizionamento e lay-out dei dati
Data/ora è la chiave di base per gli eventi; altri campi: «country», «product», «tenant _ id».
Hive-style путь: `s3://lake/bronze/payments/source=pspA/dt=2025-11-05/hour=13/part-0001. parquet`.
Clustering/ordinamento: Z-order/Fort keys per campi spesso filtrati (player _ id, country).
Dimensioni file: punta a 128-1024 MB; evitare «small files» (vedere sotto).
Colonne virtuali (Iceberg/Delta) per la partizionalizzazione nascosta.
Problema small files e compagini
Le sorgenti strizzano le piccole cianfrusaglie per la degradazione di scene e metadati.
Soluzione: incrementize/competition periodica (coalesce), pianificatore compaction, batch-micro-bundle su ingestion, 'autoOptimize' (se disponibile).
Criterio merge-on-read vs copy-on-write - Bilanciamento tra latenza di scrittura e velocità di lettura.
Iniezione: batch, stream, CDC
CDC da OLTP (Debezium/connettori) da Bronze (freschezza di minuti).
Stream (Kafka/Flink/Spark Struttured Streaming) → Silver/Gold incrementale (upsert/merge).
Batch (report di partnership/CSV/JSON) - attraverso i «ricevitori» con i manifesti, il controllo delle riprese con checksum.
Idempotency: chiavi (idempotency _ key), deduplicazione di (key, ts), filigrana (watermarks) per i record successivi.
Qualità dati (DQ) e lineage
Assegni DQ: completezza, esclusività delle chiavi, intervalli, integrità (elenco dei paesi/valute), regole aziendali (GGR ≥ 0).
Lineedge - Grafico delle dipendenze dal report all'origine, versione del codice modello e del framework della tabella.
Controllo diagrammi: test automatici di back/forward-compat che bloccano le modifiche «spezzanti».
Controllo download: chi/quando/quanti, lotti rifiutati, retrai.
Cerving e accesso
Motori SQL: Spark/Trino/Preto per le trasformazioni e le trasformazioni ad hoc dbt per i modelli ELT.
Real-time/near-real-time: Pinot/Druid/ClickHouse come vetrine; Lakehouse è una fonte attraverso sink incrementali.
Data Sharing: sharing di tabelle/snapshot a comandi esterni senza copia (se supportato dal formato).
Sicurezza, PII e multi-tenenza
Crittografia: at-rest (KMS) e in-transit (TLS).
IAM/RBAC/ABAC: ruoli a livello di catalogo/tabella/colonna/riga (maschera, criteri dinamici).
Segmentazione per regione (UE/Turchia/LatAm) - Isolamento di bustine e pool di elaborazione.
Multi-tenantezza: namespace/directory e prefissi di percorso, filtri per «tenant _ id», opzionale - row-level policies.
Controllo di accesso: fogli di lettura/modifica dei metadati, retini e registri non modificabili.
Gestione dei costi
Classi di conservazione: caldo (spesso letto) nella classe standard, archivio in classi fredde/Glacier con regole TTL.
La partitura/cluster riduce gli scali a meno di dollari.
Vetrine materializzate per report costosi Cache dei risultati BI.
Compagine e «dimensione file corretta» sono meno metadati e I/O
Quote e budget: limiti per cluster/jobs compute, report di costo per dataset/comando.
Rimozione spazzatura: «VACUUM/REWRITE» in formati tabellari, TTL Bronze.
DR e riproduzione
Versioning delle tabelle (time-travel) e dei nastri della directory.
Replica crociata regionale di bustetti e metadati.
PITR - Memorizza i registri delle transazioni delle tabelle (Delta/Iceberg/Hudi) e dei fogli delle pipline.
Game-day - Esercitazioni regolari per il ripristino e il cambio di regione.
Osservabilità e SLO
SLO freschezza: Bronze 5 min, Silver 15-30 min, Gold 60 min (esempio).
Metriche: volume/lunghezza dei file, dimensione media del parquet, tempo di scene, percentuale di partiture mancanti, frequenza di competition, costo/dataset, errori DQ, dati in ritardo.
Alert: aumento di small files, aumento dei costi, degrado p95/p99, violazione DQ/diagrammi, ritardo dei sink.
Convenzioni e percorsi di Neiming (modello)
s3://<lake>/<layer>/<domain>/<dataset>/
source=<sys>/ # для Bronze dt=YYYY-MM-DD/
hour=HH/
country=XX/
I nomi dei dataset sono «bets _ raw», «payments _ cdc», «players _ silver», «mart _ ggr _ daily».
Colonne metadate: «ingest _ ts», «source», «schema _ variante», «trace _ id», «tenant _ id».
Esempi (generici)
1) Iceberg: tabella Silver con partitura nascosta per data
sql
CREATE TABLE silver. bets (
bet_id BIGINT,
player_id BIGINT,
country STRING,
stake DECIMAL(18,2),
win DECIMAL(18,2),
event_ts TIMESTAMP,
ingest_ts TIMESTAMP,
schema_version INT
)
PARTITIONED BY (days(event_ts))
TBLPROPERTIES ('format-version'='2');
2) Delta: upsert incrementale da CDC
sql
MERGE INTO silver. players t
USING bronze. players_cdc s
ON t. player_id = s. player_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;
3) Criterio TTL per Bronze (idea)
bronze/: keep 30 days silver/: keep 365 days (non-PII), 90 days (PII masked)
gold/marts/: keep 2–3 years (aggregated)
Assegno foglio di implementazione
1. Selezionate un formato tabella (Delta/Iceberg/Hudi) e una directory; concordare con i motori (Spark/Trino/Flink/dbt).
2. Definire i livelli di medagliere, le regole TTL e la responsabilità dei comandi.
3. Fissare schema contracts, controllo dell'evoluzione, segmentazione PII e crittografia.
4. Progettare lay-out: partiture, varietà, dimensioni target del file; attivare la compaction.
5. Configurare l'ingest (CDC/stream/batch) con idipotenza e deduplicazione.
6. Attivare DQ/lineage, la directory dei metadati e il controllo.
7. Determinare SLO di freschezza/costo, dashboard metriche e alert.
8. Organizzare il DR: snapshot/replica/ripristino + esercitazioni regolari.
9. Standardizzare il neoming e i percorsi, le metacolme ('ingest _ ts', 'source', 'schema _ version').
10. Portare le vetrine Gold e il real-time cerving nei motori OLAP/RT adatti.
Antipattern
Una sacca comune senza strati e TTL ha → il caos e l'esplosione del valore.
La partitura è solo in base al tempo, senza contare il paese/prodotto, con scansioni pesanti.
Flussi che creano migliaia di piccoli file/ora senza compettion.
Nessun controllo di diagrammi e DQ per le modifiche «frammentarie» e la diffidenza nei rapporti.
Miscelare il PII con le vetrine Gold senza mascherare o dividere i diritti.
Hardcode di autorizzazioni a livello di baguette al posto del catalogo e delle regole di tabella.
Riepilogo
Il Data Lake moderno per il iGaming è un Lakehouse con un formato di tabella aperto, un catalogo unico e un modello di medaglietta. Disciplina dei circuiti/partenze, competition contro small files, DQ/lineage, sicurezza PII e igiene di costo trasformano lo strato ayutlake in basi sostenibili: a basso costo per lo stoccaggio, rapido per la lettura, prevedibile per lo SLO e pronto per la DR. Tali basi vengono scalate sotto i picchi del torneo e supportano sia l'analisi batch che la near vetrina-real-time.