GH GambleHub

MongoDB we çeýe maglumat shemalary

(Bölüm: Tehnologiýalar we infrastruktura)

Gysgaça gysgaça

MongoDB - çeýe shemalar (BSON), çalt goşmalar, gorizontal masştablar we güýçli Aggregation Pipeline bolan resminama gönükdirilen ammar. "iGaming" -de oýunçylaryň profilleri, çeýe CRM kartoçkalary, wakalaryň ýazgylary, telemetriýa, akymyň materiallaşdyrylan proýeksiýalary, oýunlaryň kataloglary we frontlar üçin kesişýän çykyşlar üçin ajaýyp. Pul üýtgemeleri (gapjyklar/ledger) üçin köplenç SQL/CP-kontury galýar; MongoDB, read-model we ýokary öndürijilikli resminama ammary hökmünde ýerliklidir.


MongoDB iGaming-de iň ýokary derejäni berýär

Oýunçylaryň profilleri we sazlamalary: üýtgeýän gurluşlar (lokal sazlamalar, islegler, KYC meta-maglumatlar).
Mazmunyň/oýunlaryň/üpjün edijileriň kataloglary: kartoçkalary çalt okamak, süzgüçler, bellikler, doly tekst.
Wakalar/telemetriýa/magazinesurnallar: ýokary TPS, wagtlaýyn penjireler, TTL-saklamak.
Materiallaşdyrylan çykyşlar (CQRS): çalt ekranlar (liderbordlar, soňky hereketler, agregatlar).
Şahsylaşdyrma/aýratynlyklar onlaýn ML: Kolleksiýalardaky KV-patternler, gysga TTL.


Çeýe shemanyň ýörelgeleri: bulam-bujarlygyň ýerine düzgün-nyzam

MongoDB "shemasyz" däl - shema kodda we tassyklamada ýaşaýar.

Maslahat berilýär:

1. Şertnama ýaly shema: JSON Schema Validation kolleksiýalarda.

2. "schemaVersion" meýdany bilen resminamalary wersiýalaşdyrmak.

3. Gaty hökmany meýdanlar (id, gözleg açarlary), seýrek atributlaryň "guýrugy" - goşmaça.

4. Massiwleriň ululygyny we goşulmasyny çäklendirmek (indeksler we RAM üçin).

5. Fonda göçmek: 'schemaVersion' täzelenmeleri, şedulýerler, arka filller.

Mysal: JSON Schema Validation

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" }
}
}
}
}
}
});

Maglumatlaryň nusgasy we resminamalaryň dizaýny

"Haýyş üçin" taslamany düzüň: 1 ekran/goýma = 1 resminama ýa-da resminamalaryň kiçi toplumy.
Denormalizasiýa: kiçi içerki goşmaça resminamalary goşuň (mysal üçin, oýun üpjün edijileriniň kiçi kartoçkalary).

Baglanyşyklar vs goşulma:
  • Içerki - ýakyndan baglanyşykly we seýrek täzelenýän bölekler üçin.
  • Baglanyşyklar ('ref') - ululykda/ýygy-ýygydan täzelenmekde/gaýtadan ulanylanda.
  • Ululygyň çäklendirilmegi: resminama ≤ 16 MB; uly binarnikler - GridFS/obýekt ammarlary.
  • Audit/meta-maglumatlar: 'createdAt', 'updatedAt', 'traceId', 'tenantId', 'idempotencyKey'.

Indeksler: Okamagyň hili we latency durnuklylygy

Indeksleriň we amallaryň görnüşleri:
  • B-Tree (esasy)

Compound: Meýdanlaryň tertibi ýygy-ýygydan predikatlara we sortlara laýyk gelýär.
Prefix düzgüni: '(tenantId, playerId, createdAt)' üçin deslapky wariantlar işleýär.
Sortlama: indeksiň ahyrynda 'sort' -y göz öňünde tutuň (mysal üçin 'createdAt: -1').

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

Partial / Sparse

Ýygy-ýygydan bölejikleri çaltlaşdyrýar ('status:' pending ''), ululygyny azaldar.

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

TTL

Telemetriýa/log/wagtlaýyn fiçalar üçin - awtomatiki gutarmak.

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

Tekst/autocomplete

'text' (diller boýunça çäklendirmeler); awtomatiki doldurmak üçin - 'n-gram '/trigram meýdanlar we regex çemeleşmeleri ýa-da Atlas Search arkaly.

Indekslere garşy

"Hemme zat üçin" indeksi → ýazuw tizliginiň peselmegi.
Partial bolmasa pes kardinallyk → pes saýlama.
Köpeldiji kompoundlar.
Äpet massiwleriň içindäki meýdanlary çäksiz indeksle.


