GH GambleHub

אופטימיזציה של שאילתות אנליטיות

1) מדוע לייעל את (הקשר iGaming)

מהירות עסקית: דוחות GGR/NET, ספקים/משחקים, RG/AML ושיווק ב- p95 SLA.
עלות: פחות בייטים סרוקים ושאפל = מתחת לדולר/בקשה.
שעות שיא יציבות, לא קפואות.
קנה מידה: עשרות מותגים/שווקים, מיליארדי קווים, דקות של רעננות.

2) טען פרופיל ו ־ SLO

תאר את ”90% הראשונים” של הבקשות: חלונות (7/28/90d), מסננים ('מותג, מדינה, ספק, psp, סטטוס'), תכונות JSON, K עליון ואחוזון.
דוגמאות: p95 מצולמים 1. 2 אס ללוח מחוונים, סריקה בבתים 256 MB/בקשה, רעננות 5 דקות.

3) אנטומיה של תוכניות: מה לחפש

חיזוי/הקרנה דחיפה - מסננים ורשימת עמודות מושמטים למקור.
גיזום מחיצה ודילוג נתונים (מין-מקס/פריחה/מניפסט).
סריקה וקטורית/התממשות מאוחרת: טור קורא נדחה על ידי JOIN/PROJECT.
אסטרטגיה מצטרפת: Broadcast Hash (BHJ), Mike-Merge (SMJ), Nessed Loop (NLJ - associates).
שפוך & דשדוש: נפח הדשדוש והשפיכה על הדיסק הוא האויב העיקרי של SLA.
ביצוע שאילתה אדפטיבית: שינוי באסטרטגיה בזמן הרצה (החלפת BHJ↔SMJ, פחם דינמי).

התוכנית צריכה להראות: כמה בייטים אנחנו קוראים, איפה השיחים, מה אנחנו מטמונים.

4) צדדים, מיון, מקרי אשכול

מסיבות: ”תאריך” + 1-2 ממדי גישה (לדוגמה, ”מותג, מדינה”).
מיון/התקבצות: ”סדר BY/CLUSTER BY/Z-ORDER” על ידי מסננים/מצטרפים תכופים ('ספק, game_id, occurred_at').
סיווג מחדש וחמלה: העברה רגילה עבור דילוג נתונים; גודל קובץ המטרה הוא 128-1024 MB.

5) צרף תבניות

Broadcast Hash With (BHJ): מימד קטן (מאות MB) משודר לעובדה.

sql
/ hint if engine supports/
SELECT /+ BROADCAST(dim_provider) /...

מצטרף מיון-מיזוג (SMJ): סטים גדולים, מיון מפתחות תואמים/אשכול מקרים = פיר מינימלי.
טרום הצטרפות/הדנורמליזציה: העבירו תכונות יציבות מ-dim _' לתצלום עצמו (הקרנה/תצוגה ממשית) - פחות JOIN על הנתיב הקריטי.
אנטיביג 'ואנים: לשכתב ”לא ב/קיים” לתוכניות מפורשות חצי-אנטישמיות.
חיסול של פיצוץ קרדינלי: לבדוק מפתחות כפולים בממדים, להשתמש פונדקאית-מפתחות.

6) קבוצה על ידי, אגרגטים והפוגות

Rollup/Cube/Grouping Sets: שלב אחד במקום צבירה מרובה.

sql
SELECT brand, country, DATE(ts) d, SUM(amount)
FROM gold. payments
WHERE ts >= NOW() - INTERVAL '7 days'
GROUP BY GROUPING SETS ((brand,country,d),(brand,d),(d));

תצוגות ממשיות (MV )/תחזיות: ”תשלומים _ 7d _ by _ brand _ psp”, ”סיבובים _ 1d _ by _ diver _ game”.
* צבירה סופית חלקית: לאפשר למנוע להצטבר באופן חלקי על עובדים (מקומי) ולבסוף על המתאם.
משוער: HLL עבור 'COUNT (Distribute user)', TDInegent עבור אחרונים - זולים יותר ומספיק עבור BI.

7) פונקציות חלון (מסודרות)

מחיצה בדיוק על מפתחות עם בררנות גבוהה; הזמנה על ידי - על ידי מיון עמודים.
החלף חלונות כבדים עם פרגרגייט ומצטרפים למחצה היכן שאפשר.

sql
-- Instead of window distinct
SELECT brand, COUNT() users
FROM (SELECT DISTINCT brand, user_id FROM gold. sessions WHERE d>=CURRENT_DATE-7) t
GROUP BY brand;

8) מסננים, עבודת אלילים ו ־ TOP-K

