GH GambleHub

Схемаҳои тағйирёбандаи маълумотҳои Mongo-DB

(Қисм: Технология ва инфрасохтор)

Хулосаи мухтасар

MongO DB нигаҳдории ба ҳуҷҷат нигаронидашуда бо микросхемаҳои фасеҳ (BSON), воридкунии зуд, миқёси уфуқӣ ва қубури пуриқтидори агрегатсия мебошад. Дар IGaming, он барои профилҳои бозингарон, кортҳои тағйирёбандаи CRM, гузоришҳои рӯйдодҳо, телеметрия, пешгӯиҳои ҷараён, каталогҳои бозӣ ва назари пешакии кэшшуда хеле хуб аст. Барои инвариантҳои пулӣ (ҳамёнҳо/дафтар) контури SQL/CP бештар гузошта мешавад; Mongo-DB ҳамчун нигаҳдории ҳуҷҷати хондан ва самаранок мувофиқ аст.


Дар куҷо MongO DB аз ҳама IGaming месозад

Профилҳо ва танзимоти бозингар: тағирёбандаҳои сохтор (танзимоти локалӣ, афзалиятҳо, метамаълумоти KYC).
Каталогҳои мундариҷа/бозиҳо/провайдерҳо: хондани корти зуд, филтрҳо, барчасп, матни пурра.
Ҳодисаҳо/телеметрия/гузоришҳо: TPS баланд, тирезаҳои вақт, нигоҳдории TTL.
Назари материализатсияшуда (CQRS): экранҳои зуд (лидерҳо, амалҳои охирин, агрегатҳо).
Фардикунонӣ/хусусиятҳои онлайн ML: намунаҳои KV дар маҷмӯаҳо, TTL кӯтоҳ.


Принсипҳои нақшаи тағйирпазир: интизом ба ҷои бетартибӣ

Mongo-DB "бе схема" нест - схема дар рамз ва санҷиш зиндагӣ мекунад.

Тавсия дода мешавад:

1. Нақшаи шартнома: Тасдиқи схемаи JSON дар маҷмӯаҳо.

2. Нусхабардории ҳуҷҷатҳо бо майдони 'schemaversion'.

3. Майдонҳои қатъии ҳатмӣ (ид, калидҳои ҷустуҷӯӣ), "дум" -и атрибутҳои нодир - ихтиёрӣ.

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: Дохил кардани subdocuments хурд замима (масалан, мини-кортҳои провайдерҳои бозӣ).

Пайвандҳо ва ҷобаҷогузорӣ:
  • Ҷобаҷогузорӣ - барои пораҳои ба ҳам наздик ва кам навсозӣ.
  • Истинодҳо ('ref') - барои андозаи калон/навсозиҳои зуд-зуд/истифодаи такрорӣ.
  • Маҳдудияти андоза: ҳуҷҷат ≤ 16 Мб; бинарҳои калон - анборҳои GriD/объект.
  • Аудит/метамаълумот: 'Created

Индексҳо: сифати хондан ва устувории дермонӣ

Намудҳо ва амалияи индексатсия:
  • B-дарахт (ибтидоӣ)

Таркиб: Тартиби майдонҳо ба предикатҳо ва навъҳои зуд-зуд мувофиқат мекунад.
Қоидаи префикс: вариантҳои префикс барои 'кор мекунанд (иҷоранишин, плеери Id, офаридашуда)'.
Ҷудо кунед: Дар охири шохис "навъ" -ро дида бароед (масалан, 'эҷод шудааст: -1').

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

Қисман/пароканда

