Ma'lumotlar bazasi nima?
Har qanday jiddiy dastur ma'lumotni saqlashi kerak: foydalanuvchilar, buyurtmalar, xabarlar, rasmlar haqidagi ma'lumot. Dastur o'chib qayta ishga tushganda ham bu ma'lumot yo'qolmasligi shart. Aynan shu vazifani ma'lumotlar bazasi (database) bajaradi. Ushbu darsda ma'lumotlar bazasi nima ekanligini, nima uchun oddiy faylda saqlashdan yaxshiroq ekanligini va qanday turlari borligini o'rganamiz.
Nima uchun ma'lumotlar bazasi kerak?
Aytaylik, siz kichik dastur yozdingiz va foydalanuvchilar ro'yxatini oddiy matnli faylda saqlamoqchisiz. Boshida bu ishlaydi. Lekin dastur o'sgani sayin muammolar paydo bo'ladi:
- Qidiruv sekin โ 1 million foydalanuvchi orasidan bittasini topish uchun butun faylni boshdan-oxir o'qib chiqishga to'g'ri keladi;
- Bir vaqtda yozish xavfli โ ikki foydalanuvchi bir vaqtda faylni o'zgartirsa, ma'lumot buzilishi mumkin;
- Butunlikni tekshirish qiyin โ masalan, bir email ikki marta ro'yxatdan o'tmasligini kafolatlash uchun har safar butun faylni tekshirish kerak;
- Qisman yozuv โ fayl yozilayotganda dastur o'chib qolsa, yarim yozilgan buzuq ma'lumot qoladi;
- Murakkab so'rovlar โ "eng ko'p buyurtma bergan 10 mijozni topish" kabi so'rovlarni faylga qo'llash deyarli imkonsiz.
Ma'lumotlar bazasi bu muammolarning barchasini hal qilish uchun maxsus yaratilgan. U ma'lumotni tez qidirish, xavfsiz saqlash, bir vaqtda ko'plab foydalanuvchilarga xizmat qilish va murakkab so'rovlarni bajarish uchun optimallashtirilgan.
DBMS โ ma'lumotlar bazasini boshqarish tizimi
Aslida "ma'lumotlar bazasi" deganda biz ikki narsani nazarda tutamiz. Birinchisi โ ma'lumotning o'zi (jadvallar, yozuvlar). Ikkinchisi โ DBMS (Database Management System, ma'lumotlar bazasini boshqarish tizimi) โ bu ma'lumotni saqlaydigan, o'qiydigan va boshqaradigan dastur.
PostgreSQL, MySQL, MongoDB โ bularning barchasi aslida DBMS'lardir. Ular alohida dastur (ko'pincha server) sifatida ishlaydi. Sizning dasturingiz DBMS'ga so'rov (query) yuboradi, DBMS esa javob qaytaradi:
Sizning dasturingiz ---so'rov---> DBMS (server) <---> Disk (ma'lumot)
(Node.js) <---javob---- (PostgreSQL)
Ikki katta oila: SQL va NoSQL
Ma'lumotlar bazalari ikki katta guruhga bo'linadi:
- Relatsion (SQL) bazalar โ ma'lumotni jadvallar ko'rinishida saqlaydi. Har bir jadval qat'iy tuzilishga (sxemaga) ega. Ular bilan ishlash uchun SQL tili ishlatiladi. Misollar: PostgreSQL, MySQL, SQLite, Oracle, SQL Server;
- NoSQL bazalar โ ma'lumotni jadval emas, boshqa ko'rinishlarda (hujjatlar, kalit-qiymat juftliklari, graflar) saqlaydi. Tuzilish erkinroq. Misollar: MongoDB (hujjatli), Redis (kalit-qiymat), Cassandra.
"SQL" so'zi Structured Query Language (tuzilgan so'rovlar tili) ma'nosini bildiradi. Bu โ relatsion bazalar bilan gaplashish uchun standart til. "NoSQL" esa "SQL emas" degani, ya'ni SQL tilidan foydalanmaydigan bazalarning umumiy nomi.
Relatsion baza: jadval, qator, ustun
Relatsion bazani tushunish uchun Excel jadvalini tasavvur qiling. Ma'lumot jadval (table) ko'rinishida saqlanadi. Masalan, users (foydalanuvchilar) jadvali:
users jadvali:
id | name | email | age
---- + -------- + -------------------- + -----
1 | Ali | ali@mail.com | 25
2 | Vali | vali@mail.com | 30
3 | Guli | guli@mail.com | 22
Bu jadvalning asosiy qismlari:
- Ustun (column) โ vertikal to'plam. Yuqorida
id,name,email,ageโ bular ustunlar. Har bir ustunning nomi va turi bor (masalan,ageโ butun son); - Qator (row) yoki yozuv (record) โ gorizontal to'plam. Bitta qator bitta obyektni tasvirlaydi. Yuqoridagi 1-qator โ bu "Ali" ismli foydalanuvchi;
- Katak (cell) โ ustun va qator kesishmasidagi bitta qiymat (masalan, 1-qator,
nameustuni = "Ali"); - Sxema (schema) โ jadvalning tuzilishi: qanday ustunlar bor, ularning turlari qanday. Sxema oldindan belgilanadi.
orders (buyurtmalar) jadvali users jadvaliga bog'lanib, qaysi buyurtma qaysi foydalanuvchiga tegishli ekanligini ko'rsatishi mumkin. Bu haqda JOIN darsida batafsil gaplashamiz.NoSQL baza: hujjat ko'rinishi
NoSQL bazalarning eng mashhuri โ MongoDB. U ma'lumotni jadval emas, hujjat (document) ko'rinishida saqlaydi. Hujjat โ bu JSON obyektiga juda o'xshash tuzilma:
{
"_id": 1,
"name": "Ali",
"email": "ali@mail.com",
"age": 25,
"hobbies": ["futbol", "kitob"],
"address": { "city": "Toshkent", "street": "Amir Temur" }
}
E'tibor bering: hujjat ichida massiv (hobbies) va ichma-ich obyekt (address) bemalol saqlanishi mumkin. Bu SQL jadvalida murakkab bo'lardi. Bundan tashqari, bir hujjatda bir maydon bo'lsa, boshqasida bo'lmasligi mumkin โ tuzilish qat'iy emas (bu "schemaless" deyiladi).
Bir turdagi hujjatlar to'plami collection (kolleksiya) deb ataladi. SQL bilan taqqoslaganda:
SQL NoSQL (MongoDB)
---------- ----------------
jadval (table) kolleksiya (collection)
qator (row) hujjat (document)
ustun (column) maydon (field)
Mashhur bazalar
PostgreSQL
Kuchli, ochiq kodli relatsion baza. Ilg'or imkoniyatlari, ishonchliligi va standartlarga rioya qilishi bilan mashhur. JSON ma'lumotini ham qo'llaydi, ya'ni ham relatsion, ham qisman NoSQL vazifasini bajaradi. Ko'p tajribali backend dasturchilar birinchi tanlov sifatida PostgreSQL'ni tavsiya qiladi.
MySQL
Yana bir mashhur ochiq kodli relatsion baza. Uzoq tarixga ega, sozlash oson, veb-hostinglarda keng tarqalgan (WordPress kabi tizimlar undan foydalanadi). PostgreSQL bilan juda o'xshash, farqlari asosan ilg'or imkoniyatlarda.
MongoDB
Eng mashhur hujjatli NoSQL baza. Ma'lumot JSON-simon ko'rinishda saqlanadi, tuzilish erkin. Tez prototip yasash va tuzilishi tez o'zgaradigan loyihalar uchun qulay. Node.js dunyosida keng ishlatiladi, chunki ma'lumot ko'rinishi JavaScript obyektlariga juda o'xshaydi.
Qachon qaysi birini tanlash?
Universal javob yo'q, lekin umumiy tavsiyalar quyidagicha:
- Ma'lumotingiz aniq tuzilishga ega bo'lsa (foydalanuvchilar, buyurtmalar, to'lovlar) va ular orasida ko'p bog'lanishlar bo'lsa โ relatsion baza (PostgreSQL) tanlang;
- Pul, buyurtma, moliyaviy operatsiyalar bilan ishlasangiz, ya'ni ma'lumot butunligi juda muhim bo'lsa โ relatsion baza (u "tranzaksiyalar" orqali ma'lumot butunligini kafolatlaydi);
- Ma'lumot tuzilishi noaniq yoki tez o'zgaradigan bo'lsa, ichma-ich murakkab obyektlar ko'p bo'lsa โ MongoDB qulayroq bo'lishi mumkin;
- Juda tez o'qish/yozish kerak bo'lsa (kesh, sessiyalar) โ Redis kabi xotira bazasi.
Xulosa
- Ma'lumotlar bazasi โ ma'lumotni tez, xavfsiz va ishonchli saqlash uchun maxsus tizim; oddiy fayldan ancha ustun;
- DBMS โ ma'lumotni boshqaradigan dastur (server); dasturingiz unga so'rov yuboradi;
- Relatsion (SQL) bazalar ma'lumotni jadvallarda saqlaydi (qator, ustun, sxema) va SQL tilida boshqariladi;
- NoSQL bazalar (masalan MongoDB) ma'lumotni hujjatlar (JSON-simon) ko'rinishida, erkin tuzilishda saqlaydi;
- Mashhur bazalar: PostgreSQL, MySQL (relatsion), MongoDB (hujjatli), Redis (kalit-qiymat);
- Boshlovchi uchun eng foydali yo'l โ PostgreSQL/MySQL va SQL tilini o'rganish.