Aggregation Pipeline: çalt ekranlar we hasabatlar

'$match' → '$sort' → '$limit' -ni irki tapgyrlar hökmünde ulanyň; Indeksleriňizi "$match/ $sort".
Gözegçilik edilýän joýnlar üçin '$lookup' (ýumşak, akylly göwrümde).
'$facet' köp metrler üçin; '$unionWith' - kolleksiýalaryň birleşmesi.
'$merge '/' $out' - kolleksiýadaky netijeleri materiallaşdyrmak (read-models).

Mysal üçin: oýunçynyň soňky nyrhlary

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" }
} }
]);

Geleşikler, ylalaşyklylyk we idempotentlik

Single-document atomic - mugt atom; çylşyrymly üýtgeşikler - resminamalar boýunça bölmek hakda pikir ediň.
Multi-document transactions (ACID) - replika-setlerden bar, ýöne latency boýunça has gymmat; nokatda ulanmak.

Write Concern / Read Concern:
  • 'w: "majority"' kritiki ýazgylar üçin (latency bahasy);
  • 'readConcern:' majority '.
  • Idempotentlik: 'idempotencyKey '/' pspTx', UPSERT-amallarda ('$setOnInsert', '$inc') özboluşly açarlar.
UPSERT mysaly:
js db.wallet.updateOne(
{ playerId: "p123" },
{ $inc: { balanceCents: -5000 }, $set: { updatedAt: new Date() } },
{ upsert: true, writeConcern: { w: "majority" } }
);
💡 Pul üýtgemeleri üçin adatça SQL-ni makul bilýärler. Mongoda - diňe açarlaryň berk düzgüni/idempotentlik we çäkli amallar bilen.

Açarlary bölmek we saýlamak

MongoDB şard key boýunça şardlaýar. Saýlaw gaty möhüm:
  • Ýüküň paýlanyşy: ýokary kardinallyk we deň paýlanyş açary (mysal üçin '(tenantId, playerId)').
  • Monotonlykdan gaça duruň: 'createdAt' ýeke-täk açar → "gyzgyn" şard.
Aralyklar vs hash:
  • Hashed - ýazgylary has deň paýlaýar.
  • Ranged - aralyk soraglary üçin has gowudyr, ýöne gyzgyn guýruklara gözegçilik ediň.
  • Düzgünleşdiriji/lokalizasiýa üçin zona-şarding (tag ranges) (EU/LatAm/TR).
Mysal:
js sh.enableSharding("igaming");
db.bets.createIndex({ tenantId: 1, playerId: 1, _id: "hashed" });
sh.shardCollection("igaming.bets", { tenantId: 1, playerId: 1, _id: "hashed" });
Antipatterns:
  • Şard-açar pes kardinallygy boýunça ('status') - şardlaryň ýoýulmagy.
  • Şardlanan kolleksiýalaryň arasynda bir açar bilen şardlanmazdan ýygy-ýygydan '$lookup' bolýar.
  • Üýtgeýän şard key (üýtgetmek kyn we gymmat).

Replika-setler, okamak we read-after-write syýasaty

Replika-set = HA we geleşikleriň esaslary.

Read Preference:
  • 'primary' kritiki read-after-write üçin;
  • 'primaryPreferred '/' secondary' - analitik/kritiki däl.
  • Read/Write concern SLO we latency býudjeti bilen ylalaşyň.

Change Streams, CDC we Integration

Change Streams: Goýma/Täzelenme/Aýyrma abunalygy:
  • Kesh gatlaklaryny sinhronlamak (Redis),
  • CRM/bildiriş tetikleýjileri,
  • OLAP-a ýüklemek (ClickHouse/Pinot),
  • reaktiw ekranlar.
  • Outbox-pattern: möhüm domenler üçin wakalary aýratyn kolleksiýada çap ediň, soňra konnektor okaýar we tekere ýaýlyma berýär (Kafka). Bu bolsa integrasiýalaryň öňünden aýdyp boljakdygyny ýokarlandyrýar.

Synlamak we SLO

SLO: p99 kartoçkalary okamak ≤ 10-20 ms; wakalary goşmak ≤ 20-40 ms; şardlaryň arasyndaky leytensiniň tapawudy X%; elýeterlilik ≥ 99. 9%.
Metrikler: opp-latentlik, queue depth,% umps ikinjisine, cache/WT statistikasyna, page faults, lock-waits, açyk kursorlaryň/birikmeleriň sany.
Profillemek: 'system. profile ',' explain ("executionStats") ', kolleksiýalary/indeksleri bloklamak.
Alertler: WT cache pressure ösüşi, haýal amallar, indekse girmedik soraglaryň ösüşi, ikinji derejeli yza galmak, çunk migrations/balanslaýjy.