Тезонидани зербахшҳои тез ('статус:' интизорӣ '), кам кардани андоза.

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

TTL

Барои телеметрия/гузоришҳо/хусусиятҳои муваққатӣ - мӯҳлати автоматӣ.

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

Матн/автокомплет

'матни пурраи матн (маҳдудиятҳои забон); барои худкор анҷом додан - 'n-gram '/trigram тавассути майдонҳо ва равишҳои regex ё Atlas Search.

Индекси antipatterns

Индекси "ҳама" → паст шудани суръати навиштан.
Кардинализатсияи паст бидуни қисман → интихоби паст.
Пайвастагиҳои такрорӣ.
Майдонҳои индексатсия дар дохили массивҳои азим бе маҳдудият.


Лӯлаи маҷмӯӣ: Экранҳо ва ҳисоботҳои зуд

Ҳамчун марҳилаҳои ибтидоӣ '$ match' → 'sort' → '$ limit' -ро истифода баред; индексҳои лоиҳа дар зери '$ мувофиқат/$ навъ'.
'$ ҷустуҷӯ' барои joynes назоратшаванда (мулоим, дар ҳаҷми оқилона).
'$ facet' барои якчанд ченакҳо; '$ Иттифоқ' - маҷмӯаҳои якҷоя.
'$ якҷоя '/' $ берун' - натиҷаҳоро дар коллексия ба даст оред (моделҳои хониш).

Мисол: охирин бозингари гарав + vault:
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: "аксарият"' барои сабтҳои интиқодӣ (арзиши ниҳоӣ);
  • 'хондан: "аксарият"' барои мутолиаи пайваста.
  • Idempotency: калидҳои беназир дар 'idempotencY '/' psp
Намунаи UPSERT:
js db.wallet.updateOne(
{ playerId: "p123" },
{ $inc: { balanceCents: -5000 }, $set: { updatedAt: new Date() } },
{ upsert: true, writeConcern: { w: "majority" } }
);
💡 Барои инвариантҳои пулӣ одатан SQL бартарӣ дорад. Дар Mongo - танҳо бо интизоми қатъии калидӣ/idempotence ва муомилоти маҳдуд.

Sharding ва интихоби калид

Бо калиди shard рехтани Mongo-DB. Интихоб хеле муҳим аст:
  • Тақсими сарборӣ: калиди баланди кардиналӣ ва тақсимоти ягона (масалан, '(иҷорагир, player' Id) ').
  • Аз якрангӣ канорагирӣ кунед: 'офарида шудааст' ҳамчун калиди ягона → рехтани "гарм".
Диапазонҳо ва ҳаш:
  • Hashed - сабтҳоро баробар тақсим мекунад.
  • Ranged барои дархостҳои диапазон беҳтар аст, аммо думҳои гармро тамошо кунед.
  • Диапазони барчасбҳо барои танзим/маҳаллисозӣ (EU/Lat
Намуна:
js sh.enableSharding("igaming");
db.bets.createIndex({ tenantId: 1, playerId: 1, _id: "hashed" });
sh.shardCollection("igaming.bets", { tenantId: 1, playerId: 1, _id: "hashed" });
Антипаттернҳо:
  • Калиди Shard бо кардинали паст ('статус') - пардаи рехтагарӣ.
  • Зуд-зуд "ҷустуҷӯи $" байни коллексияҳои шармгин бидуни ҳамоҳангсозии як калид дар як вақт.
  • Калиди ивазшаванда (тағир додани мушкил ва гарон).

Сиёсати нусхабардорӣ, хондан ва пас аз хондан

Маҷмӯи нусхабардорӣ = HA ва асоси транзаксия.

Интихоби хондан:
  • 'primary' for танқиди хондан-пас аз навиштан;
  • 'primary '/' дуюмдараҷа' - барои таҳлил/ғайри интиқодӣ.
  • Ҳамоҳангсозии нигарониҳо бо SLO ва буҷаи ниҳонӣ.

Тағйир додани ҷараёнҳо, CDC ва ҳамгироӣ

Тағйир додани ҷараёнҳо: обуна ба замимаҳо/навсозиҳо/нест кардан - қулай барои:
  • Ҳамоҳангсозии қабати кэш (Redis)
  • CRM триггерҳо/огоҳиҳо,
  • зеркашиҳо ба OLAP (Click/House/Pinot),
  • экранҳои реактивӣ.
  • Намунаи Outbox: барои доменҳои интиқодӣ, рӯйдодҳоро ба коллексияи алоҳида нашр кунед, ки он гоҳ пайвасткунанда ба автобус мехонад ва тарҷума мекунад (Кафка). Ин пешгӯии интегратсияҳоро зиёд мекунад.

Мушоҳида ва SLO

SLO: хондани корти p99 ≤ 10-20 мс; гузоштани рӯйдодҳо ≤ 20-40 мс; фарқи leutency байни shards дар X%; мавҷудияти ≥ 99. 9%.
Нишондиҳандаҳо: op-latency, умқи навбат,% umps дар як миёна, омори кэш/WT, камбудиҳои саҳифа, қулф-интизорӣ, шумораи курсорҳои кушода/пайвастҳо.
Профил: 'система. профил ',' фаҳмонед ("иҷроиши статистика") ', қулфҳои ҷамъоварӣ/индексатсия.
Огоҳиҳо: афзоиши фишори кэши WT, амалиёти суст, афзоиши дархостҳо, ки ба шохис дохил карда нашудаанд, ақибмонии дархостҳои дуюмдараҷа, муҳоҷирати хурд/тавозун.


Иҷро ва танзими

Кэши симӣ: бо нобаёнӣ ~ 50% RAM - барои профил тасдиқ кунед.
Фишурдасозӣ: snappy/zstd барои маҷмӯаҳо, zstd барои гузоришҳо - тавозуни CPU/IO.
Замимаҳо ва яклухт барои телеметрия.
Проексия ('{майдон: 1}'), то ки ҳуҷҷатҳои "ғафс" кашида нашаванд.
Маҳдудият/гузаштан: Нагузоред, ки 'гузаред' -и калон → истифодаи курсор/пагинатсияи маркер ('created' At/_ id ').
Маҷмӯаҳои пӯшида барои гузоришҳои "занг".


Бехатарӣ ва мувофиқат

Auth/RBAC: нақшҳо дар коллексия/пойгоҳи додаҳо, имтиёзҳои ҳадди ақали талабшаванда.
TLS дар транзит, рамзгузорӣ дар диск (FLE/at-rest).
Сиёсати PII: ниқоб/бегона, маҷмӯаҳои алоҳида барои соҳаҳои ҳассос.
Иҷораи бисёрҷониба: префиксҳо/пойгоҳи додаҳои инфиродӣ/маҷмӯаҳо, филтрҳо аз ҷониби 'иҷорагир', шумо метавонед қабатҳои ба RLS монандро дар барнома дошта бошед.
Аудит: Санҷиши амалиётро дар маҷмӯаҳои интиқодӣ фаъол созед.


Нусхабардорӣ, PITR ва DR

Суратҳои ҳаҷм + нусхаҳои эҳтиётии оплог барои барқароркунии Point-in-Time.
Нусха дар минтақаи дигар барои DR муқаррар шудааст; машқҳои мунтазами барқарорсозӣ.
Назорати афзоиши оплог барои қуллаҳои воридкунӣ (webhooks/мусобиқаҳои PSP).
Дар кластерҳои shard - нусхаҳои эҳтиётии пайваста бо сервери конфигуратсия.


Интегратсия бо боқимондаи меъморӣ

CQRS: дастаҳо SQL (пул), чорабиниҳо → Materialized Views дар Mongo

Чорабинӣ-ҷараён: Кафка/Пулсар ҳамчун автобус, Mongo - ғарқ/манбаъ тавассути пайвасткунакҳо ва ҷараёнҳои тағирёбанда.
Редис: дар наздикии қабати ниҳонии ниҳоят паст (кэш/ҳисобкунакҳо).
OLAP: Барои сканҳои дароз ва BI ба Click/House/Pinot бор кунед.


Рӯйхати санҷиши амалисозӣ

1. Доменҳои ислоҳкунӣ: он чизе, ки дар Mongo меравад (TPS/проексияи баланд/баланд), чӣ дар SQL боқӣ мемонад.
2. Шартномаҳои схемаро муайян кунед: Тасдиқи JSON Schema, 'схема'.
3. Индексҳои тарроҳӣ барои дархостҳои воқеӣ; барои маълумоти ғалоғула TTL илова кунед.
4. Калиди шардро интихоб кунед (кардиналии баланд, якрангӣ); агар лозим бошад - шаршараи минтақа.
5. Маҷмӯи нусхабардорӣ, SLO-ро хонед/нависед; сиёсати хондан-пас аз навиштан.
6. Фаъол кардани мушоҳида ва профил, огоҳӣ ба/WT кеш/оплог.
7. Ташкил кардани нусхаҳои эҳтиётӣ + PITR, кластери DR ва машқҳои муқаррарӣ.
8. Барои ҳамоҳангсозии кэшҳо ва автобусҳо ҷараёнҳои тағирёбанда/Outbox пайваст кунед.
9. Маҳдуд кардани андозаи ҳуҷҷат ва лона; Амалӣ кардани саҳифа аз рӯи курсор.
10. Сиёсати ҷудогона барои PII/иҷорагирон, рамзгузорӣ, аудит.


Анти-намунаҳо

"Не схема" дар маҳсулот: набудани санҷиш ва версияҳои → бетартибӣ.
Калиди Shard дар вақт/якранг - shard гарм ва p99 ноустувор.
Маҷмӯаҳои азими Joynes 'бе индексатсия/пагинатсия.
Амалиётҳоро дар ҳама ҷо истифода баред - ҳосилнокии гумшуда.
Набудани TTL/нигоҳдорӣ барои гузоришҳо → афзоиши ҳаҷм ва арзиш.
Инвариантҳои муҳими пулиро танҳо дар Монго бидуни номутобиқатии қатъӣ нигоҳ доред.


Натиҷаҳо

MongO DB воситаи пуриқтидор барои доменҳои тағйирёбандаи IGaming: профилҳо, феҳристҳо, телеметрия, пешгӯиҳо ва фардикунонӣ мебошад. Калиди муваффақият нақшаи шартнома ва санҷиш, индексатсияи оқилона, калиди хуби интихобшуда, нигаронии огоҳона барои хондан/навиштан, тағир додани ҷараёнҳо барои ҳамгироӣ ва интизоми қатъии амалиётӣ (мушоҳида, нусхабардорӣ, DR) мебошад. Дар якҷоягӣ бо ядрои SQL ва автобуси ҷараён, ин ба платформа интерфейсҳои зуд ва устуворӣ барои қуллаҳои мусобиқа медиҳад.

Contact

Тамос гиред

Барои саволҳо ё дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Оғози интегратсия

Email — муҳим аст. Telegram ё WhatsApp — ихтиёрӣ.

Номи шумо ихтиёрӣ
Email ихтиёрӣ
Мавзӯъ ихтиёрӣ
Паём ихтиёрӣ
Telegram ихтиёрӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиёрӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.