الانتقال إلى المحتوى الرئيسي
الوحدة 11 · الدرس 4 من 444/57 في الدورة~12 min
دروس الوحدة (4/4)

مستويات العزلة

إلى جانب التحديث الصريح، تحتوي المعاملات أيضًا على قواعد رياضية فطرية مخبأة في أعماق المحرك والتي تحكم مقدار الطاقة التي يجب إنفاقها لعزل كل تفاعل فردي بشكل افتراضي. وهذا ما يسمى مستوى العزل. في عالم SQL، نعرف أربعة معايير قياسية، من حيث القوة والأمان ولكن من الواضح أن العكس من حيث الأداء.

  • READ UNCOMMITTED: جنون فوضوي، ستشهد معاملتك كل تغيير يجريه الآخرون بما في ذلك البيانات المؤقتة من الأشخاص في منتصف الطريق خلال البرامج النصية الخاصة بهم. لا أحد يستخدمه على قواعد البيانات الكبيرة، بسبب أخطاء القراءة القذرة المستمرة.
  • READ COMMITTED: (افتراضي لـ Postgres). ستشاهد على الفور بيانات جديدة بمجرد أن يصدر طرف ثالث التزامًا، ولكن يمكن أن تقع ضحية للقراءات الوهمية (رؤية سجلات جديدة في منتصف الطريق خلال سير العمل الطويل) أو عرض متسق غير خطي.
  • REPEATABLE READ: أثقل. طوال مدة جلسة النافذة الزمنية الكبيرة الخاصة بك، "أرى" قاعدة البيانات مجمدة في اللحظة التي بدأ فيها استعلامي، متجاهلاً تمامًا ومتجاهلًا حتى الالتزامات الرسمية التي أكملها أشخاص آخرون! إنه يحمي من ظهور السجلات بطريقة سحرية، مما يضمن الاستقرار.
  • SERIALIZABLE: المستوى الإلهي (بطيء جدًا). يتعامل مع كل المعاملات المتداخلة عن طريق حظرها وتنفيذها بشكل تسلسلي في خط واحد، وإجهاض المعاملات المتصادمة بلا رحمة، والقضاء حتى على الاحتمال العلمي لأدنى تصادم، والتضحية بنسبة 90% من الإنتاجية العالية.

كيف يمكنك ضبطه؟

بدلاً من BEGIN; العادي تكتب:

SQL
BEGIN ISOLATION LEVEL SERIALIZABLE;

-- and you proceed normally with your hermetically sealed isolation
UPDATE products SET stock = 10;
COMMIT;

أو في بعض المتغيرات والمحركات الأقدم تقوم بتعيينه بعد البدء:

SQL
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

جربه بنفسك

تمرين#sql.m11.l4.e1
المحاولات: 0جارٍ التحميل…

ابدأ معاملة رسميًا بتعيين المستوى العام لعمر الاستعلام إلى "قراءة قابلة للتكرار" لإنشاء تبادل مجمّد ومحمي.\nتذكر أنه على مستوى الاستعلام لا يخدم أي غرض ما لم يتبعه شيء آخر، لذا أغلقه فارغًا بـ "COMMIT".

جارٍ تحميل المحرر…
إظهار التلميح

افتحه بقراءة قابلة للتكرار لمستوى عزل البداية؛ وأغلق بـ COMMIT؛

الحل متاح بعد 3 من المحاولات

تمرين#sql.m11.l4.e2
المحاولات: 0جارٍ التحميل…

لنجرب المستوى المجنون القابل للتسلسل ونقوم بإدراج بعض البيانات الوهمية.\nافتح كتلة 'SERIALIZABLE'.\nقم بتحديث اسم الفئة Id=2 إلى 'Nuovo Nome Segreto'.\nقم بتشغيل الالتزام الذري النهائي وتسوية الالتزام.

جارٍ تحميل المحرر…
إظهار التلميح

بدء تسلسل مستوى العزل؛\nتحديث اسم مجموعة الفئات = 'Nuovo Nome Segreto' WHERE id = 2;\nCOMMIT;

الحل متاح بعد 3 من المحاولات