شرح خصائص ACID
الذرّية والاتساق والعزل والاستمرارية مع أمثلة عملية
شرح خصائص ACID درس مجاني في Coding Interview Prep على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Coding Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.
لماذا يسأل المحاورون عن ACID
عندما يقول المحاور المتقدم «اشرح لي ACID خطوة بخطوة»، فهو لا يختبر ما إذا كنتم قد حفظتم أربع كلمات. بل يريد معرفة ما إذا كنتم تفهمون ما تضمنه قاعدة البيانات عندما يصل إليها مستخدمون كثيرون في الوقت نفسه.
يرمز ACID إلى الذرّية والاتساق والعزل والدوام. وتَعِد كل قاعدة بيانات تدعم المعاملات، مثل Postgres وMySQL/InnoDB وSQL Server وOracle، بهذه الخصائص الأربع للعمل المضمّن داخل معاملة.
تربط الإجابات الأقوى كل حرف بفشل ملموس تمنعه. وسنفعل ذلك بالضبط خلال المشاهد التالية.
ما المعاملة؟
المعاملة هي وحدة عمل تتعامل معها قاعدة البيانات بوصفها خطوة واحدة غير قابلة للتجزئة. تفتحها باستخدام BEGIN، وتنفذ عبارة واحدة أو أكثر، ثم تستخدم إما COMMIT لجعل التغييرات دائمة أو ROLLBACK للتراجع عن كل شيء.
المثال التقليدي هو التحويل المصرفي: خصم المبلغ من حساب وإضافته إلى حساب آخر. يجب أن تحدث العمليتان معًا أو لا تحدث أي منهما. والمعاملة هي الغلاف الذي يتيح لك الوفاء بهذا الالتزام.
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;A = الذرية
الذرية تعني أن المعاملة تُنفذ بالكامل أو لا تُنفذ مطلقًا. إذا فشلت أي عبارة، أو تعطل الخادم في منتصف التنفيذ، فسيتم التراجع عن كل تغيير في تلك المعاملة كما لو أنها لم تبدأ قط.
في مثال التحويل، إذا فشلت إضافة المبلغ بعد نجاح الخصم، تضمن الذرية التراجع عن الخصم أيضًا. ولن تفقد المال بسبب عملية لم تكتمل.
صياغة مناسبة للمقابلة: "تضمن الذرية تنفيذ المعاملة بالكامل أو عدم تنفيذها مطلقًا، مع عدم ترك حالة جزئية."
الذرية عمليًا
ينتهك التحديث الثاني هنا قيد تحقق (لا يمكن أن يصبح الرصيد سالبًا). تلغي قاعدة البيانات المعاملة، وتؤدي ROLLBACK إلى التراجع عن التحديث الأول أيضًا.
النقطة الأساسية في المقابلات: بعد التراجع، يظل رصيد الحساب 1 كما كان في الأصل. ولا توجد كتابة جزئية متروكة في الجدول.
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- next line fails: balance would go below 0
UPDATE accounts SET balance = balance - 999999 WHERE id = 2;
ROLLBACK; -- account 1 is restored to its original balanceC = الاتساق
الاتساق يعني أن المعاملة تنقل قاعدة البيانات من حالة صالحة إلى حالة صالحة أخرى. يجب أن تحترم كل معاملة يتم تثبيتها جميع القواعد المحددة: القيود، والمفاتيح الخارجية، والمشغلات، وعمليات التتالي.
إذا كانت المعاملة ستترك قيدًا منتهكًا، مثل مفتاح خارجي بلا سجل مرتبط، أو مفتاح أساسي مكرر، أو فشل في CHECK، ترفض قاعدة البيانات تثبيتها.
دقة مهمة ينبغي ذكرها: تفرض قاعدة البيانات القواعد المعلنة، لكن ثوابت مستوى التطبيق، مثل "لا يمكن للمستخدم امتلاك أكثر من 3 جلسات نشطة"، تقع على عاتقك ما لم تُنمذج على شكل قيود.
فرض الاتساق باستخدام القيود
الاتساق هو في الغالب مجموع قواعد مخطط قاعدة البيانات. يضمن المفتاح الخارجي أدناه عدم إمكانية إدراج طلب لعميل غير موجود.
إذا أشار الإدراج إلى عميل مفقود، تفشل المعاملة، وتؤدي الذرية إلى التراجع عنها، وبذلك يُحافَظ على الاتساق. ولهذا يقول المحاورون إن الذرية والاتساق يعملان معًا.
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT NOT NULL REFERENCES customers(id),
amount NUMERIC(10,2) CHECK (amount > 0)
);
-- This fails if customer 999 does not exist, keeping data consistent
INSERT INTO orders (id, customer_id, amount) VALUES (1, 999, 50.00);I = العزل
العزل يعني أن المعاملات المتزامنة لا تتداخل بطريقة تضر إحداها بالأخرى. ومن الناحية المثالية، تتصرف كل معاملة كما لو أنها تعمل بمفردها، حتى عند تشغيل عشرات المعاملات في الوقت نفسه.
في الواقع، توفر قواعد البيانات مستويات عزل مختلفة توازن بين الصرامة والأداء. وتسمح المستويات الأضعف ببعض الحالات الشاذة، مثل القراءات القذرة والقراءات الوهمية، مقابل زيادة التزامن.
هذا هو الجزء الأوسع في أي مقابلة حول ACID، لذلك يتناول الدرسان التاليان مستويات العزل وحالات شذوذ القراءة بالتفصيل.
لماذا يُعد العزل نطاقًا متدرجًا؟
العزل الكامل (SERIALIZABLE) مكلف؛ لأنه يجب أن يمنع كل تعارض محتمل ناتج عن تداخل التنفيذ، وغالبًا ما يحقق ذلك من خلال قفل المعاملات أو إلغائها.
لذلك يحدد معيار SQL أربعة مستويات. ومن الأخطاء الشائعة في المقابلات افتراض أن العزل ثنائي: إما مفعّل أو غير مفعّل. هذا غير صحيح؛ إذ تختارون صراحة مقدار العزل المطلوب.
READ UNCOMMITTEDالأضعفREAD COMMITTEDREPEATABLE READSERIALIZABLEالأقوى
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SELECT SUM(balance) FROM accounts;
-- ... business logic ...
COMMIT;D = الديمومة
الديمومة تعني أنه بمجرد تثبيت المعاملة، تبقى تغييراتها محفوظة رغم الأعطال وفقدان الطاقة وإعادة التشغيل. فالمعاملة المثبتة تكون موجودة في تخزين مستقر.
تحقق قواعد البيانات ذلك باستخدام سجل الكتابة المسبقة (WAL)؛ إذ تُكتب التغييرات في سجل دائم قبل تحديث ملفات البيانات. وعند إعادة التشغيل، يعيد المحرك تشغيل السجل لاسترداد أي عمل مثبت لم يصل بعد إلى الملفات الرئيسية.
صياغة مناسبة للمقابلة: "يضمن WAL الديمومة؛ ولا تُرجع عملية التثبيت نتيجتها إلا بعد تفريغ سجل المعاملة إلى القرص."
جمع مكونات التحويل المصرفي
يختبر تحويل واحد الخصائص الأربع كلها في الوقت نفسه:
- الذرية: يُطبَّق التحديثان معًا أو لا يُطبَّق أي منهما.
- الاتساق: يحافظ CHECK على عدم سلبية الأرصدة.
- العزل: لا يرى القارئ المتزامن تحويلًا نُفذ نصفه فقط.
- الديمومة: بعد
COMMIT، تبقى الأرصدة الجديدة محفوظة رغم حدوث عطل.
إن القدرة على ربط مثال واحد بالأحرف الأربعة تحديدًا هي ما يكسبكم نقاطًا في المقابلة.
BEGIN;
UPDATE accounts SET balance = balance - 100
WHERE id = 1 AND balance >= 100;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;أسئلة متابعة شائعة
غالبًا ما يتعمق المحاورون في الحالات الحدية. كونوا مستعدين للإجابة عن الآتي:
- "ما الخاصية التي يفرضها المفتاح الخارجي؟" الاتساق.
- "ما الذي يحميكم من تعطل الخادم في منتصف المعاملة؟" الذرية، من خلال التراجع عن التغييرات غير المثبتة، بالإضافة إلى الديمومة، من خلال إعادة تشغيل التغييرات المثبتة.
- "هل العزل مجاني؟" لا، فالعزل الأقوى يقلل التزامن.
- "هل توفر مخازن NoSQL خصائص ACID؟" يبادل كثير منها هذه الخصائص بالتوافر (BASE)؛ لذا اذكروا أن الأمر يعتمد على المحرك.
اختبار سريع
اختبروا مدى فهمكم لوظيفة كل خاصية من خصائص ACID.
مراجعة: ACID في جملة واحدة
يمكنكم الآن الإجابة عن السؤال بوضوح:
- الذرية - تنفيذ كامل أو عدم تنفيذ؛ يتم التراجع عن العمل الجزئي.
- الاتساق - يحترم كل تثبيت القيود ويترك قاعدة البيانات في حالة صالحة.
- العزل - لا تفسد المعاملات المتزامنة بيانات بعضها؛ ويمكن ضبط درجة الصرامة.
- الديمومة - تبقى البيانات المثبتة محفوظة رغم الأعطال، بدعم من سجل الكتابة المسبقة.
اربطوا كل حرف بفشل ملموس يمنعه، وستتمكنون بسهولة من اجتياز بداية أي مقابلة حول التزامن.
الأسئلة الشائعة
هل درس «شرح خصائص ACID» مجاني؟
نعم — نص درس «شرح خصائص ACID» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Coding Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.
ماذا ستتعلم في «شرح خصائص ACID»؟
الذرّية والاتساق والعزل والاستمرارية مع أمثلة عملية تتمرن على Coding Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Coding Interview Prep؟
لا تُشترط خبرة سابقة. Coding Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «شرح خصائص ACID»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Coding Interview Prep هذا؟
نعم. كل درس في Coding Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- شرح خصائص ACID
- مستويات العزل الأربعة
- القراءات المتسخة وغير القابلة للتكرار والوهمية
- حالات التعارض والأقفال وMVCC