GH GambleHub

תרשימי MongoDB ונתונים גמישים

(סעיף: טכנולוגיה ותשתיות)

סיכום קצר

MongoDB (ראשי תיבות של: MongoDB) הוא מתקן אחסון עם מעגלים גמישים (BSON). ב-iGaming, הוא מצוין עבור פרופילי שחקנים, קלפי CRM גמישים, יומני אירועים, טלמטריה, תחזיות זרם ממשיות, קטלוגי משחקים, ותצוגות מקדימה. עבור אינווריאנטים כספיים (ארנקים/פנקס), קונטור SQL/CP הוא לעתים קרובות יותר; MongoDB מתאים כמודל קריאה ואחסון מסמכים בעלי ביצועים גבוהים.


איפה מונגודב עושה את המירב של iGaming

פרופילי שחקן והגדרות: משתני מבנה (הגדרות מיקום, העדפות, metadata KYC).
קטלוגים של תוכן/משחקים/ספקים: קריאה מהירה בכרטיסים, מסננים, תיוג, טקסט מלא.
אירועים/טלמטריה/יומנים: TPS גבוה, חלונות זמן, אחסון TTL.
תצוגות ממשיות (CQRS): מסכים מהירים (לוחות מובילים, פעולות אחרונות, אגרגטים).
התאמה אישית/מאפיינים מקוונים של ML: תבניות KV באוספים, TTL קצר.


עקרונות של תוכנית גמישה: משמעת במקום כאוס

MongoDB הוא לא ”בלי מזימה” - המזימה חיה בקוד ואימות.

מומלץ:

1. סכימה כחוזה: JSON Schema Idiation באוספים.

2. מסמכי ורסינינג עם שדה 'schemaVersion'.

3. שדות חובה קפדניים (id, מפתחות חיפוש), ”זנב” של תכונות נדירות - אופציונלי.

4. מגבלות ממדי מערך וקינון (לאינדקסים ו-RAM).

5. נדודים ברקע: עדכונים על ידי ”תרשים”, שופכים, מילוי גב.

דוגמה: סכימת JSON

js db.createCollection("player_profiles", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["playerId", "createdAt", "schemaVersion"],
properties: {
playerId: { bsonType: "string" },
createdAt: { bsonType: "date" },
schemaVersion: { bsonType: "int", minimum: 1 },
locale: { bsonType: "string" },
kyc: {
bsonType: "object",
properties: {
status: { enum: ["pending", "verified", "rejected"] },
doc: { bsonType: "object" }
}
}
}
}
}
});

מודל נתונים ועיצוב מסמכים

עיצוב ”לפי דרישה”: 1 מסך/נקודת סוף = 1 מסמך או קבוצה קטנה של מסמכים.
Denormalization: כלול תת-דוקומנטים קטנים המצורפים (לדוגמה, מיני-קלפים של ספקי משחקים).

קישורים נגד הטבעה:
  • שיבוץ - לקטעים קרובים ומעודכנים לעתים רחוקות.
  • הפניות ('ref') - לגודל גדול/עדכונים תכופים/שימוש חוזר.
  • הגבלת גודל: מסמך מצורף 16 MB; מחסומים גדולים של אף-אף-אס/אובייקט.
  • ביקורת חשבונות/מטא-נתונים: ” At',” At', ”tracheId',” tenantId', ”idempot Key”.

אינדקסים: איכות קריאה ויציבות אחורית

סוגי אינדקס ומנהגים:
  • B-Tree (ראשי)

תרכובת: סדר השדות תואם לנבואות תכופות.
כלל קידומת: אפשרויות קידומת עובדות עבור '(TenantID, TairID, AT)'.
מיין: שקול ”סוג” בסוף האינדקס (לדוגמה, ” At: -1”).

js db.bets.createIndex(
{ tenantId: 1, playerId: 1, createdAt: -1 },
{ name: "idx_bets_tenant_player_created_desc" }
);

דלילות/חלקי

להאיץ תת-קבוצות תכופות (”status:” indition ””), להפחית את גודלן.

js db.withdrawals.createIndex(
{ playerId: 1, createdAt: -1 },
{ partialFilterExpression: { status: "pending" } }
);

TTL

עבור טלמטריה/יומנים/תכונות זמניות - תפוגה אוטומטית.

js db.events.createIndex({ expireAt: 1 }, { expireAfterSeconds: 0 });

טקסט/השלמה אוטומטית

טקסט לטקסט מלא (הגבלות שפה); להשלמה אוטומטית - n-gram/trigram דרך שדות וגישות רגקס או חיפוש אטלס.

נוגדי דלקת אינדקס

אינדקס ”כל” = טיפה במהירות כתיבה.
קרדינליות נמוכה ללא סלקטיביות נמוכה.
תשכפל תרכובות.
שדות אינדקס בתוך מערכים ענקיים ללא גבולות.


