ACID در دیتابیس چیست؟
دسته : برنامه نویسی
نویسنده : علی منصورآبادی
تاریخ : 1401/5/24
تعداد لایک : 1
سطح : مبتدی
ACID در دیتابیس چیست؟
خاصیت های ACID در دیتابیس (Database) رو بررسی کنیم. تراکنش ها (Transactions) در دیتابیس یک سری عملیات هستند که به داده ها دسترسی دارد و می توانند آن ها را تغییر دهند. به منظور حفظ ثبات و پایداری در یک پایگاه داده یا دیتابیس (یعنی طوری که داده ها دچار مشکل نشوند)، قبل و بعد از هر تراکنش، ویژگی های خاصی باید رعایت شوند که به این خواص یا ویژگی ها، ACID می گویند. واژه ACID از چهار کلمه Atomicity، Consistency، Isolation و Durability تشکیل شده است
سلام، وقتتون بخیر. علی هستم برنامه نویس تیما. امروز می خواهیم با هم خاصیت های ACID در دیتابیس (Database) رو بررسی کنیم. تراکنش ها (Transactions) در دیتابیس یک سری عملیات هستند که به داده ها دسترسی دارد و می توانند آن ها را تغییر دهند. به منظور حفظ ثبات و پایداری در یک پایگاه داده یا دیتابیس (یعنی طوری که داده ها دچار مشکل نشوند)، قبل و بعد از هر تراکنش، ویژگی های خاصی باید رعایت شوند که به این خواص یا ویژگی ها، ACID می گویند. واژه ACID از چهار کلمه Atomicity، Consistency، Isolation و Durability تشکیل شده است که در ادامه به بررسی هر یک از این ویژگی ها می پردازیم.
Atomicity:
منظور از ویژگی Atomicity این است که یا کل تراکنش به یکباره انجام می شود، یا اصلاً تراکنش به هیچ وجه اجرا نمی شود. یعنی تراکنش نصفه کاره وجود ندارد و تراکنش ها به طور جزئی انجام نمی شود و یا باید کامل انجام شوند یا اصلا نباید انجام شوند. پس هر تراکنش (Transaction) یا عملیات به عنوان یک واحد در نظر گرفته می شود و یا تا پایان اجرا می شود، یا اصلا اجرا نمی شود. لازم به ذکر است که Atomicity به «قانون همه یا هیچ» هم معروف است. این خاصیت در کل دارای دو بخش Abort و Commit است که در ادامه بررسی می کنیم:
· Abort: اگر تراکنش به هر دلیلی لغو شود، تغییرات ایجاد شده در پایگاه داده قابل مشاهده نیست. یعنی این طور به نظر می رسد که اصلا انگار تراکنشی نبوده و منطبق بر اصل "همه یا هیچ" است.
· Commit: در صورت انجام یک تراکنش، تغییرات ایجاد شده قابل مشاهده است. یعنی تراکنش به صورت کامل اجرا شده و منطبق بر اصل "همه یا هیچ" است.
برای مثال، تراکنش T را در نظر بگیرید که دارای دو قسمت T1 و T2 است.
موجودی X در ابتدا یعنی قبل از تراکنش 500 است و موجودی Y، 200 است. حالا می خواهیم 100 دلار را از حساب X به حساب Y انتقال دهیم. پس در T1، ابتدا موجودی X خوانده می شود که 500 است و در مرحله بعدی 100 دلار از آن کم می شود یعنی می شود 400. حالا مقدار جدید یعنی 400 در X ریخته می شود. در تراکنش دوم یعنی T2، ابتدا موجودی Y خوانده می شود که 200 است. حالا 100 دلار به آن اضافه می شود تا بشود 300. حالا مقدار جدید یا 300 در Y ریخته می شود. طی این عملیات ما 100 دلار را از حساب X به حساب Y منتقل کردیم.
حالا اگر تراکنش بعد از تکمیل T1، اما قبل از تکمیل T2 شکست بخورد، پس یعنی بعد از کم شدن 100 دلار از X و قبل از اضافه شدن آن 100 دلار به Y، تراکنش ما شکست خورده و مبلغ کسر شده ولی به حساب مقصد اضافه نشده است. این امر منجر به یک پایگاه داده یا Database ناسازگار و ناپایدار می شود. این همان اصل Atomicity است که تراکنش باید به طور کامل اجرا شود تا از صحت وضعیت پایگاه داده یا دیتابیس اطمینان حاصل شود.
Consistency:
Consistency یا ثبات به این معنی است که یکپارچگی دیتابیس باید حفظ شود تا پایگاه داده "قبل" و "بعد" از هر تراکنش سازگار و پایدار باشد، این امر به صحت پایگاه داده اشاره دارد. همانطوری که در مثال بالا دیدید، مقدار "کل مبلغ" قبل و بعد از معامله حفظ شد و ثابت است.
مجموع قبل از وقوع تراکنش: 500 + 200 = 700
مجموع بعد از وقوع تراکنش: = 700 400 + 300
بنابراین، پایگاه داده ما سازگار است. در صورتی که T1 کامل شود اما T2 شکست بخورد، ناسازگاری رخ می دهد پس در نتیجه T ناقص است که این امر، خلاف اصل Consistency است.
Isolation:
Isolation یا انزوا تضمین می کند که چندین تراکنش جدا می توانند به طور همزمان انجام شوند، بدون اینکه روی هم تاثیری بگذارند و منجر به ناسازگاری پایگاه داده شوند. یعنی عملیات ها به طور کاملا مستقل و بدون دخالت انجام شوند. در اصل طبق این خاصیت، تغییراتی که در یک تراکنش خاص اتفاق میافتد تا زمانی که در حافظه نوشته نشده باشد، برای هیچ تراکنش دیگری قابل مشاهده نخواهد بود. یعنی انگار اصلا تراکنش رخ نداده است تا زمانی که کاملا تمام شود. Isolation تضمین میکند که اجرای همزمان یا موازی تراکنش ها دقیقا معادل حالتی است که انگار اصلا به صورت سری یا ترتیبی در حال انجام هستند، یعنی حالت موازی طوری عمل می کند که انگار یک تراکنش بعد از اتمام یک تراکنش دیگر، اجرا می شود.
فرض کنید X = 500 و Y = 500 است. حالا دو تراکنش زیر را در نظر بگیرید.
در تراکنش T، ابتدا X خوانده می شود و سپس در 100 ضرب می شود و در مرحله بعدی، ذخیره می شود. بعد Y خوانده می شود و از آن 50 واحد کم می شود و ذخیره می شود. در تراکنش ”T، ابتدا X و Y خوانده می شوند. سپس مقدار آنها با هم جمع می شود و در Z نوشته می شود و در نهایت Z ذخیره می شود.
فرض کنید T تا Read (Y) اجرا شده است و سپس ”T شروع می شود. در این حالت، درهم تنیدگی عملیات صورت می گیرد. یعنی در وسط کار که هنوز مقدار Y توسط T عوض نشده است، در تراکنش ”T از آن با مقدار قدیمی استفاده شده است. پس ”T مقدار صحیح X را می خواند اما مقدار نادرست Y. مجموع بدست آمده در این حالت به صورت زیر است:
T’’ : ( X + Y = 50000 + 500 = 50500 )
و مجموع بدست آمده درست باید به صورت زیر باشد یعنی باید از Y، 50 واحد کم شده باشد و بعد جمع شود:
T : ( X + Y = 50000 + 450 = 50450 )
بنابراین مجموع بدست آمده با مجموع درست سازگار نیست. به دلیل اجرا نشدن عملیات کاهش 50 واحد، ناسازگاری در پایگاه به وجود آمده است. به همین خاطر است که اصل انزوا یا Isolation می گوید که تراکنش ها باید به صورت مجزا انجام شوند و تغییرات باید تنها پس از انجام آنها، در حافظه اصلی قابل مشاهده باشد.
Durability:
ویژگی Durability یا ماندگاری تضمین میکند که پس از اتمام تراکنش، بهروزرسانیها و اصلاحات پایگاه داده در دیسک ذخیره میشوند و حتی در صورت بروز نقص در سیستم، این امر ادامه مییابد. این بهروزرسانیها در حافظه غیر موقت و دائمی ذخیره می شوند. این امر به این معناست که داده ها همیشه در دسترس هستند و هیچ وقت با قطع برق یا هرگونه عامل دیگری، داده های ما از بین نمی روند و به صورت دائمی ذخیره هستند.
ویژگیها و خاصیت های ACID در مجموع، مکانیزمی را برای اطمینان از صحت و سازگاری یک پایگاه داده یا دیتابیس ارائه می دهند. به گونهای که هر تراکنش (Transaction) مجموعهای از عملیات است و نتایج ثابتی تولید میکند. جدا از سایر عملیاتها عمل میکند و بهروزرسانیهایی که میسازد بهطور دائمی ذخیره میشوند و این در واقع همان 4 خاصیت Atomicity، Consistency، Isolation و Durability هستند.
امیدوارم که از این آموزش لذت برده باشید و براتون مفید واقع شده باشه. با ما همراه باشید تا با هم یک درصد بیشتر بدونیم.
پست های مرتبط