GH GambleHub

Տվյալների նորմալացում

1) Նշանակումներ

Նորմալացումը վերացնում է կրկնօրինակներն ու անոմալիաները, տալիս է միասնական գրողներ և բանալիներ, տվյալներ դարձնում է համապատասխան և էժան։ IGaming-ում դա քննադատական է GGR/NGR, AML/RG վերլուծությունների, կարգավորող հաշվետվությունների, հակաֆրոդի և ML-ի համար։

2) Որտե՞ ղ ենք նորմալիզացնում

Bronze (rance): Մենք չենք նորմալացնում 'պահպանումը, ինչպես կա (append-only) ֆորուլֆիկայի համար։

Silver (clean/www.orm) - հիմնական նորմալացում (3NF/BCNF, գրողներ, բանալիներ, SCD)։

Gold (serve): wwww.ortrins - հնարավոր է վերահսկվող դենորմալիզացիա կարդալու/BI-ի համար։

3) Հիմնական սկզբունքները

1. Schema-first 'բոլոր աղյուսակները ունեն հստակ սխեմաներ և բանալիներ։

2. Միասնական ցուցիչներ ՝ «user _ pseudo _ id», «session _ id», «game _ id», «provider _ id», «transaction _ id»։

3. Միասնական գրացուցակներ ՝ արտարժույթներ, շուկաներ/իրավասություններ, KYC/RG արձաններ, խաղերի պրովայդերներ, կոդավորման ալիքներ։

4. Ժամանակը և արժույթը 'պահել «event _ time» (UTC) և նորմալ «amount _ bert» + «fx _ source»։

5. Էվոլյուցիա 'սեմանական տարբերակներ, միայն համատեղ փոփոխություններ առանց «լռության»։

6. PII-նվազեցումը 'օգտագործողը կեղծ-ID-ի միջոցով։ մապինգը պահվում է առանձին, հասանելիությունը սահմանափակ է։

4) Նորմալ ձևերը արագ են

1NF: Ատոմային արժեքներ, առանց զանգվածների սյունակներում (զանգվածներ wwww.child աղյուսակներ)։

2NF 'ատրիբուտները կախված են ամբողջ բաղադրիչից։

3NF 'ոչ տրանզիտիվ կախվածություն (գյուղը կախված է միայն ստեղից)։

BCNF 'յուրաքանչյուր դետերմինանտ բանալին է։ Օգտագործեք «միջուկի» համար (payments/gameplay)։

Պրակտիկա 'Silver-մոդելները վճարելու և խաղային ակտիվությունը պահում ենք առնվազն 3NF-ում։ ավելի խիստ BCNF-ն 'տեղեկատուների և հղման սեղանների համար։

5) Ստանդարտ հիբրիդային մոդել (Silver)

5. 1 Ուղեցույցներ

`dim. users '(կեղծ-ID, երկիր, տարիքային միջակայք, RG ստատուսներ)։

`dim. games '(game _ id, provider _ id, ժանր, RTP, ալատիլիզմ)։

`dim. providers '(provider _ id, տիպ, արտոնագիր)։

`dim. markets '(իրավասության կոդը, կարգավորիչը)։

`dim. fx_rates` (date, ccy_from, ccy_to, rate, fx_source).

5. 2 Փաստեր (իրադարձությունների/գործարքների նեղ սեղաններ)

`fact. payments` (transaction_id, user_pseudo_id, amount_orig, currency, amount_base, market, event_time, psp_ref, method).
`fact. bets` (bet_id, user_pseudo_id, game_id, stake_base, stake_ccy, outcome, event_time).
`fact. payouts` (payout_id, user_pseudo_id, game_id, amount_base, event_time).

Հաղորդակցություն 'փաստերը կայուն բաների վերաբերյալ։ Բոլոր գումարները կրկնօրինակում ենք «black» -ում և «big» -ում (amount _ big), ամրագրելով «fx _ source»։

6) Դանդաղ փոփոխվող չափումները (SCD)

Type I (վերաշարադրումը) 'ուղղագրական/ոչ ռիթմիկ ուղղումներ։

Type II (պատմությունը) '«valid _ from/valid _ to/is _ current», փոփոխությունների աուդիտ (օրինակ, RG կարգավիճակի փոփոխություն)։

Type III (այլընտրանքային սյունակ) '«մինչև/հետո» կարճ համեմատությունների համար։

Առաջարկություն ՝ RG/KYC/մարքեթինգային ալիքի համար - SCD II; Խաղերի ուղեցույցների համար (RTP) - SCD II 'ազդեցության վալիդացիայի հետ։

SCD II-ի օրինակը (պարզեցված)

sql
CREATE TABLE dim. users_scd (
user_pseudo_id STRING,
country STRING,
rg_status STRING,
valid_from TIMESTAMP,
valid_to  TIMESTAMP,
is_current BOOLEAN
);

7) Դեդուպլիկացիա և բանալիներ

Սուրոգատ բանալիները (BIGINT/UUID) ներքին կապերի համար։

