ACID tamoyillari. Isolation — Izolyatsiya. Asosiy tushunchalar.

Jakhongir Soataliev
2 min readSep 7, 2023

--

Ushbu kichik maqolamizda biz ISOLATION tamoyilini o’rganish uchun zarur bo’ladigan tushunchalarni ko’rib chiqamiz. Aslida ular tushunchagina emas, balki muammolar hamdir.

  1. DIRTY READ
  2. NON REPEATABLE READ
  3. PHANTOM READ
  4. SERIALIZATION ANOMALY

DIRTY READ — bu pastkashona o’qish. Ya’ni, bir transaction ikkinchi transaction-dagi hali commit bo’lmagan o’zgarishlarni o’qishi.

Bunda sinf xonadagi o’quvchi boshqa o’quvchini daftarini o’qituvchiga tekshirtirmasidan oldin o’qishidek gap. Shu sababli, ushbu tushunchaning nomi DIRTY READ. Bu aslida muammo hisoblanadi. Sababi, transaction commit bo’lishi ham, rollback bo’lishi ham mumkin. Commit bo’lmay qolsa, unda data inconsistency(ma’lumotlar nomutanosibligi) yuzaga keladi.

NON REPEATABLE READ —(qaytarib bo’lmaydigan o’qish) shuni anglatadiki, transaction-ning turli bosqichlarida query qilingan(query orqali so’ralgan) qatorlardan biri boshqa transaction-lar tomonidan update qilinishi mumkin.

Aniqroq aytadigan bo’lsak, bir marta o’qilgan qatorni boshqa transaction update qilgandan keyin o’sha qator qayta o’qilganda o’zgarib qoladi. Misol uchun, order-lar birinchi select buyrug’i orqali chaqirilganda id-si 1ga teng bo’lgan order-ning value-si 13000 deylik. Boshqa transaction uni 14000ga update qildi. Shunda order-larni bir transaction ichida qayta select qilganimizda id-si 1ga teng order-ning value-si 14000 ekanini ko’ramiz. Bu ayni NON REPEATABLE READ hisoblanadi.

PHANTOM READ —(arvohcha o’qish) degani, transaction-ning turli bosqichlarida select qilingan qatorlar soni o’zgarib qoladi.

Misol uchun order-larni select qildik. Keyin esa, transaction tugallanmasidan, boshqa transaction order table-ga bitta order insert qildi(qo’shib qo’ydi). Keyingi select buyrug’ida yuqoridagi qo’shilgan order ham chiqib keladi. Bu PHANTOM READ hisoblanadi.

SERIALIZATION ANOMALY — (serialization anomaliyasi) bu bir nechta transaction-larni bitta transaction orqali bajarilishining natijasi, ularning istalgan ketma-ketlikda bajarilishi natijasidan farqlanishidir.

Misol uchun order table-da ‘NEW’ va ‘FAILEDstatus-ga ega order-lar bor. Birinchi transaction orqali ‘NEWorder-larni value-larini yig’indisini olib yangi ‘FAILEDorder-ni table-ga insert qilaylik. Ikkinchi transaction orqali esa, xuddi shu ishni teskarisini bajaraylik, ya’ni barcha ‘FAILEDorder-larning value-larining yig’indisini olib bitta ‘NEWorder yasaylik. Ikkala transaction-ni bir transaction orqali commit qilish natijasi bilan ularni ketma-ketlikda alohidadan commit qilish natijalari turlicha chiqadi. Masalan: DB-dagi ‘FAILEDorder-lar value-larini yig’indisi: 30, ‘NEW’-larniki esa 20; Agar yuqoridagi amallarni bitta transaction orqali amalga oshirsak, bitta ‘NEWorder-ni 30 value bilan, bitta ‘FAILED’ orderni 20 value bilan yasaymiz. Bunda ‘NEWorder-lar yig’indisi ham, ‘FAILEDorder-lar yig’indisi ham bir xil — 50 chiqadi. Endi, ularni ketma-ket bajarishga harakat qilib ko’ramiz. ‘NEWorder-larni yig’indisi orqali bitta ‘FAILEDorder yasaymiz. Shunda ‘FAILEDorder-lar yig’indisi 50, ‘NEWorder-lar yig’indisi 20 bo’ladi. Endi, ‘FAILEDorder-lar yig’indisi orqali bitta ‘NEW’ order yasaymiz. Jami ‘NEWorder-lar yig’indisi — 70 bo’ladi. Endi ketma-ketlikni o’zgartiramiz. U holda, ‘FAILED’ — 80, ‘NEW’ — 50 bo’ladi. Ya’ni, transaction-larni ketma-ket bajarish bilan ularni bittada bajarishning natijalari farqli chiqib qoladi. Ayni shu narsa, SERIALIZATION ANOMALY deyiladi.

Keyingi maqolamizda ISOLATION nimaligi va uning darajalari haqida gaplashamiz.

Telegram kanal

--

--

Jakhongir Soataliev

Senior Software Engineer @ EPAM Systems | Leader of Java Community Uzbekistan