צינור צבירה: מסכים ודוחות מהירים

השתמש "$ game" "au '$ סוג'" $ limit "כשלבים מוקדמים; אינדקסים של פרויקט תחת 'משחק $/$ $ סוג'.
'חיפוש $ עבור joynes מבוקר (רך, בכרכים סבירים).
'$ pacet' עבור מדדים מרובים; עם דולר אחד, אוספי מיזוג.
'$ מיזוג '/$ out' - התממשות תוצאות באוסף (לקרוא מודלים).

דוגמה: שחקן אחרון מהמר + כספת:
js db.bets.aggregate([
{ $match: { tenantId: "eu-1", playerId: "p123" } },
{ $sort: { createdAt: -1 } },
{ $limit: 100 },
{ $group: {
_id: "$playerId",
lastBets: { $push: { amount: "$amount", ts: "$createdAt", game: "$gameId" } },
totalAmount: { $sum: "$amount" }
} }
]);

עסקאות, עקביות ואידמפוטנטיות

אטומיות ללא מסמך יחיד; הזמנות מורכבות - תחשבו על חלוקת מסמכים.
עסקאות מולטי-מסמך (ACID) - זמינות עם העתקים, אך יקרות יותר באטיות; ליישם חוכמת נקודה.

כתבה עניינית/עניינית קריאה:
  • 'w: "רוב" "עבור רשומות קריטיות (עלות latency);
  • דאגה: ”הרוב” לקריאה עקבית.
  • Idempotency: מפתחות ייחודיים על "idempootsKey "/" pspTx", פעולות UPSERT ("$ StonInsert'," $ inc ").
דוגמה UPSERT:
js db.wallet.updateOne(
{ playerId: "p123" },
{ $inc: { balanceCents: -5000 }, $set: { updatedAt: new Date() } },
{ upsert: true, writeConcern: { w: "majority" } }
);
💡 עבור מחליטים כספיים, SQL הוא בדרך כלל מועדף. במונגו - רק עם משמעת מפתח/אידמפוטנטיות קפדנית ועסקאות מוגבלות.

שריטה ובחירת מפתח

שברי מונגודב על ידי מפתח שבור. הבחירה היא קריטית:
  • התפלגות טעינה: מפתח קרדינליות גבוה והפצה אחידה (לדוגמה, 'TenantID, Tangid)'.
  • הימנע מונוטוניות: " At' כמפתח רק שבר" חם ".
טווחים נגד חשיש:
  • חשיש - מפיץ רשומות באופן שווה יותר.
  • טווח הוא טוב יותר לשאילתות טווח, אבל לצפות זנבות חמים.
  • טווח תגיות לרגולציה/לוקליזציה (EU/LATAM/TR).
דוגמה:
js sh.enableSharding("igaming");
db.bets.createIndex({ tenantId: 1, playerId: 1, _id: "hashed" });
sh.shardCollection("igaming.bets", { tenantId: 1, playerId: 1, _id: "hashed" });
אנטי-פטריות:
  • רסיס-מפתח על ידי קרדינליות נמוכה ('סטטוס') - רזה של שברים.
  • ”תצפית” תכופה בין אוספי שארדי בלי לדחוף מפתח אחד בכל פעם.
  • מפתח רסיס ניתן לשינוי (קשה ויקר לשינוי).

הגדרות העתק, קריאה, ומדיניות קריאה לאחר כתיבה

העתק סט = HA ובסיס עסקה.

עדיפות קריאה:
  • 'Primary' לקריאה ביקורתית אחרי כתיבה;
  • 'Primage העדיף '/' משני' - לאנליטיקה/לא קריטי.
  • ענייני קריאה/כתיבה מתואמים עם SLO ותקציב Latency.

שינוי זרמים, מרכז לבקרת מחלות ואינטגרציה

שינוי זרמים: מנוי להכנסות/עדכונים/מחיקות - נוח עבור:
  • סינכרון שכבות מטמון (רדיס)
  • מעורר/הודעות CRM,
  • הורדות ל OLAP (ClickHouse/Pinot),
  • מסכי תגובה.
  • תבנית אאוטבוקס: עבור תחומים קריטיים, פרסמו אירועים לאוסף נפרד, אותו המחבר קורא ומתרגם לאוטובוס (קפקא). זה מגדיל את יכולת החיזוי של אינטגרציה.

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

SLO: p99 כרטיס קריאה סתום 10-20 ms; הכנסת אירועים לבוש 20-40 ms; הפרש בריח בין רסיסים בתוך X%; זמינות 99. 9%.
Metrics: op-latency, תור עומק,% של אמפס למשני, מטמון/WT סטטיסטיקות, דפים פגומים, מנעולים ממתינים, מספר של קורסים/חיבורים פתוחים.
פרופיל: 'מערכת. פרופיל ', הסבר' ("Stats'), מנעולי אוסף/אינדקס.
התראות: גידול של לחץ מטמון WT, פעולות איטיות, גידול של בקשות שאינן כלולות באינדקס, גיבוי של בקשות משניות, נדידת נתח/מאזן.


ביצועים וכוונון

W Tiger Cache: כברירת מחדל ~ 50% RAM - תוקף לפרופיל.
דחיסה: snappy/zstd לאוספים, zstd ליומנים - שיווי משקל מעבד/IO.
מכניסים ומחיצות לטלמטריה.
הקרנה (”field: 1”) כדי לא לגרור מסמכים ”עבים”.
הגבלה/דלג: הימנע מ "דלג" גדול. השתמש בסמן/סמן pagination (" At/_ id').
אוספים של רישומי ”טבעת”.


בטיחות ותאימות

Auth/RBAC: תפקידים על בסיס האוסף/נתונים, מינימום הרשאות נדרשות.
TLS במעבר, הצפנה בדיסק (FLE/at-rest).
מדיניות PII: מיסוך/כינוי, אוספים נפרדים עבור שדות רגישים.
ריבוי שכבות: קדימות/מסדי נתונים/אוספים, מסננים לפי "TenantId', ניתן לבנות שכבות דמויות RLS ביישום.
ביקורת: אפשר ביקורת של פעולות על אוספים קריטיים.


גיבויים, PITR וDR

תמונות של כרכים + גיבויים של אופלוג עבור התאוששות נקודה בזמן.
העתק מוגדר באזור אחר עבור DR; תרגילי התאוששות רגילים.
שליטה על גידול אופלוג עבור פסגות החדרה (PSP webhooks/turniers).
באשכולות שברים - גיבויים עקביים עם שרת הגדרות.


אינטגרציה עם שאר הארכיטקטורה

CQRS: צוותים פגעו ב ־ SQL (כסף), Events # Materialized Views in MongodB.
הזרמת אירועים: קפקא/פולסר כאוטובוס, מונגו - כיור/מקור באמצעות מחברים ושינוי זרמים.
רדיס (Redis), בקרבת מקום, שכבת לייה נמוכה ביותר (caches/counters).
העלאה ל ClickHouse/Pinot לסריקות ארוכות ו BI.


רשימת בדיקות מימוש

1. תיקון תחומים: מה הולך במונגו (גמיש/גבוה TPS/השלכה), מה שנשאר ב SQL.
2. הגדר חוזי סכימה: JSON Schema Validation, ”SchamaVersion”.
3. אינדקסים לעיצוב לשאילתות אמיתיות; הוסף TL למידע רועש.
4. בחר מפתח רסיס (קרדינליות גבוהה, אחידות); במידת הצורך - חדירה לאיזור.
5. הגדרת ערכת העתקים, Read/Write Conservation for SLO; מדיניות קריאה אחרי כתיבה.
6. אפשר יכולת תצפית ואפיון, התראות למטמון/WT/oplog indexes.
7. ארגן גיבויים + PITR, ד "ר אשכול ותרגילים רגילים.
8. חבר בין זרמי שינוי/תיבה חיצונית כדי לסנכרן מטמונים ואוטובוסים.
9. הגבלת גודל מסמך וקינון; יישום פגינציה על ידי סמן.
10. מדיניות נפרדת עבור PII/דיירים, הצפנה, ביקורת.


אנטי דפוסים

”אין מזימה” במוצר: חוסר אימות וגרסאות = תוהו ובוהו.
שברי מפתח בזמן/מונוטוני - רסיס חם ו p99 לא יציב.
”ג 'וינס” תצפית $ על סטים ענקיים ללא אינדקסים/עבודת אלילים.
השתמש בעסקאות בכל מקום - אבדה פרודוקטיביות.
חוסר TTL/Restructions ליומנים * גידול בנפח ובעלות.
לאחסן מזומנים קריטיים רק במונגו ללא אידאות קפדנית.


תוצאות

MongoDB הוא כלי רב עוצמה לתחומי iGaming גמישים: פרופילים, ספריות, טלמטריה, תחזיות ואישיות. המפתח להצלחה הוא ערכת חוזה ואימות, אינדקס מתחשב, מפתח שברי נבחר היטב, קונצרן קריאה/כתיבה מודעת, שינוי זרמים לאינטגרציה ומשמעת תפעולית קפדנית (תצפיות, גיבויים, DR). בשילוב עם ליבת SQL וזרימת אוטובוס, זה נותן לפלטפורמה ממשקים מהירים ויציבות לפסגות טורניר.

Contact

צרו קשר

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

התחלת אינטגרציה

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

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

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