PostgreSQL nima? MySQL dan farqi, qachon PostgreSQL tanlash kerak

~15 daq · PostgreSQL · Kirish va O'rnatish

Muammodan boshlaylik

Siz yangi loyiha boshlayapsiz. Foydalanuvchilar bor, mahsulotlar bor, buyurtmalar bor. Ma'lumotlarni qayerda saqlaysiz?

users.json faylda:
─────────────────────────────────────────────────
Ali, ali@mail.com, 25
Vali, vali@mail.com, 30
Soli, soli@mail.com, 22
...
10,000 ta foydalanuvchi

Fayl bilan ishlashni boshlaganda muammolar paydo bo'ladi:

  • Qidiruv — "25 yoshdan katta foydalanuvchilar" topish uchun 10,000 qatorni birma-bir o'qish kerak
  • Bir vaqtda yozish — ikkita server bir vaqtda faylga yozsa, ma'lumot buziladi
  • Munosabatlar — "Alining barcha buyurtmalari" — ikki faylni o'zingiz bog'lashingiz kerak
  • Xavfsizlik — kim nimani ko'ra olishini fayl boshqarolmaydi

Fayl yetarli emas. Bu yerda database kerak bo'ladi.


Database nima?

Database — ma'lumotlarni tartibli saqlash, tez qidirish va xavfsiz o'zgartirish uchun maxsus dastur.

┌──────────────────────────────────────┐
│           Sizning ilovangiz          │
│       (Node.js / Python / Java)      │
└──────────────┬───────────────────────┘
               │  so'rov yuboradi
               ▼
┌──────────────────────────────────────┐
│           PostgreSQL SERVER          │
│                                      │
│  • Ma'lumotlarni diskda saqlaydi     │
│  • So'rovlarni bajaradi              │
│  • Minglab ulanishni boshqaradi      │
│  • Kim nimani ko'ra olishini nazorat │
│    qiladi                            │
└──────────────────────────────────────┘

Database ikki katta turga bo'linadi: SQL va NoSQL.


SQL va NoSQL — qanday farq qiladi?

SQL — jadvallar va qoidalar

Ma'lumotlar oldindan belgilangan jadvalda saqlanadi. Har bir qator bir xil ustunlarga ega bo'lishi shart.

foydalanuvchilar:
┌────┬────────┬───────────────────┬───────┐
│ id │  ism   │       email       │  yosh │
├────┼────────┼───────────────────┼───────┤
│  1 │ Ali    │ ali@mail.com      │    25 │
│  2 │ Vali   │ vali@mail.com     │    30 │
│  3 │ Soli   │ soli@mail.com     │    22 │
└────┴────────┴───────────────────┴───────┘

Har bir foydalanuvchida id, ism, email, yosh bo'lishi shart — jadval shunday belgilangan.

NoSQL — erkin tuzilma

MongoDB kabi NoSQL bazalarda har bir yozuv o'z tuzilmasida bo'lishi mumkin:

{ id: 1, ism: "Ali", yosh: 25 }

{ id: 2, ism: "Vali",
  manzil: { shahar: "Toshkent" },   ← Ali da yo'q
  telefon: ["+998901234567"]         ← Ali da yo'q
}

Vali da manzil va telefon bor, Ali da yo'q — NoSQL buni taqiqlamaydi.

Qachon qaysi biri?

┌──────────────────────────┬──────────────────────────┐
│     SQL (PostgreSQL)     │         NoSQL            │
├──────────────────────────┼──────────────────────────┤
│ Tuzilma oldindan aniq    │ Tuzilma o'zgaruvchan     │
│ Jadvallar bog'liq (JOIN) │ Yozuvlar mustaqil        │
│ ACID kafolati            │ Tezlik va miqyos         │
│ Murakkab so'rovlar oson  │ Oddiy, tez o'qish        │
└──────────────────────────┴──────────────────────────┘

Ko'p loyihalarda ikkalasi birga ishlatiladi — asosiy ma'lumotlar PostgreSQL da, kesh va sessiya Redis da.


PostgreSQL nima?

PostgreSQL — ochiq manbali SQL database. 1996 yildan beri rivojlanmoqda. Bugun eng ishonchli va imkoniyatli database tizimlaridan biri.

Hayotiy o'xshatma

Tasavvur qiling: ombor va ombor mudiri. Oddiy fayl — o'zingiz boshqaradigan javon. Narsalarni qo'yish va olish mumkin, lekin tartib yo'q, bir vaqtda ikki kishi olsa chalkashadi.

