Sobes.tech
Middle

Ma'lumotlar bazalari bilan ishlash kontekstida bloklar nima va ular nima uchun zarur?

sobes.tech AI

AIdan javob

Ma'lumotlar bazasidagi blokirovka qilish mexanizmlari, bir vaqtning o'zida bir nechta foydalanuvchi yoki jarayonlar tomonidan bir xil ma'lumotlarga kirishni boshqarish uchun ishlatiladi. Ular muvofiqlikni ta'minlaydi va raqobat muhitida ma'lumotlarning yaxlitligini saqlaydi.

Ular quyidagi muammolarni hal qilish uchun zarur:

  • Raqobat shartlari (Race Conditions): Operatsiyalar bajarilish tartibi yakuniy natijaga ta'sir qiladigan holat. Blokirovka qilish operatsiyalarni ketma-ket yoki ma'lumotlar uchun xavfsiz tartibda bajarilishini ta'minlaydi.
  • Noto'g'ri o'qishlar (Inconsistent Reads): Bir jarayon ma'lumotlarni o'qiyotganda, boshqasi ularni o'zgartiradi, bu esa o'rtacha yoki to'liq bo'lmagan holatga olib kelishi mumkin. Blokirovka qilish buni oldini oladi.
  • Yo'qotilgan yangilanishlar (Lost Updates): Ikki jarayon bir xil ma'lumotlarni o'qiydi, ularni o'zgartiradi va saqlaydi. So'nggi saqlash birinchi jarayonning o'zgarishlarini yozib oladi va ularni yo'qotadi. Blokirovka qilish o'zgarishlarning yo'qolishini oldini oladi.
  • Hayoliy o'qishlar (Phantom Reads): Bir transaktsiya ichida, takroriy so'rovlar boshqa jarayon qo'shgan yoki o'chirgan satrlar bilan farq qiladigan satrlar to'plamini qaytaradi.

Asosiy blokirovka turlari:

  • Ulashilgan (Shared/Read Lock): Bir nechta transaktsiyalarga bir vaqtning o'zida ma'lumotlarni o'qishga imkon beradi. Ushbu ma'lumotlarga yozish uchun blokirovkalar ruxsat etilmaydi.
  • Ekskluziv (Exclusive/Write Lock): Ma'lumotlarga monopoliyali kirishni ta'minlaydi. Faqat bitta transaktsiya ekskluziv blokirovkaga ega bo'lishi mumkin. O'qish yoki yozish blokirovkalariga ruxsat etilmaydi.

Blokirovka turli darajalarda qo'llanilishi mumkin:

  • Ma'lumotlar bazasi darajasi: Butun ma'lumotlar bazasi bloklanadi. Kam ishlatiladi.
  • Jadval darajasi: Butun jadval bloklanadi. Kamroq noaniqlik, raqobatni kamaytirishi mumkin.
  • Satir darajasi: Ma'lum bir satr bloklanadi. Ko'proq noaniqlik, yuqori raqobatni qo'llab-quvvatlaydi, ammo ko'proq resurs talab qilishi mumkin.
  • Sahifa darajasi: Ma'lumotlar sahifasi (bir nechta satrlarni o'z ichiga olgan saqlash birligi) bloklanadi. Bu jadval va satr blokirovkasi o'rtasida kompromiss.

Blokirovka qilishning amalga oshirilishi, konkret SGBDga bog'liq (masalan, InnoDB va MyISAM MySQLda turli strategiyalar, PostgreSQL va boshqalar). PHPda odatda blokirovkalarni boshqarish uchun tranzaktsiyalar ishlatiladi.

-- SQLda tranzaksiya va blokirovkadan foydalanish misoli
START TRANSACTION;

SELECT balance FROM accounts WHERE account_id = 123 FOR UPDATE;
-- FOR UPDATE, tanlangan satrga eksklyuziv blokirovkani qo'yadi

UPDATE accounts SET balance = balance - 100 WHERE account_id = 123;

COMMIT;
-- Yoki xatolik bo'lsa ROLLBACK