محمود افضلی
محمود افضلی
خواندن ۳ دقیقه·۲ سال پیش

ویژگی های ACID در پایگاه داده

اسید (ACID) مخفف 4 تا کلمه هستش:

1) A -> Atomicity (تجزیه ناپذیری)

2) C -> Consistency (سازگاری و همخوانی)

3) I -> Isolation (ایزوله و انزوا)

4) D -> Durability (پایداری و ماندگاری)

ACID
ACID

تعریف تراکنش در پایگاه داده: به مجموعه ای از عملیات ایجاد (Create)، خواندن (Read)، ویرایش (Update) و حذف کردن (Delete) (که همان CRUD هستش) یک تراکنش میگوییم. (مثلا ممکن است در یک تراکنش دو تا ایجاد، یکی ویرایش، دو تا حذف و سه تا خواندن داشته باشیم).

هر تراکنش باید این چهار ویژگی را داشته باشد تا منجر به صحت و اطمینان شود.

1) تجزیه ناپذیری (Atomicity)

یک تراکنش یا باید بصورت کامل انجام بشود یا کلا انجام نشود. تراکنش بصورت ناقص نباید انجام شود یعنی مثلا عملیات ایجاد (Create) انجام شود ولی ویرایش (Update) انجام نشود و به مشکل بخورد. در واقع، اگر یک قسمتی از تراکنش ناموفق باشد، تمام تراکنش باید لغو شود و هیچ تغییری در پایگاه داده انجام نشود. (یا همه یا هیچ)

2) سازگاری و همخوانی (Consistency)

قبل و بعد از پایان تراکنش باید اطلاعات پایگاه داده با هم همخوانی داشته باشند. به عنوان مثال موجودی حساب a برابر 200 تومن و موجودی حساب b برابر 300 تومن می باشد. میخواهیم مقدار 100 تومن از حساب a به حساب b انتقال بدهیم. قبل از تراکنش مجموع موجودی هر دو حساب برابر 500 می باشد و بعد از تراکنش هم موجودی هر دو حساب باید برابر 500 باشد.

قبل از تراکنش:

a = 200;

b = 300;

a + b = 500;

بعد از تراکنش:

a = 100;

b = 400;

a + b = 500

مجموع موجودی هر دو حساب قبل و بعد از پایان تراکنش با هم همخوانی دارند.

توی این مثال ناپایداری زمانی اتفاق میوفته که ما مقدار 100 تومن از حساب a کم کردیم تا به حساب b اضافه کنیم، ولی این کار بنا به دلایلی با خطا مواجه میشه. پس 100 تومن کم شده ولی به حساب دیگه‌ای اضافه نشده، که در اینصورت ناپایداری اتفاق افتاده است.

3) انزوا (Isolation)

هنگامی که چندین کاربر به طور همزمان از یک جدول می‌خوانند و می‌نویسند، این ویژگی تضمین می‌کند که تراکنش‌های همزمان با یکدیگر تداخل نداشته باشند و هر درخواست ممکن است به گونه‌ای اتفاق بیفتد که گویی یکی یکی انجام می‌شود، حتی اگر در واقع به طور همزمان انجام شود.

مثلا ما دو تا تراکنش داریم:

در تراکنش اول قرار است مقدار حساب a از 100 به 200 تغییر پیدا کند و حساب b از 400 به 500 تغییر کند.

در تراکنش دوم قرار است موجودی حساب a و b با هم جمع شود.

حال اگر تراکنش دوم بعد از تغییر مقدار حساب a و قبل از تغییر حساب b اتفاق بیفتد در اینصورت موجودی مجموع برابر 600 (200+400) می باشد که اشتباه است. چون با مقدار قدیمی حساب b جمع شده است.

4) پایداری و ماندگاری (Durability)

بعد از اتمام تراکنش، اطلاعات باید بصورت دائمی ذخیره شده باشند و اگر بلافاصله پس از تراکنش، به هر دلیلی سیستم از کار بیفتد نباید اطلاعات از بین برود. اگر سیستم به کاربر بگوید که تراکنش موفقیت آمیز بوده است، تراکنش باید در واقع موفق شده باشد.

ویژگی های ACID
ویژگی های ACID

کدام پایگاه های داده ACID را پشتیبانی میکنند؟
همه پایگاه داده های رابطه ای به اصول ACID پایبند هستند و تضمین می‌کنند داده‌ها در طول خرابی‌های نرم‌افزار و سخت‌افزار و هر گونه تراکنش ناموفق، سازگار هستند.

بسیاری از پایگاه داده های No-SQL، به طور کامل، ACID را پشتیبانی نمی کنند. زیرا پیاده سازی ACID باعث هزینه ی بالای پردازش و در نتیجه ی آن کاهش سرعت در برخی از عملیات پایگاه داده ها می شود. این کار به سرعت بالای این دسته از پایگاه داده ها، کمک زیادی میکند و پیچیدگی پیاده سازی را کاهش می دهد.



منابع:

https://database.guide/what-is-acid-in-databases/
https://www.databricks.com/glossary/acid-transactions

https://teamaa.ir/Blog/Post/1123/database-acid-properties/



aciddatabaseConsistency
افضلیم برنامه نویس بک اند، هرچی بیشتر یاد میگیرم میفهمم که هیچی نمیدونستم.
شاید از این پست‌ها خوشتان بیاید