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

ACID Properties in DBMS در SQL Server

توسط admin | گروه SQL Server | 1403/05/11

نظرات 1

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

اصطلاح "ACID" در پایگاه‌داده‌های SQL به مجموعه‌ای از ویژگی‌ها اشاره دارد که اطمینان حاصل می‌کنند تراکنش‌های دیتابیسی به‌طور ایمن و قابل اعتماد اجرا می‌شوند. ACID مخفف چهار ویژگی است: Atomicity (اتمی بودن)، Consistency (انسجام)، Isolation (انزوا)، و Durability (پایداری).

1. Atomicity (اتمی بودن):

اتمی بودن به این معناست که یک تراکنش دیتابیسی باید یا به‌طور کامل انجام شود یا اصلاً انجام نشود. این ویژگی اطمینان می‌دهد که در صورتی که هر بخشی از تراکنش با شکست مواجه شود، هیچ یک از تغییرات اعمال نمی‌شود.
مثال: فرض کنید دو حساب بانکی داریم و می‌خواهیم مبلغی را از حساب A به حساب B انتقال دهیم. تراکنش شامل دو مرحله است: کم کردن مبلغ از حساب A و افزودن آن به حساب B. اگر کم کردن مبلغ از حساب A موفقیت‌آمیز باشد ولی افزودن آن به حساب B با شکست مواجه شود، باید عملیات به حالت اولیه برگردد، تا از هرگونه عدم توازن جلوگیری شود.

2. Consistency (انسجام):

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

3. Isolation (انزوا):

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

4. Durability (پایداری):

پایداری تضمین می‌کند که نتایج یک تراکنش موفقیت‌آمیز حتی در صورت وقوع نقص‌های سیستم (مانند قطعی برق یا خرابی‌های سخت‌افزاری) به‌طور دائمی در پایگاه داده باقی می‌مانند.
مثال: پس از انتقال موفقیت‌آمیز پول از حساب A به حساب B، حتی اگر بلافاصله پس از اتمام تراکنش سیستم دچار خرابی شود، تغییرات باید به‌طور دائمی ذخیره شده و از دست نروند. این ویژگی‌ها با هم تضمین می‌کنند که عملیات دیتابیسی به‌طور قابل اعتماد و امن انجام می‌شوند و اطلاعات پایگاه داده همواره در یک وضعیت سازگار و معتبر باقی می‌ماند.

نمونه ACID با کد SQL Server

برای مثال، یک سناریو ساده از یک بانک را در نظر بگیرید که شامل دو جدول است: 
جدول Accounts (حساب‌ها): این جدول شامل ستون‌های AccountID (شناسه حساب) و Balance (موجودی) است.
جدول Transactions (تراکنش‌ها): این جدول شامل ستون‌های TransactionID (شناسه تراکنش)، AccountID (شناسه حساب) و Amount (مقدار تراکنش) است.
حالا فرض کنید می‌خواهیم مبلغ 100 واحد را از حساب A به حساب B انتقال دهیم. این عملیات شامل چندین مرحله می‌شود:
بررسی موجودی کافی در حساب A.
کم کردن 100 واحد از حساب A.
افزودن 100 واحد به حساب B.
ثبت تراکنش در جدول Transactions.
برای اجرای این عملیات به صورت اتمی، می‌توان از یک تراکنش در SQL استفاده کرد. مثال زیر نشان می‌دهد که چگونه این عملیات را می‌توان در قالب یک کوئری SQL انجام داد:
 

SQL Transaction Example

 
 
 
BEGIN TRANSACTION;
 
 
-- بررسی موجودی کافی در حساب A
 
IF (SELECT Balance FROM Accounts WHERE AccountID = 'A') >= 100
 
BEGIN
 
    -- کم کردن 100 واحد از حساب A
 
    UPDATE Accounts
 
    SET Balance = Balance - 100
 
    WHERE AccountID = 'A';
 
 
 
    -- افزودن 100 واحد به حساب B
 
    UPDATE Accounts
 
    SET Balance = Balance + 100
 
    WHERE AccountID = 'B';
 
 
 
    -- ثبت تراکنش در جدول Transactions
 
    INSERT INTO Transactions (TransactionID, AccountID, Amount)
 
    VALUES (NEWID(), 'A', -100), (NEWID(), 'B', 100);
 
 
 
    -- تایید تراکنش
 
    COMMIT;
 
END
 
ELSE
 
BEGIN
 
    -- در صورت موجودی ناکافی، تراکنش را لغو کنید
 
    ROLLBACK;
 
END

در این مثال:

Atomicity (اتمی بودن): با استفاده از تراکنش (BEGIN TRANSACTION و COMMIT یا ROLLBACK)، اطمینان حاصل می‌شود که تمامی مراحل انتقال پول یا به‌طور کامل انجام می‌شوند یا در صورت بروز هر گونه خطا یا شرطی که برآورده نشود، به حالت اولیه برگردانده می‌شوند.

Consistency (انسجام): عملیات بررسی موجودی حساب A قبل از برداشت، تضمین می‌کند که پایگاه داده در حالت سازگار باقی بماند و قوانین تعریف شده رعایت شوند (مثلاً موجودی حساب نمی‌تواند منفی باشد).

Isolation (انزوا): تراکنش‌ها به صورت مستقل اجرا می‌شوند. اگر چندین تراکنش همزمان انجام شوند، SQL Server (یا هر سیستم مدیریت پایگاه داده دیگر) با استفاده از مکانیزم‌های قفل‌گذاری و برنامه‌ریزی، انزوا را تضمین می‌کند.

Durability (پایداری): پس از انجام تراکنش و تأیید آن (COMMIT)، تغییرات به‌طور دائمی ذخیره می‌شوند. حتی اگر سیستم بلافاصله پس از COMMIT خاموش شود، این تغییرات از بین نمی‌روند. این مثال نشان‌دهنده‌ی نحوه استفاده از ویژگی‌های ACID در یک کوئری SQL برای اطمینان از اجرای ایمن و قابل اعتماد عملیات انتقال وجه است.

 

1 نظر

ارسال شده توسط حمیرا آبگوشت سازان
1403/05/12

از اینکه این مقاله را در اختیار ما قرار دادین بسیار سپاسگزارم. امیدوارم موفق باشید. با این مقاله و مثال ذکر شده توانستم A.C.I.D در پایگاه داده ها را به درستی و کمال متوجه بشوم. با تشکر. حمیرا آبگوشت سازان.

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر