خاصیت ACID در یک پایگاه داده

مدرس: مسعود کاویانی

همان طور که در درس تراکنش چیست؟ توضیح دادیم، تراکنش یک مجموعه ای از عملیات مانند SELECT، UPDATE و… است که به صورت واحد دیده می شود. تراکنش ها در یک پایگاه داده بایستی از خاصیتی به اسم ACID پشتیبانی کنند. اگر تراکنشی در پایگاه از ACID پشتیبانی کند، منجر به دقت و جامعیت در پایگاه داده می شود. ACID مخفف سه کلمه Atomicity، Consistency، Isolation و Durability می باشد که به شرح تک تک این خاصیت های میپردازیم.

Atomicity: این خاصیت که به خاصیت همه یا هیچ معروف است، می گوید که یک تراکنش یا باید به طور کامل اجرا شود یا خیر. برای مثال اگر در یک تراکنش (Transaction) شما سه عملیات مختلف انجام می دهید، یا هر سه از این عملیات باید تا پایان تراکنش انجام شوند یا هیچ کدام انجام نمی شوند. مثالی که در درس گذشته درباره بانک بیان کردیم را به خاطر بیاورید. اگر UPDATE اول انجام شد، حتما باید UPDATE دوم نیز انجام شود، چون این دو UPDATE در یک تراکنش هستند. اگر برای مثال بعد از UPDATE اول از حساب کاربری A، مشکلی در سیستم به وجود آمد (مثلا برق قطع شد)، سیستم باید بعد از اتصال دوباره، عملیات UPDATE اول را بازگردانی (Rollback) نماید. به این ترتیب هیچ کدام از دو UPDATE صورت نگرفته است.

Consistency: برای درک درست مفهوم consistency یا همان سازگاری به همان مثال تراکنش های بانک در درس قبل بازمیگردیم. همان طور که میدانید، در یک سیستم حسابداری بانک، مجموعه پول های انتقالی بین بانک باید ثابت باشد. در نظر بگیرید که مثلا اگر ۵۰هزار تومان از حساب کاربری A به حساب کاربری B منتقل شد، مجموعه پول های موجود در بانک تغییر نخواهد کرد. این همان مفهوم سازگاری است. یعنی یک تراکنش، پایگاه داده را از یک حالت سازگار به یک حالت سازگار دیگر انتقال می دهد. البته ممکن است این سازگاری در بین تراکنش (وقتی هنوز تراکنش تمام نشده است) نقض شود. در همان مثال قبل، حتما میدانید که بعد از کم شدن ۵۰هزار تومان از حساب کاربری A در پایگاه داده ( وقبل از واریز به حساب کاربری B)، در یک لحظه، consistency نقض می شود، ولی اشکالی ندارد، زیرا در پایان تراکنش همه چیز به حالت سازگار بازمیگردد.

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

Durability: این مفهوم شاید ساده ترین خاصیت ACID باشد. Durability یا پایداری، به این معناست که یک تراکنش بعد از اتمام، باید در حافظه باقی بماند. یعنی اگر یک تراکنش با موفقیت به اتمام رسید، نتایج کار، با قطع برق یا اتفاق های دیگر از بین نرود.

سوالی که مطرح می شود این است که کدام پایگاه داده های موجود از ACID پشتیبانی میکنند. یعنی کدام پایگاه داده های امروزی تراکنش هایشان، خاصیت ACID دارند؟ پایگاه داده های SQL SERVER، MYSql، Oracle و این دست از پایگاه داده ها، تماماً ACID را پشتیبانی می کنند.

در واقع خاصیت ACID این امکان را می دهد که پایگاه داده ها، به صورت جامع با حفظ سازگاری (مثال بانک)، به صورت مطمئن اجرا شوند. معمولا این پایگاه داده ها، خرابی های موجود در سیستم را ترمیم می کنند و یا هنگامی که چندین کاربر به صورت همزمان قصد تغییر در یک رکورد خاص را داشته باشند، این پایگاه داده ها (که از ACID پشتیبانی میکنند) به صورت ۱۰۰٪ تضمین انجام عملیات درست را می دهند.

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

منابع این بحث و اطلاعات بیشتر

» وب سایت Ttorialspoint

» این پاسخ در Stack OverFlow

در صورت تمایل به یادگیری بیشتر، منابع بالا در نظر گرفته شده است. می توانید با خواندن این منابع، به یادگیری خود در این زمینه عمق ببخشید

3 دیدگاه دربارهٔ «خاصیت ACID در یک پایگاه داده»

  1. سوال : ایا حجم اطلاعات در رابطه با oltp ثابته طبق بخش consistency؟
    چون که اطلاعات جدید وارد انبار داده میشه ایا بخش cosistencyبا این موضوع تداخل نداره؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *