MongoDB nima? NoSQL vs SQL, qachon MongoDB tanlash kerak

~15 daq · MongoDB · Kirish va O'rnatish

Muammodan boshlaylik

Tasavvur qiling: siz maktab uchun talabalar ma'lumotlarini saqlash tizimi yazyapsiz. Har bir talabaning ismi, yoshi, kursi bor — hammasi bir xil tuzilishda. SQL jadvalga juda mos.

Endi bir yil o'tdi. Talabalar profil qo'shmoqchi bo'ldi: kimdir 2 ta telefon raqami, kimdir 5 ta, kimdir hech yo'q. Kimdir portfolio havolasi qo'shdi, kimdir qo'shmadi. Kimdir ko'p tillar biladi, ro'yxat uzunligi har xil.

SQL jadvalda bu qanday saqlanadi? Yangi ustun qo'shasiz, eski qatorlarda bu ustun bo'sh qoladi. Yana ustun, yana bo'sh. Yoki alohida jadval yaratib, JOIN qilasiz.

MongoDB esa bu muammoni boshqacha hal qiladi.


MongoDB nima?

MongoDB — hujjatga asoslangan (document-based) NoSQL ma'lumotlar bazasi.

SQL da ma'lumotlar jadval va qatorlarda saqlanadi — har qator bir xil ustunlarga ega bo'lishi shart.

MongoDB da ma'lumotlar collection va documentlarda saqlanadi — har document o'z tuzilishiga ega bo'lishi mumkin, birorta maydon majburiy emas (agar siz belgilamasangiz).

Document JSON formatiga o'xshaydi:

{
  "_id": "64a1f2c3b4e5f6a7b8c9d0e1",
  "ism": "Jasur",
  "yosh": 24,
  "shahar": "Toshkent",
  "telefon": ["+998901234567", "+998712345678"],
  "portfolio": "https://jasur.uz"
}

Boshqa bir document xuddi shu collectionda mutlaqo boshqacha ko'rinishi mumkin:

{
  "_id": "64a1f2c3b4e5f6a7b8c9d0e2",
  "ism": "Malika",
  "yosh": 22,
  "shahar": "Samarqand"
}

Ikkinchi documentda telefon va portfolio yo'q — bu xato emas, bu MongoDB ning tabiiy holati.


Hayotiy o'xshatma

SQL ma'lumotlar bazasini elektron jadval (Excel) deb tasavvur qiling. Har satr bir xil ustunlarga ega. Biror ustun bo'sh bo'lsa ham — ustun mavjud, joy egallaydi.

MongoDB ni esa papkalar to'plami deb tasavvur qiling. Har papkada boshqa papkalar yoki qog'ozlar bor. Biror papkada faqat ism-familiya yozilgan qog'oz, boshqasida — ism, manzil, rasmlar, hujjatlar. Papka tuzilishi papkadan papkaga o'zgaradi, lekin hammasi bir joyda saqlanadi.

