Վերլուծական պահեստների ինդեքսավորում
1) Ինչու՞ iGaming պլատֆորմի ինդեքսավորումը
Վերլուծության արագությունը 'GGR/NET զեկույցները, ծրարները, RG/AML և A/B փորձարկումները տեղադրվում են SLA-ում։
Արժեքը 'ավելի քիչ սկանավորված բայթ ցածր է հաշվարկման/պահեստի պատճառով։
Իսպանիան 'կայուն p95/p99 dashbords և API մետրիկ լատենտ։
Մասշտաբը 'տասնյակ բրենդեր/շուկաներ/PSA/պրովայդերներ առանց «fronscan» դժոխքի արժեքի։
2) Բեռի մոդելը (նախքան ինդեքսավորումը)
Факты: `payments`, `game_rounds`, `sessions`, `bonus_events`.
Չափումներ ՝ «dult _ user» (առանց PII), «dult _ provider», «dult _ pert», «dice _ country»։
Հարցումները ՝ "Վերջին N օրերը", ագրեգացիան 'brand/country/provider/provider/pro ", ստատիկ դաշտի ֆիլտրեր, jourrrogate-keys, որոնում JSON-ալգորիթմների (կոդավորման մեթոդ, սարք), top-K/percentile։
Մենք ընտրում ենք ինդեքսներ, հիմնված ընտրողությունից, կարդինալությունից և օգտագործման հաճախականությունից։
3) Ինդեքսների տեսակները և երբ վերցնենք դրանք
3. 1 Դասական
B-tree: Հավասարություն/միջակայք բարձրորակ սյուների վրա («user _ surrogate _ id», «occurred _ at», «amount»)։
Hash 'մաքուր հավասարություն; ավելի քիչ հաճախ վերլուծության մեջ (լաբի միջակայքների դեմ)։
Bitmap: Ցածր կարդինալություն և հաճախակի ֆիլտրեր («country», «kyc _ level», «rg _ state», «brand»)։ Հիանալի է յուղերը ամփոփելու համար։
3. 2 Columnar հատկություն
Min-max (wwwww.skipping): ավտոմատ վիճակագրությունը «նվազագույն/առավելագույնը» պարկետ-ստրեյպերում/մասերում շարժիչը բաց է թողնում բլոկները։ Ավելի լավ է աշխատում ֆիլտրված գազերի տեսակավորման ժամանակ։
Bloom-ինդեքսները 'արագ հավանական արժեքային թեստեր, որոնք օգտակար են «user _ id», «transaction _ id», «p.ru»)։
BRIN (Block Range Index): էժան «ցուցիչներ» բլոկների միջակայքում, եթե տվյալները բնականաբար կարգավորված են (ժամանակը)։ Էժան, բայց արդյունավետ Time սերիաների համար։
3. 3 Առաջադեմ/մասնագիտացված
GiST/GIN (հակադարձված): JSON/arrays/տեքստ, ներդրված ֆիլտրեր («metadata»)։ method = 'Papara'`, `device. os in [...]`).
Join/Project (ClickHouse/MPP): նյութեր join/agg արագացնելու համար (pre-join key պահպանվում է փաստի կողքին, նախնական ագրեգացիաները)։
Վեկտորային (ANN) 'նմանատիպ սաղմեդինգների որոնումը (առաջարկություններ/հակաֆրոդ վարքագիծ) - IVF/HNSW/Flat որպես «ամենամոտ հարևանների ինդեքսը»։
Z-order (Lakehouse/Diabricks )/Cluster keys (Winowflake )/ORDER BY (ClickHouse) - տվյալների բազմաչափ կլաստերիզացիա ավելի լավ կոդավորման համար։
4) Կուսակցության, տեսակավորման, կլաստերիզացիայի
Կուսակցությունը (date/country/brand) 'մեծ (օր/շաբաթ), որպեսզի խուսափի «փոքր ֆայլերի անեծքից»։ Մենք ընտրում ենք բարձր ընտրության դաշտեր WHLS/հասանելիության իրավունքներով։
Կուսակցության մեջ տեսակավորումը '"ORDER BY (occurred _ at, brand, pox)" կամ Z-order' (brand, country, provider) "- այնպես որ min-max և bloom ավելի լավ են աշխատում։
Cluster/Recluster: պարբերական վերափոխում տեղական պահպանման համար։
TTL և retenshn 'հին կուսակցությունների/հատվածների ավտոմատ հեռացում։
5) Նյութականացված գաղափարներ և պրոյեկցիաներ
MV տաք կտրվածքների համար '«payments _ 7d _ by _ brand _ prone», «rounds _ 1d _ by _ provider»։ Աջակցում ենք ռացիոնալ (streaming upser.ru)։
Պրոյեկտները (ClickHouse )/Aggregate tables: Նախնական խմբերը, roll-up մակարդակները (մեկ ժամ 210 շաբաթ)։
Քեշը 'query resortcache/warehouse resortcache-ը կրկնելու համար dashbords-ը (validirum հարցման և տվյալների թարմացման)։
6) Կիսագնդի տվյալները (JSON/VARISA)
Ինդեքսները ճանապարհներով 'international/GIN ինդեքսը json-հետքերով ("$ .device. os`, `$.psp. details. method`).
Կարևոր ատրիբուտների նյութականացումը սյունակներում 'կայուն ֆիլտրերի համար (կոդավորման մեթոդ, սարք, դիմումի տարբերակը)։
Բաների վիճակագրությունը 'ընտրողական պլանի համար բաշխումներ հավաքելը։
7) Տվյալների լճերը ՝ Iceberg/Delta/Hudi/Hudi
Manifest ինդեքսները 'parket ֆայլերի մասին (min-max, national-count, bloom) parterpruning + www.skipping։
Համակարգչային/ֆայլերի միավորումը 'փոքր ֆայլերի ստացիոնար merge «օպտիմալ» չափի (105-1024 MB)։
Clustering/Z-order: Ֆայլերի փոխպատվաստումը հարաբերական դաշտերի համար (օրինակ ՝ «brand, country, occcurred _ at»)։
Corete/Cormate ինդեքսները 'դիրքային բաժանումներ և բլոում, որպեսզի արագացնի merge-on-read։
8) Ինչպե՞ ս ընտրել ինդեքսները 'գործնական չեկ թերթ
1. Հավաքեք առաջին N հարցումները (բեռի 90 տոկոսը) ֆիլտրի/join/group դաշտերը։
2. Յուրաքանչյուր դաշտի համար գնահատեք «sel = 1 - distinct (value )/rows» և կարդինալությունը։
3. Ժամանակը + 1-2 չափումներ կայուն ֆիլտրերով/հասանելի։
4. Տեսակավորումը/keys կլաստերը համաձայն են ֆիլտրերի և join-բեկորների հետ։
5. Ավելացնել bloom կետային id, bitmap ցածր կարդինալության համար։
6. Տաք ագրեգացիաներ MV/պրոյեկցիա։
7. JSON-ի ուղիները պարունակում են ինդեքսներ + նյութականացում։
8. Լճերում 'կոմպակացիա և clustering գրաֆիկի վրա։
9. Մուտքագրեք SLO 'p95-լատենտ, սկանավորվող բայթ/հարցում, skipped-ի մասնաբաժինը։
9) Աջակցություն և ծառայություն
ANLS ZE/վիճակագրությունը 'թարմացրեք կարդինալությունը և հիստոգրամները։ հակառակ դեպքում օպտիմիզատոր «կույր»։
VACUUM/OPTIMIZE/RECLUSTER 'դեֆրագենտացիա և վերարտադրում։
Ինդեքսների օգտագործման իրականացումը '«covering rate», «unused index list», «bytes scanned/bytes skipped»։
Avto-խորհրդատուներ 'պարբերական առաջարկություններ կլաստերի և տեսակավորման վերաբերյալ, հիմնվելով query log-ի վրա։
Ռեգրեսիայի թեստերը 'մինչ նոր դեղամիջոցները, համեմատում են համապատասխան հարցումները և արժեքները։
10) Մետրիկի և SLO ինդեքսավորման
Տեխնիկական ՝ p95/p99 latency, scanned bytes/query, skipped bytes%, medes touched, cache hit-rate։
Տնտեսությունը ՝ դոլար/հարցում, դոլար/դաշբորդ, դոլար/TB սկան։
Վիրահատություններ 'կոմպակտի ժամանակը, վերարտադրման հերթը, «փոքր ֆայլերի» մասը։
Պլանների որակը 'հարցումների մի մասը, որոնք օգտագործում են ինդեքսներ/պրոյեկտներ, կարդինալիզմի ճշգրտությունը։
11) Քեյսներ iGaming (պատրաստի բաղադրատոմսեր)
11. 1 Վճարումներ/PSA ՝ անկում/մերժում
Կուսակցությունը '«by day»։ Տեսակավորումը '«(brand, country, occurred _ at)»։
Bloom: `transaction_id`, `user_id`. Bitmap: `psp`, `status`.
MV: `payments_7d_by_brand_psp(status, declines)`.
Արդյունքը ՝ p95 ռուբլիներ 8-ից։ 2s մինչև 1։ 1s, scanned bytes ↓ на 87%.
11. 2 Խաղային փուլեր ՝ պրովայդեր/խաղ
Z-order / ORDER BY: `(provider, game_id, occurred_at)`.
Projection/agg: `rounds_1d_by_provider_game`.
BRIN (եթե Postgres-նման պահեստ) '«occurred _ at»։
Արդյունքը 'առաջին K խաղեր/ժամ - sub-second տաք քեշի վրա։
11. 3 RG/AML 'սահմանափակումների/ինքնության իրադարձություններ
Bitmap: `rg_state`, `kyc_level`. JSON-path GIN: `$.reason`.
MV: «ակտիվ սահմանափակումներ 30 օրվա ընթացքում» + user մակարդակի նյութականացումը առանց PII։
Արդյունքը 'արագ նմուշներ կոմպլանսի համար առանց fronscan միլիարդ իրադարձությունների։
11. 4 Անտիֆրոդ ՝ երթուղիներ և սարքեր
JSON-ի նյութականացումը բացատրում է սյունակները ՝ "device. os`, `device. model`, `payment. method`.
Bloom: `graph_device_id`. Cluster: `(brand, country, device. os)`.
Վեկտորային ինդեքսը 'էմբեդինգի «դեպոզիտների վարքագիծը 7d» -ը արագ k-NN-ն է նման անոմալիաների համար։
12) Անվտանգությունն ու գաղտնիությունը
Zero-PII-ը ինդեքսավորված դաշտերում և պլանների լոգարաններում։
Կոդավորումը 'ինդեքսները/վիճակագրությունը կոդավորված են այնպես, ինչպես տվյալները։
Ագրեգատների k-անունությունը 'MV/պրոյեկցիաները հրապարակում են միայն NV խմբերը։
Geo/tenault-մեկուսացում 'կուսակցությունը/բանալիները ներառում են «brand/country/license»։
Legal Hold: ինդեքսները/մանիֆեստները նույնպես ընկնում են «սառեցման» մեջ։
13) Anti-patterna
«Ամեն ինչ անընդմեջ» ինդեքսավորումը բացատրում է ծավալի պայթյունը և write-amplifae-ը։
Փոքր կուսակցությունները (ժամ/րոպե) բացատրում են բլոկի փոթորիկը և «փոքր ֆայլերը»։
Տեսակավորման բանալիները, որոնք չեն համընկնում ֆիլտրերի հետ ռուսական զրոյական skipping-ի։
Վիճակագրության բացակայությունը վատ պլաններ է, fronscan։
JSON-ը առանց ճանապարհորդական ինդեքսների և առանց «տաք» ատրիբուտների նյութականացման։
Կոմպակտիայի և recluster-ի անտեսումը 2-4 շաբաթվա ընթացքում դեգրադացիա է։
14) Ձևանմուշները (պատրաստ են օգտագործման համար)
14. 1 Կլաստերիզացիայի/ինդեքսավորման քաղաքականությունը (YAML)
yaml dataset: gold. payments partition_by: ["date"]
order_by: ["brand","country","occurred_at"]
indexes:
bloom: ["transaction_id","user_surrogate_id"]
bitmap: ["psp","status","rg_state"]
materialized_views:
- name: mv_payments_7d_brand_psp group_by: ["brand","psp","status"]
window: "7d"
slo:
p95_latency_ms: 1200 scanned_bytes_per_query_max_mb: 256 maintenance:
compact_small_files: true recluster_cron: "0 /6 "
privacy:
pii_in_index: false
14. 2 Լճի կոմպակտի պլանը (Iceberg/Delta)
yaml compaction:
target_file_size_mb: 512 small_file_threshold_mb: 64 zorder_by: ["brand","country","occurred_at"]
run_every: "PT6H"
max_concurrency: 4
14. 3 Ինդեքսներ JSON դաշտերի համար
sql
-- GIN/inverted index on device attributes
CREATE INDEX idx_device_json ON gold. sessions
USING GIN ((device_json));
-- Materialization of critical pathways
ALTER TABLE gold. sessions ADD COLUMN device_os TEXT;
UPDATE gold. sessions SET device_os = device_json->>'os';
CREATE BITMAP INDEX idx_device_os ON gold. sessions(device_os);
14. 4 SLO ինդեքսների մոնիտորինգի
yaml monitoring:
skipped_bytes_share_min: 0. 70 index_usage_rate_min: 0. 85 stats_freshness_max_hours: 24 small_files_share_max: 0. 10
15) Իրականացման ճանապարհային քարտեզը
0-30 օր (MVP)
1. Լավագույն N հարցումների հավաքումը և սկանավորումը։
2. Սահմանափակումը ամսաթվով + տեսակավորումը, որը կապված է ֆիլտրերի հետ։
3. Միացրեք skipping (min-max) և bloom id դաշտերի համար։
4. Մեկ MV-ը «տաք» մետրիկայի համար (payments 7d)։
5. Dashbord SLI: p95, scanned bytes, skipped, small wines։
30-90 օր
1. JSON-ի ճանապարհները 'ինդեքսներ + նյութականացում։
2. Լիճը 'և Z-order/clustering-ը 2-3։
3. Autosovetich 112/պրոյեկցիա; ANLS ZE-ն։
4. Ռուսական կուսակցությունները (day week) որտեղ «փոքրիկ ֆայլերը»։
3-6 ամիս
1. MV/պրոյեկցիաների կատալոգը տարբերակով և SLA-ով։
2. Վեկտորային ինդեքսները 2019/հակաֆրոդի համար։
3. SLO-ի միասնական քաղաքականությունը և 105 դոլար/հարցում; դեգրադացիայի ալտերտերը։
4. Ինդեքսների գաղտնիության աուդիտը, geo/tenault-մեկուսացումը։
16) RACI
SystePlatform (R) 'կուսակցություններ/ինդեքսներ/բաղադրիչներ, Auto-խորհրդատուներ, ռուսական։
Anport.ru/BI (R): MV/dashbords պրոյեկտներ, հարցումների ավելացում։
Domain Owners (C): «տաք» կտրվածքների և ֆիլտրերի չափանիշները։
Մոսկվա/DPO (A/R) 'գաղտնիությունը, PII քաղաքականությունը, geo/tenault-բանալիները։
MSE/Observability (C): SLO/alerting, կապասիտներ բաղադրիչների համար։
Finance (C) 'բյուջեներ դոլար/հարցում և խնայողություն ինդեքսներից։
17) Կապված հատվածներ
Տվյալների սխեմաները և դրանց էվոլյուցիան, Walidation Ops-ը, API վերլուծությունը և հարաբերակցությունները, API վերլուծությունները և մետրիկը, տվյալների կլաստերիզացիան, չափման նվազումը, MLOps-ը 'մոդելների գործողությունը։
Արդյունքը
Վերլուծական ինդեքսավորումը ռազմավարություն է, ոչ թե «ստեղծել ինդեքսը ամեն ինչի վրա»։ Ճիշտ կուսակցությունները և տեսակավորումը, որոնք պարունակում են skipping և bloom, մտածված MV/պրոյեկցիա և հիբրիդային կոմպակտիա տալիս են արագ և կանխատեսելի հարցումներ վերահսկվող արժեքի և առանց գաղտնիության ռիսկի։ IGaming-ի համար դա նշանակում է վերջնական լուծումներ բյուջեների, պրովայդերների և RG/AML-ի համար, SLA-ի և բյուջեի սահմաններում։