معنی ACID در دیتابیس‌ها یعنی چی؟

اگه با دیتابیس‌ها آشنایی داشته باشید، فکر میکنم تا بحال واژه ACID رو شنیده باشین. برای یک تراکنش در پایگاه داده، ACID چهار ویژگی و خصوصیت رو برای این تراکنش تعریف میکنه

معنی ACID در دیتابیس‌ها یعنی چی؟

این چهار ویژگی چی هستن؟ این چهار ویژگی از دل خود کلمه اسید به وجود اومدن! کلمه ACID یک مخفف هست برای چهار کلمه دیگه:

Atomicity
Consistency
Isolation
Durability

منظور از تراکنش هم یعنی همون عملیات خوندن و نوشتن و بروزرسانی و حذف (CRUD)

خب حالا تک تک این‌ها رو بررسی کنیم:

Atomicity

معنی لفظی اتمیسیتی یعنی تجزیه ناپذیری. فرض کنین یک تراکنشی رو قراره انجام بدیم که شامل پنج عملیات هست. مثلا 1بار خوندن اطلاعات، 3 آپدیت و 1 حذف. همه این عملیات قراره توی یک درخواست انجام بشه. اگر تراکنشی این ویژگی رو داشته باشه، یعنی اتمیک (Atomic) باشه، به ما این اطمینان رو میده که همه این 5 عملیات، یا با موفقیت انجام میشن یا هیچ کدوم اعمال نمیشن. همه یا هیچ. یعنی اگر یکی از این 5 عملیات با خطا روبرو بشه، 4 عملیات دیگه هم به سرانجام نمیرسن. 5 عملیات زیر رو درنظر بگیریم:

SELECT * FROM users WHERE id = 11;
UPDATE users SET name = 'John' WHERE id = 11;
INSERT INTO user_logs (user_id, action) VALUES (11, 'update_profile');
INSERT INTO user_notifications (user_id, text) VALUES (11, 'Profile updated');
DELETE FROM user_temp WHERE user_id = 11;

اگه یک کدوم از این عملیات با خطا مواجه بشه و اگه تراکنش ما اتمیک باشه، بقیه عملیات اجرا نمیشن. مثلا اگه 4 مورد اول با موفقیت اجرا بشن ولی مورد آخر با خطا روبرو بشه، اون 4 مورد اول به حالتی برمیگردن که انگار اجرا نشدن. اگه میخوایم تراکنش ما اتمیک باشه باید از Transaction ها استفاده کنیم که این مورد رو به زودی بطور مفصل توضیح میدم.

Consistency

معنی لفظی این مورد یعنی ثبات، استحکام. بذارید این مفهموم رو با یک مثال توضیح بدم. فرض کنیم توی یک برنامه حسابداری، موجودی کل صندوق 900 هست. وقتی که قراره یک انتقال از یک حساب به یک حساب دیگه صورت بگیره، موجودی کل صندوق، قبل از شروع تراکنش برابر 900 و بعد از پایان تراکنش هم برابر 900 خواهد بود. این یعنی پایداری و ثبات اطلاعات در دیتابیس. توی این مثال ناپایداری زمانی اتفاق میوفته که مثلا ما مقدار 300 تومن از حساب کم کردیم تا به یک حساب دیگه اضافه کنیم، ولی این کار بنا به دلایلی با خطا مواجه میشه. پس 300 کم شده ولی به حساب دیگه‌ای اضافه نشده. که درصورت یعنی ناپایداری اطلاعات.

Isolation

این مورد یعنی هر تراکنشی مجزا از تراکنش‌های دیگه اجرا بشه. یعنی تراکنش A هیچ تداخلی با تراکنش B نداره. همچنین این دو تراکنش فقط زمانی به اطلاعات همدیگه دسترسی دارن که اطلاعات خودشون رو توی دیتابیس ذخیره کرده باشن و دیتابیس در حالت ثبات (Consistent) باشه. ساده تر بگم، تراکنش ها در کار همدیگه دخالت نمیکنن و مستقل هستن.

Durability

این مورد، این اطمینان رو ما میده که وقتی یک تراکنش به پایان رسید، اطلاعات دیتابیس دیگه بطور دائمی ثبت شدن و هرگز به دلایل غیرعمد مثلا قطعی برق از بین نمیرن.

با تشکر از علی نظری