Բնական բանալիները (օրինակ ՝ «transaction _ id» -ից PSA-ից) - վալիդացնել և պահել առանձին։

Dedup '(event _ id, source)' ingest + վրա Silver-ի բիզնես բեկորների վրա։

Վճարումների դեդուպը (օրինակ)

sql
CREATE TABLE silver. payments AS
SELECT EXCEPT(rn) FROM (
SELECT p., ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY event_time) rn
FROM bronze. payment_events p
)
WHERE rn = 1;

8) Արժույթների և թայմզոնի ստանդարտացումը

«event _ time» - միշտ UTC; վիտրինի համար ավելացնում ենք շուկայի մետրոպոլիտեն/թայմզոն։

Արժույթները ՝ «amount _ or.ru» և «amount _ bull» (օրինակ, CSR) + «fx _ source», «fx _ rate _ used»։

Դասընթացների ամենօրյա ամրագրումը '«d.ru»։ fx _ rates "աղբյուրը և hash-ստորագրությունը։

Գումարների նորմալացում (օրինակ)

sql
SELECT t. transaction_id,
t. amount_orig,
t. currency,
r. rate AS fx_rate_used,
t. amount_orig r. rate AS amount_base
FROM bronze. payment_events t
JOIN dim. fx_rates r
ON r. date = DATE(t. event_time) AND r. ccy_from = t. currency AND r. ccy_to = 'EUR';

9) Ուղեցույցների կոնսիստենտությունը

Գրքերի միասնական գրանցումը (games, providers, markets, currencies)։

Validators DQ: «in _ 71», FK հղում, յուրահատուկ, ոչ հակասական SCD։

Արտաքին աղբյուրներից «բարակ» դիմենսի ավտոմատ արտադրությունը (խաղերի պրովայդերներ, երկրներ, PSA)։

10) Երբ դենորմալիզացիան

Դենորմալիզացիան թույլատրելի է Gold-ում

կայուն «լայն» ռեպորտեր (GGR, ռիսկային վիտրիններ);

BI հարցումների արագացումը/dashbords;

Realtime-վիտրինը (ClickHouse/Pinot) SLA ընթերցանության տակ։

Կանոնները

Ճշմարտության աղբյուրը մնում է Silver-ը։

Դենորմալիզացված դաշտերը հաշվարկված/պատճենված են Silver-ից։ տրամաբանության տարբերակումը։

Ցանկացած դենորմալիզացիա փաստարկվում է և փորձարկվում է ճիշտության վրա։

11) «աստղ» և «ձյուն» մոդելը

Աստղը 'մեկ փաստ + հարթ չափումները' ավելի հեշտ և արագ կարդալ, ավելի թանկ ձայնագրություն/ժամ։

Ձյունը 'չափումները նորմալացված են (միացված են տեղեկագրերին) - ավելի քիչ կրկնօրինակներ, ավելի բարդ հարցումներ։

Առաջարկություն ՝ Gold-ում ավելի հաճախ «աստղ», Silver-ում նորմալ «ձյուն» է։

12) Սխեմաների էվոլյուցիան (safe changes)

Back-compatible: nullable զանգերի ավելացում; դրոշների հետ նոր տեղեկատու արժեքներ։

Breaking: վերանվանումը/տիպայնացումը/սեմանտիկ տեղաշարժերը միայն «/v2 »և կրկնակի ձայնագրումը մրցույթի ժամանակահատվածի համար։

Պայմանագրեր ՝ JSON/Avro սխեմաները registry, consumer-tes.ru համատեղելիության համար։

13) DQ-ն վերահսկում էր նորմալացման համար

Նվազագույն հավաքածու

Կոդավորման եզակիությունը '«transaction _ id», «bet _ id»։

Հանրաքվե ամբողջականությունը 'FK' d.ru։

Արժույթները ՝ «currency» 'whitelist, «fx _ rate _ used» ոչ NFC, «amount _ big> = 0»։

Ժամանակը '«event _ time» ողջամիտ պատուհանում; «ապագա» իրադարձությունների բացակայությունը։

SCD ճկունություն 'չանցած «valid _ from/valid _ to» միջակայքը։

14) SQL մոդելների օրինակներ

Մրցույթի փաստը (3NF)

sql
CREATE TABLE silver. fact_bets (
bet_id STRING PRIMARY KEY,
user_pseudo_id STRING NOT NULL,
game_id STRING NOT NULL,
stake_ccy DECIMAL(18,2) NOT NULL,
currency CHAR(3) NOT NULL,
stake_base DECIMAL(18,2) NOT NULL,
market CHAR(2) NOT NULL,
event_time TIMESTAMP NOT NULL
);

Աստղը GGR (Gold) համար

