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).
- 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.
- 'w: "majority"' kritiki ýazgylar üçin (latency bahasy);
- 'readConcern:' majority '.
- Idempotentlik: 'idempotencyKey '/' pspTx', UPSERT-amallarda ('$setOnInsert', '$inc') özboluşly açarlar.
js db.wallet.updateOne(
{ playerId: "p123" },
{ $inc: { balanceCents: -5000 }, $set: { updatedAt: new Date() } },
{ upsert: true, writeConcern: { w: "majority" } }
);
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.
- 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).
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.