GH GambleHub

Jeziora danych i agregacja przepływów

1) Cel i wartość

Data Lake/Lakehouse - podstawowa warstwa długoterminowego przechowywania i odczytu na dużą skalę, gdzie:
  • Strumienie z produktów/gier/płatności gruntów w Brąz „jak jest”.
  • Srebro normalizuje i wzbogaca, zapewniając spójne klucze i jakość.
  • Złoto - zagregowane prezentacje (w tym w czasie rzeczywistym/zbliżonym do rzeczywistego) dla BI, regulatora, zwalczania nadużyć finansowych/RG.

Agregacja przepływów na plonach Lakehouse: niski opóźnienie raportu, przewidywalny koszt, powtarzalność i kryminalistyka.

2) Architektura odniesienia

1. Ingest/Edge: HTTP/gRPC, OTel, endpointy partii → мина (Kafka/Redpanda).
2. Brąz (tylko dodatek): magazyn obiektów + tabele ACID (Delta/Iceberg/Hudi), przegrody według daty/rynku/najemcy; przechowywanie oryginalnego ładunku użytkowego.
3. Stream Compute: Flink/Iskra/Beam - jednostki okienne, CEP, deadup, online-lookups.
4. Srebro (czyste/zgodne): normalizacja waluty/timezon, FK/katalogi, SCD do pomiarów.
5. Serwowanie/OLAP: ClickHouse/Pinot/Druid - zmaterializowane kruszywa minutowe/sekundowe dla paneli.
6. Złoto (podawać): dzienne/godzinne skrzynki wyświetlające, plastry regulacyjne, niezmienne pakiety eksportowe (WORM).
7. Pętle kontrolne: Schema Registry, DQ-as-code, lineage, directories, secrets/KMS, RBAC/ABAC.

3) Umowy i systemy

Schemat pierwszy: JSON/Avro/Protobuf; wymagane pola to 'event _ time (UTC)', 'event _ id',' trace _ id', 'user _ pseudo _ id',' market ',' schema _ version '.
Ewolucja: kompatybilne z powrotem → dodanie nieważne; łamanie → '/v2 '+ podwójne wejście.
Katalog: opis domeny, właściciel, świeże SLA, zasady DQ, rodowód.

4) Strumienie do jeziora

Dokładnie raz na dole: co najmniej raz publikacja + idempotent sink (MERGE/upsert przez 'event _ id').
Dedup: statile w strumieniu + wyjątkowość w Silver.
Kompresja plików: małe pliki → regularne OPTIMIZE/VACUUM do odczytu i kosztów.
Podróże w czasie: obejmuje debugowanie, powtarzanie i audyt.

Przykład partycjonowania góry lodowej (idea DDL):
sql
CREATE TABLE bronze. payment_events (
event_id STRING, user_pseudo_id STRING, currency STRING,
amount DECIMAL(18,2), market STRING, event_time TIMESTAMP, payload STRING
)
PARTITIONED BY (days(event_time), market);

5) Agregacja strumieniowa: okna i znaki wodne

Okna:
  • Bębnowanie - stałe (np. 1 min/5 min) dla stabilnych paneli.
  • Skok - nakładanie się (krok
  • Sesja - luki behawioralne w bezczynności.
  • Znaki wodne: późna kontrola danych (zwykle 2-5 minut), reguły wstępnej emisji/korekcji.
Flink SQL - 1 minut depozytów przez rynek:
sql
SELECT market,
TUMBLE_START(event_time, INTERVAL '1' MINUTE) AS ts_min,
COUNT() AS deposits_1m,
SUM(amount_base) AS sum_1m
FROM silver. payments
GROUP BY market, TUMBLE(event_time, INTERVAL '1' MINUTE);

6) Materializacja kruszyw

Silnik OLAP (ClickHouse/Pinot/Druid): przechowuje kruszywa minutowe/sekundowe do desek rozdzielczych i analityki operacyjnej.
Lakehouse Gold: przechowuje dzienne/godzinne plasterki do sprawozdawczości i pojednania (odtwarzalność).