sql
CREATE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
m. market,
g. provider_id,
SUM(b. stake_base) AS stakes_eur,
SUM(p. amount_base) AS payouts_eur,
SUM(b. stake_base) - SUM(p. amount_base) AS ggr_eur
FROM silver. fact_bets b
LEFT JOIN silver. fact_payouts p
ON p. user_pseudo_id = b. user_pseudo_id
AND p. game_id = b. game_id
AND DATE(p. event_time) = DATE(b. event_time)
JOIN dim. markets m ON m. code = b. market
JOIN dim. games g  ON g. game_id = b. game_id
GROUP BY 1,2,3;

15) Գաղտնիությունը և կոմպլենսը

Օգտագործողի կեղծանունացումը Silver-ում; իրական ID-ի հետ կապված 'առանձին պաշտպանված բովանդակության մեջ։

RSA/CLS և դաշտերի դիմակավորում (e-mail/PAN անհասանելի է վերլուծության մեջ)։

Ածխաջրածինների/նատրիումի, DPO-վերահսկումը սխեմաների ընդլայնման վրա։

16) Դիտարկումը և lineage

Big lineage-ից Silver no Gold-ը, փոխակերպման և կոդավորման տարբերակները։

Մետրիկները ՝ completeness, validity, FK սխալներ, կրկնօրինակներ, ժամանակի «աղեղներ», հարցման արժեքը։

Ալերտները, երբ բացահայտում են գրացուցակները և FX աղբյուրները։

17) RACI

R: Windows Engineering (Silver/Gold), Pro Platform (սխեմաների գրանցում, DQ)։

A: Head of Data/Architecture.
C: Compliance/DPO (PII/retention), Finance (FX/GGR), Risk (RG/AML).

I: BI/ապրանք/Մարքեթինգ/Վիրահատություն։

18) Իրականացման ճանապարհային քարտեզը

MVP (2-4 շաբաթ)

1. Գրացուցակների գրանցումը (markets, currencies, providers, games)։

2. Silver-մոդելներ 'fact։ payments`, `fact. bets ',' dance. '(3NF), SCD II-ի համար' dance։ users`.

3. Արժույթների/թայմզոնի նորմալացումը, հիմնական DQ կանոնները (FK/uniqueness/in _ 108)։

4. Առաջին Gold-վիտրինը (GGR Daily) և սուլֆատի թեստերը։

Aleksanda 2 (4-8 շաբաթ)

SCD-ի ընդլայնումը, խաղային իրադարձությունների ծածկումը, պրովայդերական կոնֆորմալ մոդելները։

Մուտքային սխեմաների ավտոտեստերը, միգրացիայի սիմուլյատորը, մետատվյալների կատալոգը։

Մրցույթի/կուսակցության օպտիմիզացում, կլաստերիզացիա/Z-order։

Բրազիլիա 3 (8-12 շաբաթ)

Դենորմալիզացիայի քաղաքականությունը Gold, SLA/արժեքը։ թեմաներ «աստղ/ձյուն»։

Փաստաթղթերի ավտոմատ արտադրությունը, lineage գրաֆիկը dashbords-ում։

Տարածաշրջանային ֆորումները և մրցույթի բանալիները, DR ուսուցումները։

19) Որակի թուղթ

  • Միասնական բանալիներ և գրողներ պնդվում են։
  • Silver 3NF-ում, SCD-ն օգտագործվում է «դանդաղ» չափումների համար։
  • Արժույթը/թայմզոնները նորմալացված են; ամրագրված է։
  • DQ կանոնները (FK/uniqueness/range/in _ 108) ակտիվ են։
  • Դենորմալիզացիան փաստագրված է, ճիշտ թեստերը անցել են։
  • Գծերը և մետրերը թարմ/ամբողջական տեսանելի են dashbords-ում։

20) Հաճախակի սխալներ և ինչպես խուսափել դրանցից

PII-ի խառնուրդը վերլուծության մեջ 'առանձնացրեք մապինգները, օգտագործեք CLS/RTS-ը։

Silver-ի անբավարար նորմալացում 'հանգեցրեք 3NF-ին, հակառակ դեպքում թանկ աջակցություն և սխալներ։

FX «զեկույցի փաստով», դասընթացները պետք է ֆիքսվեն իրադարձության ժամանակ, ոչ թե «հետևի» քանակով։

Ոչ մի SCD-ը հիմնական կոմպոզիցիաների համար 'կորցնում է RG/KYC/ալիքների պատմությունը։

Gold-ի վերարտադրումը 'ավելցուկ join 's, որը վերահսկվում է դենորմալիզացիայի միջոցով։

Սխեմաների անթափանց էվոլյուցիան 'օգտագործեք registry և consumer-tes.ru։

21) Արդյունքը

Նորմալիզացիան Silver-մակարդակի կարգապահությունն է 'միասնական բանալիներ և գրողներ, 3NF/BCNF փաստերի և տեղեկատվության համար, ճիշտ պատմությունը (SCD) և ժամանակի ստանդարտացումը/արժույթները։ Այսպիսի «կմախքի» հետ Gold-վիտրինները դառնում են կանխատեսելի, հաշվետվությունները համեմատելի են, իսկ սեփականության արժեքը վերահսկվող է։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։