Öndürijilik we sazlama

WiredTiger Cache: 50% RAM ~ - profil üçin tassyklaň.
Compression: kolleksiýalar üçin snappy/zstd, magazinesurnallar üçin zstd - CPU/IO balansy.
Telemetriýa üçin Batch goşundylary we bulkWrite.
Projection ('{field: 1}') "galyň" resminamalary çekmezlik üçin.
Limit/Skip: Ululardan gaça duruň 'skip' → kursor/marker ('createdAt/_ id').
"Halkaly" bloglar üçin kolleksiýalary kapped.


Howpsuzlyk we laýyklyk

Auth/RBAC: kolleksiýadaky rollar/DB, iň az zerur artykmaçlyklar.
Tranzitde TLS, diskde şifrlemek (FLE/at-rest).
PII syýasaty: maskalanmak/lakamlaşdyrmak, duýgur meýdanlar üçin aýratyn kolleksiýalar.
Köp tenantlyk: prefiksler/aýry-aýry DB/kolleksiýalar, 'tenantId' boýunça süzgüçler, programmada RLS meňzeş gatlaklary ulanyp bolýar.
Audit: möhüm kolleksiýalardaky amallaryň auditini goşuň.


Arkalar, PITR we DR

"Point-in-Time Recovery" üçin "snapshots" + oplog-backup томlarynyň suratlary.
DR üçin başga sebitdäki replika-set; yzygiderli dikeldiş maşklary.
Oplogyň ösüşine gözegçilik etmek (PSP webhuklar/ýaryşlar).
Şard-klasterlerde - config-serwer bilen ylalaşylan ekaplar.


Galan arhitektura bilen integrasiýa

CQRS: toparlar SQL (pul), wakalary urýarlar → MongoDB-de Materialized Views.
Event-Streaming: Kafka/Pulsar teker hökmünde, Mongo - sink/source arkaly konnektorlar we Change Streams.
Redis: ultra pes gizlinlik gatlagy ýaly gapdalynda (keş/hasaplaýjy).
OLAP: uzyn skanlar we BI üçin ClickHouse/Pinot-a düşürmek.


Giriş barlagy

1. Domenleri düzüň: Mongo (çeýe/ýokary TPS/proýeksiýa), SQL-de galan zat.
2. Shema contracts: JSON Schema Validation, 'schemaVersion' kesgitläň.
3. Hakyky haýyşlar üçin indeksleri düzüň; "şowhunly" maglumatlar üçin TTL goşuň.
4. Şard key saýlaň (ýokary kardinallyk, birmeňzeşlik); zerur bolsa - zone-şarding.
5. SLO-nyň aşagyndaky replika-seti, Read/Write konserni sazlaň; read-after-write syýasaty.
6. Gözegçilik we profil ,/WT cache/oplog indekslerine aladalary goşuň.
7. PYTR, DR-klaster we yzygiderli türgenleşikleri guraň.
8. Keş we tekerleri sinhronlamak üçin "Change Streams/Outbox" -y birikdiriň.
9. Resminamalaryň ululygyny we goşulmasyny çäklendiriň; kursor boýunça paginasiýany giriziň.
10. PII/tenantlar üçin aýry-aýry syýasatlar, şifrlemek, audit.


Antipattern

Önümde "shema ýok": tassyklamanyň we wersiýalaryň ýoklugy → bulam-bujarlyk.
Wagt açary/monoton - gyzgyn we durnuksyz p99.
Joynlar '$lookup' indekssiz/paginasiýasyz ullakan toplumlarda.
Amallary hemme ýerde ulanmak - öndürijiligi ýitirmek.
Bloglar üçin TTL/retensiýanyň ýoklugy → göwrümiň we bahanyň ýokarlanmagy.
Möhüm pul üýtgemelerini diňe Mongoda berk idempotentlik bolmazdan saklaň.


Netijeler

MongoDB - iGaming çeýe domenleri üçin güýçli gural: profiller, kataloglar, telemetriýa, proýeksiýa we şahsylaşdyrma. Üstünlik üçin açar - shema-şertnamalar we tassyklama, oýlanyşykly indeksasiýa, başarnykly saýlanan shard key, aňly Read/Write Concern, integrasiýa üçin Change Streams we berk iş düzgüni (syn etmek, bellikler, DR). SQL-ýadro we akym tekeri bilen bilelikde bu platforma çalt interfeýsler we ýaryş belentliklerine durnuklylyk berýär.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.