ClickHouse - zmaterializowany widok (co minutę GGR):
sql
CREATE MATERIALIZED VIEW mv_ggr_1m
ENGINE = AggregatingMergeTree()
PARTITION BY toDate(event_time)
ORDER BY (toStartOfMinute(event_time), market, provider_id) AS
SELECT toStartOfMinute(event_time) AS ts_min,
market,
provider_id,
sumState(stake_base) AS s_stake,
sumState(payout_base) AS s_payout
FROM stream. game_events
GROUP BY ts_min, market, provider_id;
Złoto - kawałek dnia (Lakehouse):
sql
CREATE OR REPLACE VIEW gold. ggr_daily AS
SELECT
DATE(event_time) AS event_date,
market, provider_id,
SUM(stake_base) AS stakes_eur,
SUM(payout_base) AS payouts_eur,
SUM(stake_base) - SUM(payout_base) AS ggr_eur
FROM silver. fact_game_financials
GROUP BY 1,2,3;

7) Srebro: normalizacja i pojednanie

Czas i waluta: 'event _ time (UTC)', 'amount _ base', 'fx _ rate _ used', 'fx _ source'.
Klucze/katalogi: 'user _ pseudo _ id',' game _ id', 'provider _ id',' market '.
SCD II: historyzacja wymiaru (użytkownicy/gry/dostawcy/RG/KYC).
Zasady DQ: wyjątkowość klucza, katalogi, zakresy kwot, ważność czasowa.

8) Rejestr jednostek i „poprawne” definicje

Warstwa semantyczna: jednolite wzory GGR/NGR, zakłady/wygrane, konwersja, ARPPU, opóźnienie p95.
Mierniki wersji: 'metric _ version' i 'as-of' obliczenia.
Dockcards: właściciel, formuła, źródła, gotowość SLA.

9) Dokładnie raz/idempotencja i porządek

Autobus: co najmniej raz + podział (lokalne zamówienie).
Przetwarzanie: dedup by 'event _ id' (TTL 24-72h), CEP/window operators with adjustments.
Zlew: commits transakcyjne lub idempotent upsert/merge.
Outbox/Inbox: publikowanie zdarzeń domeny z OLTP z gwarancją.

10) Późne dane i korekty

Dopuszczalna opóźnienie: 2-5 min dla wyświetlaczy operacyjnych; codzienna reasekuracja dla Gold.
Korekty: dodatkowe emisje w OLAP i przeredagowanie złota (idempotent).
Flagi: 'late = true', 'correction _ of = <event _ id>' dla audytu.

11) Obserwowalność i DQ

SLI/SLO (punkty orientacyjne):
  • pingest 95 → 1 -min showcase ≤ 2-5 s; Złoto codziennie jest gotowe do 06:00 zamek.
  • Kompletność ≥ 99. 5%; Okres ważności schematu ≥ 99. 9%; Zasięg śladowy ≥ 98%.
  • Mierniki rurociągów: czas opóźnienia/przepustowości/czas zajęty/rozmiar stanu, wskaźnik opóźnienia, szybkość opadania.
  • Deski rozdzielcze DQ: Świeżość/Kompletność/Ważność, lejek utraty, karta klucza gorącego.
  • Rodowód: droga z brązu do złota/eksportu; analiza wpływu na zmiany.

12) Prywatność, rezydencja, bezpieczeństwo

Minimalizacja PII: pseudonimizacja, oddzielne mapowanie chronione.
Miejsce zamieszkania: EEA/UK/BR - oddzielne katalogi i klucze szyfrujące; zakazanie przyłączeń międzyregionalnych bez powodu.
Szyfrowanie: TLS w tranzycie; KMS/CMK w stanie spoczynku; sygnatury eksportowe + WORM w throttling.
DSAR/RTBF/Legal Hold: selektywne edycje, zamrażanie usuwania, kontrolowane dostęp.

13) Wydajność i koszt

Podział: według daty/rynku/najemcy; clustering/Z-order przez często filtrowane atrybuty.
Zagęszczenie: eliminacja małych plików, regularna OPTYMALIZACJA/PRÓŻNIA.
Materializacja: minuty/sekundy - w OLAP; dzień/godziny - w Gold.
Magazyn wielopoziomowy: gorący/ciepły/zimny, odzyskiwanie SLA, obciążenie zwrotne według polecenia (koszt/GB, koszt/zapytanie).
Preagregacja/szkice: HyperLogLog/ok.

14) Przykłady (fragmenty)

Krzemień CEP - konstrukcja osadu (10 min):
python if count_deposits(window=10MIN) >= 3 \
and sum_deposits(window=10MIN) > THRESH \
and all(d. amount < REPORTING_LIMIT for d in window_events):
emit_alert("AML_STRUCTURING", user_id, snapshot())
SQL - dedup po załadowaniu do Silver:
sql
CREATE TABLE silver. payments AS
SELECT EXCEPT(rn) FROM (
SELECT p., ROW_NUMBER() OVER (PARTITION BY event_id ORDER BY event_time) rn
FROM bronze. payment_events p
) WHERE rn = 1;
Góra Lodowa/Delta - MERGE idempotent:
sql
MERGE INTO silver. fact_bets s
USING stage. fact_bets_delta d
ON s. bet_id = d. bet_id
WHEN MATCHED THEN UPDATE SET
WHEN NOT MATCHED THEN INSERT;