PostgreSQL — professional ombor va tajribali mudiri. Har bir narsa o'z joyida, kim nimani ola olishini mudiri biladi, ikki kishi bir vaqtda kelsa — mudiri navbat bilan xizmat qiladi. Hujjat yo'qolmaydi, xato bo'lsa qaytariladi.


PostgreSQL vs MySQL

Ikkalasi ham SQL database. Lekin farqlar bor:

┌──────────────────────┬─────────────────┬─────────────────┐
│                      │  PostgreSQL     │     MySQL       │
├──────────────────────┼─────────────────┼─────────────────┤
│ ACID kafolati        │ To'liq ✓        │ InnoDB da ✓     │
│ JSONB (indekslash)   │ ✓               │ Cheklangan      │
│ Array tur            │ ✓               │ ✗               │
│ Window functions     │ ✓               │ 8.0 dan ✓       │
│ Full-text search     │ O'z ichida ✓    │ Cheklangan      │
│ PostGIS, pgvector    │ ✓               │ ✗               │
│ Standart SQL         │ Yaqinroq ✓      │ O'z dialekti    │
│ Shared hosting       │ Kamroq          │ Ko'p ✓          │
└──────────────────────┴─────────────────┴─────────────────┘

Nima uchun PostgreSQL kuchliroq?

MySQL tez va sodda ishlar uchun yaxshi optimallashtirilgan. PostgreSQL esa kuchli SQL standartini to'liq qo'llab-quvvatlashga qaratilgan — shu sababli murakkab so'rovlar, JSONB, array, window functions kabi imkoniyatlar PostgreSQL da yanada to'liqroq ishlaydi.


Qachon PostgreSQL tanlash kerak?

Moliyaviy ma'lumotlar — bank, to'lov, hisob-kitob. ACID to'liq kafolat beradi — server to'xtab qolsa ham pul yo'qolmaydi.

Murakkab so'rovlar — hisobotlar, statistika, bir nechta jadvalni birlashtirish. Window functions, CTE, subquery — PostgreSQL da bular to'liq ishlaydi.

JSON + jadval aralash — foydalanuvchi profili har xil maydonlarga ega, lekin buyurtmalar oddiy jadvalda. JSONB ikkalasini birlashtirib beradi.

Geografik ma'lumotlar — yetkazib berish, xarita, masofa hisoblash. PostGIS extension bilan PostgreSQL eng yaxshi tanlov.

Uzoq muddatli loyiha — standartlarga mos yozilgan SQL kod yillar o'tib ham ishlayveradi.


Tez-tez uchraydigan xatolar

"Kichik loyiha uchun PostgreSQL haddan ziyod"

Ko'pchilik shunday o'ylaydi va SQLite yoki oddiy fayldan boshlaydi. Loyiha o'sgach, ma'lumotlar ko'paygach, PostgreSQL ga ko'chirish kerak bo'ladi — bu qimmat. PostgreSQL ni boshidanoq ishlatish to'g'riroq: murakkab emas, o'rnatish oson, Docker bilan bir qator.

"NoSQL tezroq, shuning uchun yaxshiroq"

NoSQL ma'lum hollarda tezroq — oddiy kalitga qarab bitta hujjat olish. Lekin "oxirgi 30 kunda eng ko'p buyurtma bergan 10 ta foydalanuvchi" kabi so'rov NoSQL da murakkab va sekin. PostgreSQL da — bir so'rov.

MySQL dan PostgreSQL ga o'tish oson deb o'ylash

Ikkalasi ham SQL, lekin sintaksisda farqlar bor. Loyiha boshida to'g'ri tanlov qilgan ma'qul.


Xulosa

Database — ma'lumotlarni tartibli saqlash, tez qidirish va xavfsiz o'zgartirish uchun maxsus dastur. Fayldan farqi: qidiruv tez, bir vaqtda ko'p ulanish, munosabatlar, xavfsizlik.

SQL vs NoSQL — SQL jadvallar va qoidalar bilan ishlaydi, NoSQL erkin tuzilma bilan. Ko'p loyihalarda ikkalasi birga ishlatiladi.

PostgreSQL — kuchli, ochiq manbali SQL database. MySQL ga qaraganda JSONB, Array, to'liq ACID, kuchli extension ekotizimi mavjud.


Keyingi dars

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