MongoDB — ma’lumotlarni JSONga o‘xshash BSON documentlar ko‘rinishida saqlaydigan document-oriented NoSQL database. U flexible schema, nested object, array, index, aggregation va distributed replication imkoniyatlarini beradi.
MongoDB’da table o‘rniga collection, row o‘rniga document tushunchasi ishlatiladi.
Document
Document field va qiymatlardan iborat.
Misol:
{
"_id": 15,
"name": "Farrukh",
"skills": ["Python", "Django"],
"profile": {
"country": "UZ",
"active": true
}
}
Document nested object va arraylarni tabiiy saqlaydi.
BSON
MongoDB documentlarni BSON binary formatida saqlaydi.
BSON JSONga o‘xshash, ammo qo‘shimcha type’larni qo‘llaydi:
- integer turlari;
- decimal;
- date;
- binary;
- object ID;
- regular expression;
- timestamp.
Type mapping programming language driveriga bog‘liq.
Collection
Collection o‘xshash documentlar guruhidir.
Bir collectiondagi documentlar aynan bir xil fieldlarga ega bo‘lishi shart emas.
Biroq application uchun barqaror schema va validation talab qilinadi.
Nazoratsiz schema flexibility data sifatini pasaytirishi mumkin.
_id
Har document unique _id fieldiga ega.
Agar application bermasa driver yoki server ObjectIdga o‘xshash qiymat yaratishi mumkin.
_id uchun primary index avtomatik mavjud.
Tashqi public ID va ichki _id bir xil bo‘lishi shart emas.
Embedded document
Bog‘liq data parent document ichiga joylashtiriladi.
Masalan, order itemlari order ichida.
Afzalliklari:
Kamchiligi — document hajmi va mustaqil item querylari.
Reference
Bog‘liq entity ID orqali alohida collectionga reference qilinadi.
Masalan:
orders.user_id → users._id
Bu data takrorlanishini kamaytiradi.
Foreign key database tomonidan avtomatik tekshirilmasligi mumkin.
Application referential integrityni boshqaradi.
Schema validation
Collection uchun document structure qoidalari belgilanishi mumkin.
Tekshiruvlar:
Validation eski documentlar va rolling deployment bilan compatible o‘zgartiriladi.
Index
MongoDB:
- single field;
- compound;
- multikey;
- text;
- geospatial;
- hashed;
- partial;
- TTL
indexlarni qo‘llashi mumkin.
Har index write va storage xarajatini oshiradi.
Query plan bilan haqiqiy index foydalanishi tekshiriladi.
Multikey index
Array field indexlanganda array elementlari uchun index entrylar yaratiladi.
Bu array ichidagi qiymat bo‘yicha queryni tezlashtiradi.
Bitta compound indexdagi bir nechta array field kombinatsiyasi cheklovlarga ega bo‘lishi mumkin.
Query
Document fieldlari bo‘yicha filter yoziladi.
status = active
profile.country = UZ
amount > 100
Nested field dot notationga o‘xshash syntax bilan olinadi.
Array uchun element, size va expression querylari mavjud.
Projection
Natijada faqat kerakli fieldlar qaytariladi.
Bu:
- network;
- serialization;
- maxfiy field;
- document hajmi
ni kamaytiradi.
Index queryni to‘liq qoplasa collection documentiga murojaat qilmaslik mumkin.
Aggregation pipeline
Documentlar bosqichma-bosqich qayta ishlanadi.
Bosqichlar:
- match;
- project;
- group;
- sort;
- unwind;
- lookup;
- limit;
- windowga yaqin operationlar.
Filter pipeline boshida bo‘lsa keyingi bosqichlar kamroq document oladi.
$lookup
Boshqa collection bilan joinga o‘xshash birlashtirish bajaradi.
Bu reference modelda ishlatiladi.
Katta distributed join qimmat bo‘lishi mumkin.
Data modeling query patternga mos tanlanadi.
Atomicity
Bitta document update odatda atomic.
Bir document ichiga bog‘liq fieldlarni joylashtirish transaction ehtiyojini kamaytiradi.
Ko‘p document transactionlari mavjud bo‘lishi mumkin, ammo ular coordination va performance xarajatiga ega.
Replica set
Bir nechta MongoDB node replication guruhi sifatida ishlaydi.
Bitta primary write qabul qiladi.
Secondary node’lar operation logni replay qiladi.
Primary ishlamay qolsa election orqali secondary yangi primary bo‘lishi mumkin.
Write concern
Write qachon muvaffaqiyatli hisoblanishini belgilaydi.
Variantlar:
- primary qabul qildi;
- ma’lum replica soni;
- majority;
- journal tasdig‘i.
Kuchli concern durabilityni oshiradi, latencyga ta’sir qiladi.
Read concern va preference
Read qaysi consistency darajasida va qaysi node’dan bajarilishini boshqaradi.
Secondary read stale data qaytarishi mumkin.
Critical write’dan keyingi read primary yoki kuchliroq concern talab qiladi.
Sharding
Katta collection shard key bo‘yicha cluster bo‘ylab taqsimlanadi.
- cardinality;
- distribution;
- query routing;
- monotonicity;
- hotspot
bo‘yicha tanlanadi.
Shard key bo‘lmagan query scatter-gatherga aylanishi mumkin.
Change stream
Collection yoki database o‘zgarishlarini event oqimi sifatida kuzatish mumkin.
Bu:
- cache invalidation;
- search indexing;
- audit;
- event integration
uchun ishlatiladi.
Resume token consumerga uzilishdan keyin davom etishga yordam beradi.
Document hajmi
Bitta document platforma belgilagan maksimal hajmdan oshmasligi kerak.
Cheksiz o‘sadigan array, masalan barcha event tarixini bitta user documentida saqlash, update va readni qimmatlashtiradi.
Bunday data alohida collectionga vaqt yoki owner key bilan ajratiladi.
Connection pool
Driver connection pool orqali serverlar bilan ishlaydi.
Topology o‘zgarganda driver primary’ni qayta topadi.
Juda ko‘p application instance va katta pool database connection limitiga ta’sir qiladi.
Timeoutlar server selection, connection va operation bo‘yicha alohida boshqariladi.
Array update
Array elementini position, filter yoki operator orqali yangilash mumkin.
Cheksiz array o‘sishi documentni kattalashtiradi va update xarajatini oshiradi.
Tarixiy eventlar alohida collectionda saqlanadi.
Backup
Replica’dan snapshot olish primary yukini kamaytirishi mumkin, ammo backup clusterning consistent log nuqtasi bilan bog‘lanadi.
Restore va point-in-time jarayoni muntazam sinovdan o‘tkaziladi.
Bog‘liq tushunchalar
Document database, BSON, Collection, Document, Embedded document, Aggregation pipeline, Replica set, Sharding, ObjectId, Change stream