ACID tamoyillari: Atomicity - Atomlilik.

ACID tamoyillari: Atomicity - Atomlilik.

ACID tamoyillari: Atomicity - Atomlilik.

Avvalgi maqolamizda biz Transaction nimaligi haqida gaplashgan edik. Endi Transactional DB(transaction orqali ishlaydigan DB)ni sifatlaydigan tamoyillar haqida gaplashamiz. Ulardan birinchisi bu Atomicity — ya’ni atomlilik. Bu nima degani? Atomlilik bu — bo’linmaslik. Ya’ni qaysidir amal yoki amallar to’plami bo’linmas holda amalga oshirilishi bu dasturlashdagi atomicity hisoblanadi. Transactionning atomliligi bu transaction yoki to’liq bajariladi yoki umuman bajarilmaydi deganidir. Avvalgi maqolamizdagi oxirgi ko’rsatilgan qismga yana to’xtalib o’taylik:

Tasavvur qilaylik, bizdan 10 ta telefon sotib olindi. Buni ikkala tableda ham ko’rsatishimiz kerak bo’ladi. Ya’ni, PRODUCTS dagi quantityni 10taga kamaytiramiz, SALES table’ga esa bitta row(qator) qo’shamiz.

UPDATE PRODUCTS SET quantity = quantity - 10 WHERE id = 1;
INSERT INTO SALES(productId, price, quantity) VALUES(1, 999.99, 10);

Ushbu operatsiyalarni istalgan biri xato tufayli bajarilmay qolsa, u holda ikkinchisi ma’nosini yo’qotadi. Shu sababli, bu operatsiyalar yoki birga bajarilishi kerak yoki umuman bajarilmasligi kerak. Buni amalga oshirish uchun ushbu operatsiyalarni bitta transaction ichiga joylashtiramiz. Agar ularni bitta transaction ichiga joylamasak, u holda, DB ularni alohidadan transaction ichiga joylab execute qiladi.

 BEGIN TRANSACTION;
  UPDATE PRODUCTS SET quantity = quantity - 10 WHERE id = 1;
  INSERT INTO SALES(productId, price, quantity) VALUES(1, 999.99, 10);
COMMIT;

Endi ushbu ikki operatsiyani ikkisi ham bajarilishi yoki ikkisi ham bajarilmasligidan havotir olmasak ham bo’ladi. Sababi, bittasi xato tufayli bajarilmay qolsa, transaction commit bo’lmay(bazaga yozilmay) qoladi va oldingi bajarilgan operatsiyalar rollback bo’lib ketadi(orqaga qaytarilib ketadi).
Ushbu holatda birinchi yoki ikkinchi operatsiyamiz qandaydir xato tufayli bajarilmay qolishi mumkin. Misol uchun:
1. query xato yozilishi
2. ba’zi bir qo’yilgan validation‘lar bajarilmay qolishi
3. birinchi operatsiya bajarilishi bilan server o’chib qolishi va hokazo.
Yuqoridagi holatlar sodir bo’lganda operatsiyalardan biri o’z ma’nosini yo’qotadi. Shu sababli, ushbu operatsiyalar yaxlit(atomic) holda bajarilishi maqsadga muvofiq bo’ladi. Ushbu holatni tekshirish uchun quyidagi amallarni bajaramiz:
1. DBga 2ta sessiya ochamiz;
2. Birinchi sessiya orqali quyidagi amallarni bajaramiz:

BEGIN TRANSACTION;
SELECT * FROM PRODUCTS;UPDATE PRODUCTS SET quantity = quantity - 10 WHERE id = 1;
 INSERT INTO SALE(productId, price, quantity) VALUES(1, 999.99, 10); - ushbu qatordan xato qaytadi.

3. Ikkinchi sessiya orqali quyidagi amalni bajaramiz:

SELECT * FROM PRODUCTS;

Ikkinchi sessiyada PRODUCTS table’dagi quantity ustunini qiymati o’zgarmaganini ko’ramiz. Bunga sabab yuqoridagi transaction hali commit bo’lmadi. Birinchi sessiyaga COMMIT; buyrug’ini bersak ham, DBda hech qanday o’zgarish sodir bo’lmaydi. Ya’ni transaction‘dagi o’zgarishlar DBga apply qilinmadi. Transaction o’z-o’zidan ROLLBACK; buyrug’ini bajaradi. Bu degani, operatsiyalarimizni atomliligi ta’minlandi.

ACID tamoyillaridan birinchisi bo’lmish Atomicity‘ning asosiy ma’nosi — bu Abortability(Bekor qilinish) ya’ni, bir necha operatsiyalar bajarilish paytida istalgan birida xato sodir bo’lishi ortidan barcha operatsiyalarni bekor qilina olishi.

Keyingi maqolamizda ACID tamoyillarining ikkinchisi, CONSISTENCY — doimiylik haqida gaplashamiz.

Telegram kanal

Ma‘lumotlar Ombori
ACID tamoyillari: Atomicity - Atomlilik.