Collection — papkalar joylashgan shkaf (masalan, "talabalar" shkafdagi papkalar to'plami).

Document — o'sha shkafdagi bitta papka ichidagi ma'lumotlar.


NoSQL vs SQL — asosiy farqlar

SQL (masalan, PostgreSQL) MongoDB
Ma'lumot tuzilishi Jadval + Qator Collection + Document
Schema Qat'iy (oldindan belgilangan) Moslashuvchan (flexible)
Munosabatlar Foreign key + JOIN Embedding yoki Referencing
Til SQL MongoDB Query Language
Scaling Vertical (kuchliroq server) Horizontal (ko'proq server)
ACID To'liq qo'llab-quvvatlaydi 4.0 dan beri multi-doc transaction
Qachon yaxshi Tuzilgan, o'zgarmas ma'lumotlar Moslashuvchan, tez o'zgaradigan

SQL bilan parallel ko'rsataylik:

SQL jadval:       MongoDB collection:
+---------+       { ism: "Jasur", yosh: 24 }
| ism     |       { ism: "Malika", yosh: 22, shahar: "Samarqand" }
| yosh    |
+---------+
| Jasur   |
| Malika  |
+---------+

MongoDB ning asosiy xususiyatlari

1. Flexible Schema — moslashuvchan tuzilish Bir collection ichidagi documentlar har xil maydonlarga ega bo'lishi mumkin — oldindan belgilash shart emas.

2. Nested Document — ichma-ich hujjat SQL da alohida jadval + JOIN kerak bo'lgan ma'lumotlarni MongoDB da document ichiga joylash mumkin:

{
  "ism": "Jasur",
  "manzil": {
    "shahar": "Toshkent",
    "tuman": "Chilonzor"
  }
}

3. Array qo'llab-quvvatlash Bitta maydon bir nechta qiymat saqlashi mumkin:

{
  "ism": "Jasur",
  "hobbylar": ["dasturlash", "kitob", "futbol"]
}

Qachon MongoDB, qachon SQL?

Bu savol juda muhim, chunki "hammasi uchun MongoDB" ham, "hammasi uchun SQL" ham noto'g'ri javob.

MongoDB tanlang, agar:

  • Ma'lumot tuzilishi tez-tez o'zgarsa (startup, MVP)
  • Documentlar bir-biridan farq qilsa (e-commerce: kitob, elektronika, kiyim)
  • Katta hajmdagi JSON/log ma'lumotlari bo'lsa
  • Horizontal scaling kerak bo'lsa (traffic o'sishi kutilsa)
  • Real-time ma'lumotlar: chat, notification, activity feed
  • Geospatial ma'lumotlar (koordinatalar, masofalar)
  • Content Management System (CMS) — har content turining o'z maydoni

SQL tanlang, agar:

  • Ma'lumot tuzilishi barqaror va o'zgarmas bo'lsa
  • Ko'p jadval orasida murakkab munosabatlar bo'lsa
  • Moliyaviy ma'lumotlar — bank, to'lov, buxgalteriya (ACID muhim)
  • Murakkab so'rovlar va tahlillar (reporting, analytics)
  • Team SQL yaxshi bilsa va o'zgartirishga hojat yo'q bo'lsa

Haqiqiy hayotda qanday tanlanadi?

Aksariyat zamonaviy loyihalarda ikkalasi birgalikda ishlatiladi:

  • Asosiy ma'lumotlar (foydalanuvchilar, to'lovlar) → PostgreSQL
  • Session, cache, activity log → MongoDB yoki Redis
  • Qidiruv → Elasticsearch yoki MongoDB Atlas Search

Birinchi mongosh amaliyoti

MongoDB o'rnatilgan bo'lsa, terminalda mongosh yozing:

mongosh

Keyin oddiy buyruqlar:

// Mavjud databaselarni ko'rish
show dbs

// Database yaratish yoki tanlash
use maktab

// Collection yaratish va document qo'shish
db.talabalar.insertOne({ ism: "Jasur", yosh: 24, shahar: "Toshkent" })

// Documentlarni ko'rish
db.talabalar.find()

// Natija:
// { _id: ObjectId("..."), ism: 'Jasur', yosh: 24, shahar: 'Toshkent' }

SQL bilan solishtiring:

-- SQL
CREATE TABLE talabalar (ism VARCHAR, yosh INT, shahar VARCHAR);
INSERT INTO talabalar VALUES ('Jasur', 24, 'Toshkent');
SELECT * FROM talabalar;
// MongoDB — schema oldindan shart emas
db.talabalar.insertOne({ ism: "Jasur", yosh: 24, shahar: "Toshkent" })
db.talabalar.find()

MongoDB da jadval yaratish, ustun belgilash, tip aniqlash kerak bo'lmadi. Document qo'shish bilan collection avtomatik yaratildi.



Xulosa

  • MongoDB — hujjatga asoslangan NoSQL ma'lumotlar bazasi
  • Ma'lumotlar JSON-ga o'xshash documentlarda saqlanadi
  • Schema moslashuvchan — har document har xil tuzilishda bo'lishi mumkin
  • SQL dan farqi: jadval yo'q, qator yo'q, JOIN yo'q (lekin $lookup bor)
  • Qachon MongoDB: moslashuvchan tuzilish, horizontal scaling, real-time
  • Qachon SQL: barqaror tuzilish, murakkab munosabatlar, moliya

MongoDB SQL ning raqibi emas — har birining o'z joyi bor. Yaxshi dasturchi ikkalasini ham biladi va vaziyatga qarab tanlaydi.


Keyingi dars: 2-dars — O'rnatish: Windows, Mac, Linux, Docker bilan