סדר סינון אינו חשוב עבור CBO, אבל סלקטיביות ואינדקסים/מיון הם.
הגבלה... עם קשרים/אישור TOP-K - לקצר את הסריקה.
pagination: ”keyset pagination” במקום ”OFSET/LIMIT” עבור שולחנות גדולים.

sql
-- keyset
SELECT FROM t WHERE (date, id) > (:last_date,:last_id) ORDER BY date, id LIMIT 1000;

9) JSON/חצי מובנה

התממש נתיבים חמים לעמודות ('התקן. o ',' psp. שיטה ').
השתמש באינדקסים הפוכים/GIN במסלולי JSON אם המנוע תומך.
הימנע מ ־ UDF לפי שורה: השלכה טובה יותר עם תכונות מודגשות.

10) אישור ודגימה

סקיצה HL/תטה: זולה ”COUNT DISTRATT”.
TDiingt/KLL: אחוזון p95/p99 ללא כל סוג.
מאגר/דגימה מסודרת: מחקר אינטראקטיבי ותצוגות מקדימות.

11) זיכרון, מיצר וקונקרנסי

משמר שפיכה: מגבלות זיכרון על הצטרפות/אג; כאשר שופכים - להפחית אצווה/מקביליות, להגדיל מיון על ידי מפתח.
קונקורנסי & QOS: בריכות ללוחות מחוונים ”חמים” ו Hell-Hoc כבד; סריקה/מגבלות זמן; מתג הריגה לבקשות ”נשכחות”.
תוצאה של מטמון/מטמון שאילתה: אפשר לתבניות BI ניתנות לחזרה, מנוטרלות על ידי אסימון רעננות.

12) בדיקות רגרסיה ו ”ריצה כפולה”

פרופילי התייחסות לאחסון (תוכנית/סריקה/זמן) לשאילתות N העליונות.
לפני שחרור אינדקסים/אשכולות - A/B ריצה: השווה p95, סרק בייטים, דילג על שיתוף, דשדוש.
צור סף ”אל-כשל”: אם p95 עלה> X% - rollback.

13) יכולת תצפית ו ־ SLO

SLI:
  • p50/p95/p99 latency, נסרק בייטים/שאילתה, דילג על בייטים%, קבצים נגעו;
  • לערבב בייטים, לשפוך בייטים, זיכרון שיא;
  • מטמון להיט קצב; גישות דיוק.

התראות: עלייה בבתים סרוקים, נפילה בנתח מדלג, תדירות NLJ, שפכים> סף.

14) תיקי iGaming (מתכונים)

14. 1 תשלומים/PSPs: ”פסגות ויתור”

איפה: זה בין עכשיו () -7d ועכשיו () ”, מותג, מדינה, psp, מעמד”.
מסיבה: יום; סדר/הזמנה: '(מותג, מדינה, ט)'; bitmap: ”psp, סטטוס”; בלום: "transaction _ id'.
MV: 'תשלומים _ 7d _ by _ brand _ psp (סטטוס)'.
תוצאה: p95 = ~ 1, bytes sut5-10 ×, מצר אפס.

14. 2 סיבובי משחק: Top K Games/Hour

הזמנה על ידי/אשכול '(ספק, game_id, occurred_at)'; הקרנה עבור פרגטים.
Exchanx Top-K + TDinegt למשך סיבוב p95.
שורה תחתונה: גרפים תת-שניות על המטמון החם.

14. 3 מגבלות פעילות RG/AML

JSON 'Reason' # טור; bitmap 'rg _ state', 'kyc _ level'; הצטרפות למחצה עם המדינה האחרונה.
התוצאה: דווח ”במשך 30 יום” - שניות ללא סריקה מלאה.

15) רשימת אופטימיזציה (מדי יום)

1. אוסף בקשות טופ N והפרופילים שלהן (תוכנית/בייטים/שאפל).
2. מקבצים לפי תאריך + מוסכם מיון/אשכול מקרים.
3. בדיקת שכיבות שמיכה וגיזום הקרנה (רק העמודות הנדרשות).
4. אסטרטגיה מצטרפת: שידור קטן, סוג עבור SMJ, אין NLJ.
5. קדם צבירה/MV ללוחות מחוונים חמים.
6. Exchanx שבו תקף (different/seconles/top-k).
7. JSON = עמודות ו/או מדדים הפוכים.
8. דחף/סיווג מחדש; דילג על יעד Bytes 70%.
9. תוצאות מטמון ובריכות קונקרטיות נפרדות.
10. ניטור: p95, בייטים סרוקים, דשדוש, לשפוך, קצב פגיעה.

16) תבניות (מוכנות לשימוש)

16. 1 מדיניות אופטימיזציה (YAML)

yaml workload: bi_hot slo:
p95_latency_ms: 1200 scanned_bytes_max_mb: 256 skipped_bytes_share_min: 0. 70 storage:
partition_by: ["date"]
cluster_by: ["brand","country","occurred_at"]
indexes:
bloom: ["transaction_id","user_surrogate_id"]
bitmap: ["psp","status","rg_state"]
aggregation:
mv:
- name: mv_payments_7d_brand_psp window: "7d"
group_by: ["brand","psp","status"]
approx:
count_distinct: "hll"
percentile: "tdigest"
concurrency:
pools: {bi_hot: 50, adhoc: 10}
timeout_s: 120

16. 2 בדיקת רגרסיה (פסאודו-SQL)

sql
-- baseline: p95<=1200ms, scanned_bytes<=256MB
EXPLAIN ANALYZE
SELECT brand, psp, status, COUNT() cnt, SUM(amount) amt
FROM gold. payments
WHERE ts >= NOW() - INTERVAL '7 days'
AND brand =:brand AND country =:country
GROUP BY brand, psp, status;

16. 3 שכתוב מחודש מובהק

sql
-- Bad: Heavy COUNT (DISTINCT user_id)
SELECT COUNT(DISTINCT user_id) FROM gold. sessions WHERE d>=CURRENT_DATE-7;

-- Better: HLL sketch/preaggregate
SELECT hll_union(user_hll) FROM agg. sessions_7d_user_hll WHERE d>=CURRENT_DATE-7;

16. 4 Keyset pagination

sql
SELECT
FROM gold. game_rounds
WHERE (occurred_at, round_id) > (:ts,:rid)
AND brand=:brand AND country=:country
ORDER BY occurred_at, round_id
LIMIT 1000;

17) אנטי דפוסים

'Select' in prod'; חוסר גיזום השלכה.
קיזוז של עבודת אלילים במיליוני קווים.
הרוזן נבדל ללא סקיצות; אחוריים דרך כל הסוג.
NLJ על סטים גדולים; הצטרפו לביטויי JSON.
חבורות קטנות וקבצים מפוזרים (סופת מטא-נתונים).
מחרוזות UDF במקום לממש עמודות.
התעלם מהסטטיסטיקה/ANALIZE - אופטימיזר עיוור וסריקה מלאה.
אין בדיקות רגרסיה ואין סף גלגול.

18) מימוש מפת דרכים

0-30 ימים (MVP)

1. מדידה של בקשות Top N והתקנה של SLO/SLI.
2. חבורות לפי תאריך + מיון/אשכול מקרים; אפשר דילוג נתונים/פריחה.
3. MV אחד לדו "ח תשלום חם; HLL/TDileget BI.
4. פיצול בריכות שאילתה, לאפשר מטמון תוצאה.

30-90 ימים

1. מפקד אוכלוסין חלונות כבדים/JSON * הגדרה מראש/עמודות.
2. שידור-להצטרף ממדים קטנים; SMJ עבור גדול; חיסול של אן-אל-ג 'יי.
3. לוח זמנים דחף וסיווג מחדש; יועץ מפתח.
4. תצפית והתראות על הידרדרות, תוכניות א/ב, גלגול אוטומטי.

3-6 חודשים

1. קטלוג הקרנה/MV עם versioning ו SLA.
2. גרעין אישור עבור אחוז מובהק/טופ-קיי על כל לוחות המחוונים.
3. תבניות אחידות לבדיקות רגרסיה ותקציבים $/בקשה.
4. היגיינה קבועה של JSON ו-UDF: התממשות ומדדים.

19) ראסי

פלטפורמת נתונים (R): מחיצות/התקבצות/דחיסה, MV/תחזיות, מטמונים, ניטור.
אנליטיקה/BI (R): שכתוב SQL, אישור אגרגטים, בדיקות רגרסיה.
דומיין בעלים (C): דרישות לסעיפים ודיוק.
אבטחה/DPO (A/R): פרטיות/PII, k-אנונימיות של אגרגטים.
SRE/Observability (C): SLO/Adalting, concarrency and cability.
תקציבים עבור $/בקשה והשפעה כלכלית.

20) חלקים קשורים

אינדקס אחסון אנליטי, שרטוטי נתונים ואבולוציה, אימות נתונים, פרקטיקות DataOps, קליטת נתונים, צמצום ממדים, אנליטיקה ומטריצות API, MLOps: ניצול מודל.

סך הכל

אופטימיזציה של שאילתה אינה ”רמז קסם”, אלא מערכת: סימון נתונים כשירים (מחיצות/אשכולות), הגדרה מראש ואלגוריתמים משוערים, אסטרטגיות JOE נכונות, מטמון/קונקרנסי וניטור קבוע של p95 ובתים סרוקים. עבור iGaming, זה אומר מדדים מהירים ויציבים לתשלומים, משחקים וציות - בתוך SLA ותקציב.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

Telegram
@Gamble_GC
התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.