Bosh sahifa Wiki MongoDB

MongoDB

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:

  • bitta read;
  • bitta document atomic update;
  • join kamayishi;
  • natural aggregate boundary.

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:

  • required field;
  • BSON type;
  • range;
  • enum;
  • nested field;
  • array item.

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:

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.

Shard key:

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:

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