15) Procesy i RACI

R (odpowiedzialny):
  • Platforma danych (Lakehouse/katalog/ACID, zagęszczenie),
  • Streaming (jednostki/CEP/dedup),
  • Analityka domeny (metryki/złoto).
  • A (Odpowiedzialność): szef danych/CDO.
  • C (skonsultowano się): Compliance/Legal/DPO (PII/residency/Legal Hold), Finance (FX/GGR), SRE (SLO/стоимоста), Security.
  • I (Poinformowany): BI/Produkt/Marketing/Operacje.

16) Plan działania w zakresie wdrażania

MVP (3-5 tygodni):

1. Lakehouse Bronze/Silver (stoły ACID), spożycie z Kafka, systemy rejestrowe.

2. Podstawowe jednostki strumieniowe (1-5 minut) w OLAP; pokaz Gold. ggr_daily (D + 1 do 06:00).

3. DQ-as-code for Payments/Gameplay, Świeżość/Deski rozdzielcze kompletności.

4. Zagęszczenie/OPTIMIZE, minimalne mierniki kosztów i alerty lag/late/dup.

Faza 2 (5-10 tygodni):
  • Rozszerzenie srebra (SCD II dla użytkowników/gier/dostawców), rodowód i analiza wpływu.
  • Asynchroniczne poszukiwania (RG/KYC/ASN/BIN), późna kontrola korekcji.
  • Warstwa semantyczna mierników, przepisy eksportowe (WORM/podpisy).
Faza 3 (10-16 tygodni):
  • Multi-region, DR/replay simulator, automatyczne dostrajanie okien i znaków wodnych.
  • Deski rozdzielcze, obciążenie zwrotne/kwoty, wielopoziomowe przechowywanie i archiwizacja.
  • Automatyczna generacja dokumentacji prezentacyjnej i kart metrycznych.

17) Lista kontrolna przedsprzedaży

  • Systemy i umowy w rejestrze; testy porównania pleców są zielone.
  • Dedup, znak wodny/dozwolone opóźnienie, DLQ zawarte.
  • /OPTIMIZE/VACUUM jest skonfigurowany w harmonogramie.
  • SLO: p95 ingest → minute-view, Gold дд06 06:00; alerts lag/late/dup/state size.
  • Zasady DQ są aktywne; linia jest widoczna od brązu do eksportu.
  • KMS RBAC/ABAC; pobyt i DSAR/RTBF/Legal Hold testowane.
  • Koszt kontrolowany (koszt/GB, koszt/zapytanie, udział na zimno), limity powtórzeń.

18) Przeciwdziałanie modelom i ryzyku

Mieszanie surowych i zgłoszonych danych w tej samej tabeli: narusza odtwarzalność.
Brak kompresji: eksplozja małych plików → drogie żądania.
Obliczanie FX „retroaktywnie”: Łamie historię i raporty.
Brak znaków wodnych/późna polityka: sklepy i wpisy „float”.
Pełne ponowne naładowanie niepotrzebnie: użycie/przyrosty i korekty MERGE.
PII w Analytics: Zachowaj mapowanie oddzielnie, włącz CLS/RLS.

19) Słownik (krótki)

Lakehouse - jezioro danych + tablice ACID i silnik SQL.
Brąz/srebro/złoto - warstwy surowe/znormalizowane/serwujące.
Znak wodny - limit gotowości okna według czasu zdarzenia.
Zmaterializowany widok to wstępnie obliczona prezentacja do szybkiego czytania.
Podróże w czasie - czytanie historycznych wersji tabel.
WORM - niezmienne przechowywanie artefaktów eksportowych.

20) Sedno sprawy

Jezioro danych o odpowiedniej agregacji strumienia jest dyscypliną warstw i kontraktów: Brąz „jak jest”, Srebro dla normalizacji i jakości, OLAP dla paneli minutowych, Złoto dla raportów odtwarzalnych. Zarządzanie oknami i znakami wodnymi, deduplikacji i kompresji, prywatności i kosztów, otrzymujesz szybkie, weryfikowalne i zgodne ze sklepami dla zarządzania produktem, zgodności i operacyjnego.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.