3.1 ACIDning Paydo Bo'lishi
ACID qisqartmasi 1983 yilda Theo Haerder va Andreas Reuter maqolasida paydo bo'lgan. Bu atomarlik, yaxlitlik, izolyatsiya va barqarorlik uchun akronim Yanada Tarjimasiz: https://sinonim.org/s/%D0%B4%D1%8E%D1%80%D0%B0%D1%86%D0%B8%D1%8F, bu to'rtta xususiyatlar bazalaridagi tranzaksiyalarda bajarilishi kerak. Matnni sodda va tushunarli qilish uchun, ushbu maqolaning parchasi tarjimasini keltiraman (kichik o'zgartirishlar amalga oshirildi). Ushbu parcha bank tranzaksiyasi misolini keltiradi, bunda pul bir hisobdan boshqa bir hisobga o'tkaziladi.
Tranzaksiyaning atomarlik, yaxlitlik, izolyatsiya va barqarorligini ta'minlash uchun, tranzaksiyaning barcha tafsilotlarini tekshirish va tasdiqlash kerak. Tasdiqlashdan so'ng, ACID tizimi to'lovdan oldin oxirgi yaxlitlikni tekshiradi va noto'g'ri o'zgarishlardan himoya qiladi.
Tranzaksiya konsepsiyasi $BEGIN_TRANSACTION va $COMMIT_TRANSACTION orasidagi barcha o'zgarishlarni to'liq amalga oshirishni talab qiladi: yoki barcha o'zgarishlar bazada aks etadi, yoki hech narsa ro'y bermaydi. Agar foydalanuvchi $COMMIT_TRANSACTIONdan oldin ERROR operatorini $RESTORE_TRANSACTION bilan kiritgan bo'lsa, hech qanday o'zgarish qayd etilmaydi.
Bo'linmaslikka erishish uchun tranzaksiya quyidagi to'rtta xususiyatlarga ega bo'lishi kerak:
Atomicity (Atomarlik). Tranzaksiya yuqorida ta'riflangan "hammasi yoki hech narsa" turiga ega bo'lishi kerak va xatolik va muammosiz amalga oshirilishi kerak. Shu tarzda foydalanuvchi o'z tranzaksiyasi bo'yicha barcha harakatlar to'g'ri bajarilishiga ishonch hosil qilishi mumkin. Tranzaksiya yakunlangandan so'ng foydalanuvchi uning muvaffaqiyatli natijasi haqida tasdiqlash olishi va barcha harakatlar to'g'ri va aniq bajarilganligiga ishonch hosil qilishi kerak.
Consistency (Yaxlitlik). Tranzaksiya normal tugaydi (EOT - tranzaksiyaning oxiri) va bazaning yaxlitligini saqlaydi. Boshqa so'z bilan aytganda, muvaffaqiyatli tranzaksiya ruxsat etilgan natijalarni qayd etadi. Bu barqarorlikni qo'llab-quvvatlash uchun zarur.
Isolation (Izolyatsiya). Tranzaksiyada sodir bo'layotgan hodisalar boshqa bir vaqtning o'zida amalga oshirilayotgan tranzaksiyalardan butunlay yopiq bo'lishi kerak. Bunday shart juda muhim, chunki aks holda ushbu tranzaksiyani asl holatiga qaytarish qiyinliklarga olib kelishi mumkin. Izolyatsiyaga erishish uchun maxsus turli xil sinxronizatsiya usullari ishlatiladi, bu esa ma'lumotlarni himoya qilish darajasini yuqori saqlash imkonini beradi. Turli xil sinxronizatsiya usullarini qo'llash orqali barqarorlikka erishiladi va har qanday aralashuvga qarshi turish imkoniyatiga ega bo'linadi, bu esa ma'lumotlarning xavfsizligini va yaxlitligini kafolatlashga yordam beradi.
Durability (Barqarorlik). Tranzaksiya tugallangandan so'ng va natijalar bazaga yozilgandan so'ng tizim keyingi nosozliklarda ham ularning ishonchliligini kafolatlagan bo'lishi kerak. Tranzaksiya to'plamlari bilan boshqarish mexanizmi yo'qligi sababli, ma'lumotlar bazasi boshqaruv tizimi (DBMS) tranzaksiya chegaralari ustidan nazoratga ega emas.
Shuning uchun foydalanuvchiga tizimning ro'y bergan hodisani xabar qilgan bo'lsa, bu hodisa haqiqatan ro'y berganligiga kafolat berilishi kerak. Muvaffaqiyatli tugallanmagan tranzaksiyalarning natijasida noto'g'ri ma'lumotlarni tegishli "qayta" tranzaksiya yordamida bartaraf etish mumkin.
3.2 Tranzaksiyalarning Paydo Bo'lishi
ACIDning to'rt xususiyati ma'lumotlar bazalarini loyihalashga ta'sir qiladi. ACID testi tizim sifatini baholash uchun sinovdir. Masalan, bu PL/1-SQLda mablag'larni bir hisobdan boshqasiga o'tkazish uchun dastur bo'lishi mumkin.
FUNDS_TRANSFER. PROCEDURE,
$BEGIN_TRANSACTION;
ON ERROR DO; /* xatolik holatida */
$RESTORE_TRANSACTION, /* barcha ishni bekor qilish */
GET INPUT MESSAGE; /* kiritiladigan xabarni qayta olish */
PUT MESSAGE ('TRANSFER FAILED'); /* muvaffaqiyatsizlikni xabar qilish */
GO TO COMMIT;
END;
GET INPUT MESSAGE; /* kirish xabarini olish va tahlil qilish */
EXTRACT ACCOUNT_EBIT, ACCOUNT_CREDIT,
AMOUNT FROM MESSAGE,
$UPDATE ACCOUNTS /* ebit bajarish */
SET BALANCE ffi BALANCE - AMOUNT
WHERE ACCOUNTS.NUMBER = ACCOUNT_DEBIT;
$UPDATE ACCOUNTS /* kredit qilish */
SET BALANCE = BALANCE + AMOUNT
WHERE ACCOUNTS.NUMBER = ACCOUNT_CREDIT;
$INSERT INTO HISTORY /* audit izini saqlash */
<DATE, MESSAGE>;
PUT MESSAGE ('TRANSFER DONE'); /* muvaffaqiyatni xabar qilish */
COMMIT: /* yangilanishlarni tasdiqlash */
$COMMIT_TRANSACTION;
END; /* dasturni tugatish */
Men kodning misolini keltirdim, ACID xususiyatlari har qanday DBMSda tranzaksiyalarni qo'llab-quvvatlashni da'vo qiladigan tizimga va ma'lumotlar bazasidagi tranzaksiyaning ta'rifi sifatida talqin qilinishi mumkinligini ko'rsatish uchun. Bu hayotiy amaliyotga mos keladi. Masalan, bank tranzaksiyasini bajaruvchi mijoz bankning ACID xususiyatlarini rioya qilishini kutadi. Bu xususiyatlarni qo'llab-quvvatlamaydigan bank mijozlarni yo'qotadi yoki hattoki bankrot bo'lishi mumkin.
3.3 ACID Bog'liqligi
ACIDning barcha xususiyatlari birga bo'lishi juda muhim. Agar ulardan birini tashlab ketsak, boshqalari foydasiz bo'lib qoladi. Masalan, yaxlitlik xususiyatisiz tranzaksiyalardan foydalanish mumkinligini bilolmaymiz. Keyin, harakatlarning to'g'riligini tekshirish dasturlarda bajarilishi kerak, bu esa dasturlashni qiyinlashtiradi.
Bu yerda gap mantiqiy yaxlitlik haqida ketayotganini tushunish kerak. Bank mijoziga bank belgilangan va mijozlarga ma'lum bo'lgan qoidalarga muvofiq ishlashi kerak. Shunday qilib, bu qoidalarni buzadigan tranzaksiyalar bajarilmasligi mumkin bo'ladi. Keyingi tranzaksiya ushbu qoidalarga muvofiqlik muhiti ostida amalga oshiriladi.
Onlayn-do'konning mijoziga buyurtma qilingan va to'langan tovarlar vaqtida etkazib berilishi va mijozga ma'lum va belgilangan qoidalarga muvofiq kelishini xohlashi kerak. Bu holda unga do'konga ishonch kafolati taqdim etiladi va uning tranzaksiyalarni o'z vaqtida bajarish qobiliyati kafolatlanadi. Foydalanuvchi korxonaning ichki ishlash jarayonlaridan qiziqmaydi, tranzaksiyani bajarish uchun qanday harakatlar amalga oshirilayotganidan, korxona qanday qilib jismoniy moslashuvni saqlab, jismoniy darajada operatsiyalarni bajarishidan. Biroq, bu maqsadga erishish uchun, do'kon mas'uliyatga muvofiq buyurtmalarni yetkazib berish imkonini beradigan jarayonlarga ega bo'lishi va mijozga taqdim etilgan kafolatni ta'minlaydigan tizimga ega bo'lishi kerak.
DBMS tranzaksiya va ma'lumotlar bazasining mantiqiy yaxlitligini qo'llab-quvvatlash uchun javobgarlikni o'z zimmasiga olganda, ilovalar yanada sodda, tushunarli va ishonchli bo'ladi. Ilova o'z sohasining barcha mantiqiyligini (masalan, bank, do'kon yoki ombor) tranzaksiyalarga va ma'lumotlarning ruxsat etilgan holatiga saqlaydi. Ushbu tizim ACID-tranzaksiyalarini qo'llab-quvvatlashni talab qiladi, ilova tomonidan ta'minlangan yaxlitlik bilan. ACID-tranzaksiyalardan voz kechish ilovalar ishlab chiquvchilari uchun katta muammolar yaratadi, ular mijozlarning ehtiyojlarini qondirish uchun shunga o'xshash amalga oshirish bilan shug'ullanishadi.
ACID xususiyatlari tranzaktsiya tushunchasini belgilaydi. Tranzaksiyalarni qo'llab-quvvatlamaydigan ma'lumotlar boshqaruv tizimi haqida gapirish uchun tranzaksiya atamasida nimani anglatishini tushunish kerak.
Ko'pincha (ayniqsa NoSQLda) odamlar tranzaksiyalarga ega ilovalarni qo'llab-quvvatlash haqida gapirishadi. Shunday qilib, ushbu maqolada men ushbu tranzaksiyalarni "ACID-tranzaksiyalari" deb atayman. "Tranzaksiya" atamasi umumiy ma'noda, kontekstdan kelib chiqqan holda qo'llaniladi.
GO TO FULL VERSION