Ma'lumotlar bazalari

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:

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)
Bu arxitektura muhim: DBMS odatda alohida jarayon (ba'zan alohida kompyuter) sifatida ishlaydi. Sizning Node.js dasturingiz unga tarmoq orqali ulanadi. Shuning uchun bitta bazaga bir nechta dastur bir vaqtda ulanishi mumkin.

Ikki katta oila: SQL va NoSQL

Ma'lumotlar bazalari ikki katta guruhga bo'linadi:

"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:

Relatsion baza "relatsion" deb atalishining sababi โ€” jadvallar bir-biri bilan bog'lana (relation) oladi. Masalan, 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.

Yana ba'zi bazalar: SQLite โ€” server talab qilmaydigan, bitta faylga saqlaydigan yengil relatsion baza (mobil ilovalar va kichik loyihalar uchun). Redis โ€” juda tez, xotirada ishlaydigan kalit-qiymat bazasi (kesh va navbatlar uchun).

Qachon qaysi birini tanlash?

Universal javob yo'q, lekin umumiy tavsiyalar quyidagicha:

Yangi boshlovchi uchun eng yaxshi maslahat: relatsion baza (PostgreSQL yoki MySQL) va SQL tilini o'rganishdan boshlang. SQL โ€” bu 50 yildan beri ishlatilayotgan, deyarli barcha kompaniyalarda kerak bo'ladigan asosiy ko'nikma. Uni bilsangiz, boshqa bazalarni ham osonroq tushunasiz.

Xulosa