العزل (أنظمة قواعد البيانات)
في أنظمة قواعد البيانات ، يُعدّ العزل أحد خصائص معاملات ACID ( الذرية ، والاتساق ، والعزل، والمتانة ) . وهو يُحدد كيفية ظهور سلامة المعاملة للمستخدمين والأنظمة الأخرى. يُتيح مستوى العزل المنخفض لعدد أكبر من المستخدمين الوصول إلى البيانات نفسها في الوقت نفسه، ولكنه يزيد أيضًا من عدد تأثيرات التزامن (مثل عمليات القراءة غير المكتملة أو فقدان التحديثات ) التي قد يواجهها المستخدمون. في المقابل، يُقلل مستوى العزل المرتفع من أنواع تأثيرات التزامن التي قد يواجهها المستخدمون، ولكنه يتطلب موارد نظام أكبر ويزيد من احتمالية أن تُعيق معاملةٌ ما معاملةً أخرى. [ 1 ]
التحكم في التزامن في نظام إدارة قواعد البيانات
يشمل التحكم بالتزامن الآليات الأساسية في نظام إدارة قواعد البيانات التي تتولى عزل العمليات وضمان صحتها. ويُستخدم هذا النظام بكثافة من قِبل محركات قواعد البيانات والتخزين لضمان التنفيذ الصحيح للمعاملات المتزامنة، ولضمان صحة عمليات نظام إدارة قواعد البيانات الأخرى (عبر آليات مختلفة). عادةً ما تُقيّد آليات المعاملات توقيت عمليات الوصول إلى بيانات قاعدة البيانات ( جداول المعاملات ) وفقًا لترتيبات محددة تُعرف بخصائص جدولة التسلسل والاسترداد . ويؤدي تقييد تنفيذ عمليات الوصول إلى قاعدة البيانات عادةً إلى انخفاض الأداء (المقاس بمعدلات التنفيذ)، ولذلك تُصمم آليات التحكم بالتزامن عادةً لتوفير أفضل أداء ممكن في ظل هذه القيود. وفي كثير من الأحيان، وعند الإمكان دون المساس بصحة البيانات، يتم التضحية بخاصية التسلسل لتحسين الأداء. ومع ذلك، لا يمكن التضحية بخاصية الاسترداد، لأن ذلك يؤدي عادةً إلى انتهاك سلامة قاعدة البيانات .
يُعدّ نظام القفل ثنائي المراحل أكثر طرق التحكم في تزامن المعاملات شيوعًا في أنظمة إدارة قواعد البيانات، ويُستخدم لتوفير إمكانية التسلسل وإمكانية الاسترداد لضمان صحة البيانات. للوصول إلى عنصر في قاعدة البيانات، تحتاج المعاملة أولًا إلى الحصول على قفل لهذا العنصر. وبناءً على نوع عملية الوصول (مثل قراءة أو كتابة عنصر) ونوع القفل، قد يتم حظر عملية الحصول على القفل وتأجيلها إذا كانت معاملة أخرى تحتفظ بقفل لهذا العنصر.
عزل جانب العميل
يُفرض العزل عادةً على مستوى قاعدة البيانات. مع ذلك، يمكن استخدام أنظمة مختلفة من جانب العميل. يُمكن التحكم به في أُطر عمل التطبيقات أو حاويات وقت التشغيل مثل J2EE Entity Beans [ 2 ]. في الأنظمة القديمة، قد يُنفذ العزل بشكل منهجي (من قِبل مطوري التطبيقات)، على سبيل المثال باستخدام الجداول المؤقتة. في تطبيقات الويب ثنائية الطبقات، أو ثلاثية الطبقات، أو متعددة الطبقات، يُمكن استخدام مدير المعاملات للحفاظ على العزل. مدير المعاملات هو برنامج وسيط يقع بين خدمة التطبيق (خدمة التطبيق الخلفية) ونظام التشغيل . يُمكن لمدير المعاملات توفير عزل شامل وذرية. فهو يتتبع انضمام الخوادم الجديدة إلى المعاملة ويُنسق بروتوكول الالتزام الذري بين الخوادم. تُجرّد التفاصيل من التطبيق، مما يجعل المعاملات أبسط وأسهل في البرمجة. مُراقب معالجة المعاملات (TPM) هو مجموعة من البرامج الوسيطة، بما في ذلك مدير المعاملات. قد يُوفر مُراقب معالجة المعاملات عزلًا محليًا للتطبيق باستخدام مدير القفل. [ 2 ]
اقرأ الظواهر
يشير معيار ANSI/ISO SQL 92 إلى ثلاث ظواهر قراءة مختلفة عندما تسترجع معاملة بيانات قد تكون معاملة أخرى قد قامت بتحديثها.
في الأمثلة التالية، تتم عمليتان. في العملية الأولى، يتم تنفيذ استعلام، ثم في العملية الثانية، يتم تنفيذ تحديث، وأخيراً في العملية الأولى، يتم تنفيذ نفس الاستعلام مرة أخرى.
تستخدم الأمثلة العلاقة التالية:
| بطاقة تعريف | اسم | عمر |
|---|---|---|
| 1 | أليس | 20 |
| 2 | بوب | 25 |
قراءات جريئة
تحدث عملية القراءة غير النظيفة (المعروفة أيضًا باسم التبعية غير الملتزمة ) عندما تسترجع معاملة صفًا تم تحديثه بواسطة معاملة أخرى لم يتم الالتزام بها بعد.
في هذا المثال، تسترجع المعاملة 1 الصف ذو المعرّف 1، ثم تُحدّث المعاملة 2 الصف ذو المعرّف 1، وأخيرًا تسترجع المعاملة 1 الصف ذو المعرّف 1 مرة أخرى. الآن، إذا تراجعت المعاملة 2 عن تحديثها (الذي استرجعته المعاملة 1 بالفعل) أو أجرت تحديثات أخرى، فقد يكون عرض الصف خاطئًا في المعاملة 1. عند مستوى عزل READ UNCOMMITTED، يسترجع استعلام SELECT الثاني في المعاملة 1 الصف المُحدّث: هذه قراءة غير مُنظّمة. عند مستويات عزل READ COMMITTED وREPEATABLE READ وSERIALIZABLE، يسترجع استعلام SELECT الثاني في المعاملة 1 الصف الأصلي.
| المعاملة 1 | المعاملة رقم 2 |
|---|---|
ابدأ ؛ حدد العمر من المستخدمين حيث المعرف = 1 ؛ -- يسترجع 20 | |
ابدأ ؛ تحديث المستخدمين ، تعيين العمر = 21 حيث المعرف = 1 ؛ -- لا يوجد التزام هنا | |
SELECT age FROM users WHERE id = 1 ; -- READ UNCOMMITTED يُرجع 21 (قراءة غير نظيفة) -- READ COMMITTED يُرجع 20 (تم تجنب القراءة غير النظيفة) REPEATABLE READ يُرجع 20 (تم تجنب القراءة غير النظيفة) SERIALIZABLE يُرجع 20 (تم تجنب القراءة غير النظيفة) COMMIT ; | |
التراجع ؛ |
قراءات غير قابلة للتكرار
تحدث عملية القراءة غير القابلة للتكرار عندما تسترجع معاملة صفًا مرتين ويتم تحديث هذا الصف بواسطة معاملة أخرى يتم الالتزام بها في الفترة الفاصلة.
في هذا المثال، تسترجع المعاملة 1 الصف ذو المعرّف 1، ثم تُحدّث المعاملة 2 الصف ذو المعرّف 1 وتُنفّذ، وأخيرًا تسترجع المعاملة 1 الصف ذو المعرّف 1 مرة أخرى. عند مستويي العزل READ UNCOMMITTED وREAD COMMITTED، يسترجع استعلام SELECT الثاني في المعاملة 1 الصف المُحدّث: هذه قراءة غير قابلة للتكرار. عند مستويي العزل REPEATABLE READ وSERIALIZABLE، يسترجع استعلام SELECT الثاني في المعاملة 1 الصف الأصلي.
| المعاملة 1 | المعاملة رقم 2 |
|---|---|
ابدأ ؛ حدد العمر من المستخدمين حيث المعرف = 1 ؛ -- يسترجع 20 | |
ابدأ ؛ حدّث بيانات المستخدمين ، واضبط العمر على 21 حيث يكون المعرّف = 1 ؛ ثمّ قم بالتثبيت . | |
SELECT age FROM users WHERE id = 1 ; -- READ UNCOMMITTED يسترجع 21 (قراءة غير قابلة للتكرار) -- READ COMMITTED يسترجع 21 (قراءة غير قابلة للتكرار) REPEATABLE READ يسترجع 20 (تم تجنب القراءة غير القابلة للتكرار) SERIALIZABLE يسترجع 20 (تم تجنب القراءة غير القابلة للتكرار) COMMIT ; |
قراءة الشبح
تحدث عملية القراءة الوهمية عندما تسترجع معاملة مجموعة من الصفوف مرتين ويتم إدراج صفوف جديدة في تلك المجموعة أو إزالتها منها بواسطة معاملة أخرى يتم الالتزام بها في الفترة الفاصلة.
في هذا المثال، تسترجع المعاملة 1 مجموعة الصفوف التي يزيد عمرها عن 17 عامًا، ثم تُدرج المعاملة 2 صفًا عمره 26 عامًا وتُنفذ، وأخيرًا تسترجع المعاملة 1 مجموعة الصفوف التي يزيد عمرها عن 17 عامًا مرة أخرى. عند مستويات العزل READ UNCOMMITTED وREAD COMMITTED وREPEATABLE READ، يسترجع استعلام SELECT الثاني في المعاملة 1 مجموعة الصفوف الجديدة التي تتضمن الصف المُدرج: وهذه قراءة وهمية. أما عند مستوى العزل SERIALIZABLE، فيسترجع استعلام SELECT الثاني في المعاملة 1 مجموعة الصفوف الأولية.
| المعاملة 1 | المعاملة رقم 2 |
|---|---|
ابدأ ؛ حدد الاسم من المستخدمين حيث العمر > 17 ؛ -- يسترجع أليس وبوب | |
ابدأ ؛ أدخل في جدول المستخدمين القيم ( 3 ، 'كارول' ، 26 )؛ نفّذ التغييرات ؛ | |
SELECT name FROM users WHERE age > 17 ; -- READ UNCOMMITTED يسترجع Alice وBob وCarol (قراءة وهمية) -- READ COMMITTED يسترجع Alice وBob وCarol (قراءة وهمية) REPEATABLE READ يسترجع Alice وBob وCarol (قراءة وهمية) SERIALIZABLE يسترجع Alice وBob (تم تجنب القراءة الوهمية) COMMIT ; |
تُستخدم استراتيجيتان أساسيتان لمنع عمليات القراءة غير المتكررة والقراءة الوهمية. في الاستراتيجية الأولى، وهي التحكم بالتزامن القائم على الأقفال ، تُنفَّذ المعاملة الثانية بعد تنفيذ المعاملة الأولى أو التراجع عنها، مما يُنتج الجدول التسلسلي T1، T2 . أما في الاستراتيجية الثانية، وهي التحكم بالتزامن متعدد الإصدارات ، فتُنفَّذ المعاملة الثانية فورًا، بينما تستمر المعاملة الأولى، التي بدأت قبل المعاملة الثانية، في العمل على لقطة قديمة من قاعدة البيانات أُخذت في بداية المعاملة الأولى. وعندما تحاول المعاملة الأولى التنفيذ، إذا كانت نتيجة التنفيذ تُطابق الجدول التسلسلي T1، T2 ، فسيتم تنفيذ المعاملة الأولى؛ وإلا، سيحدث تعارض في التنفيذ، وسيتم التراجع عن المعاملة الأولى مع فشل في التسلسل.
في ظل التحكم بالتزامن القائم على الأقفال، قد تحدث عمليات قراءة غير قابلة للتكرار وقراءات وهمية عندما لا يتم الحصول على أقفال القراءة عند تنفيذ استعلام SELECT، أو عندما يتم تحرير الأقفال المكتسبة على الصفوف المتأثرة بمجرد تنفيذ استعلام SELECT. في ظل التحكم بالتزامن متعدد الإصدارات، قد تحدث عمليات قراءة غير قابلة للتكرار وقراءات وهمية عندما يتم تخفيف شرط وجوب التراجع عن معاملة متأثرة بتعارض الالتزام.
مستويات العزل
من بين خصائص ACID الأربع في نظام إدارة قواعد البيانات ، تُعد خاصية العزل الأكثر تهاونًا. عند محاولة الحفاظ على أعلى مستوى من العزل، عادةً ما يقوم نظام إدارة قواعد البيانات بتأمين البيانات، مما قد يؤدي إلى فقدان التزامن ، أو يُطبّق نظام تحكم في التزامن متعدد الإصدارات . يتطلب هذا إضافة منطق برمجي لضمان عمل التطبيق بشكل صحيح.
تُوفر معظم أنظمة إدارة قواعد البيانات مستويات عزل متعددة للمعاملات ، والتي تتحكم في درجة التأمين التي تحدث عند اختيار البيانات. في العديد من تطبيقات قواعد البيانات، يُمكن تصميم غالبية معاملات قاعدة البيانات بحيث لا تتطلب مستويات عزل عالية (مثل مستوى SERIALIZABLE)، مما يُقلل من عبء التأمين على النظام. يجب على المبرمج تحليل كود الوصول إلى قاعدة البيانات بدقة لضمان عدم تسبب أي تخفيف للعزل في أخطاء برمجية يصعب اكتشافها. في المقابل، يؤدي استخدام مستويات عزل أعلى إلى زيادة احتمالية حدوث حالة جمود ، الأمر الذي يتطلب أيضًا تحليلًا دقيقًا وتقنيات برمجة مُتقنة لتجنبها.
بما أن كل مستوى عزل أقوى من المستويات الأدنى منه، بحيث لا يسمح أي مستوى عزل أعلى بإجراء محظور من قبل مستوى أدنى، فإن المعيار يسمح لنظام إدارة قواعد البيانات بتشغيل معاملة عند مستوى عزل أقوى من المستوى المطلوب (على سبيل المثال، قد يتم تنفيذ معاملة "قراءة ملتزمة" فعليًا عند مستوى عزل "قراءة قابلة للتكرار").
مستويات العزل المحددة بواسطة معيار ANSI / ISO SQL مدرجة على النحو التالي.
قابل للتسلسل
هذا هو أعلى مستوى للعزل.
في أنظمة إدارة قواعد البيانات التي تعتمد على التحكم بالتزامن باستخدام الأقفال ، تتطلب قابلية التسلسل تحرير أقفال القراءة والكتابة (المكتسبة على البيانات المختارة) عند انتهاء المعاملة. كما يجب الحصول على أقفال النطاق عند استخدام عبارة WHERE ذات نطاق في استعلام SELECT ، وذلك لتجنب ظاهرة القراءة الوهمية .
عند استخدام التحكم بالتزامن غير القائم على الأقفال، لا يتم الحصول على أي أقفال؛ ومع ذلك، إذا اكتشف النظام تعارضًا في الكتابة بين عدة معاملات متزامنة، يُسمح لمعاملة واحدة فقط بالالتزام. راجع عزل اللقطات لمزيد من التفاصيل حول هذا الموضوع.
من : (مسودة المراجعة غير الرسمية الثانية) ISO/IEC 9075:1992، لغة قواعد البيانات SQL - 30 يوليو 1992: يُضمن أن يكون تنفيذ معاملات SQL المتزامنة على مستوى العزل SERIALIZABLE قابلاً للتسلسل. يُعرَّف التنفيذ القابل للتسلسل بأنه تنفيذ عمليات معاملات SQL المتزامنة بحيث يُنتج نفس تأثير التنفيذ التسلسلي لتلك المعاملات نفسها. التنفيذ التسلسلي هو الذي تُنفَّذ فيه كل معاملة SQL حتى اكتمالها قبل بدء المعاملة التالية.
قراءات قابلة للتكرار
في مستوى العزل هذا، يحتفظ نظام إدارة قواعد البيانات الذي يعتمد على التحكم في التزامن باستخدام الأقفال بأقفال القراءة والكتابة (المكتسبة على بيانات محددة) حتى نهاية المعاملة. ومع ذلك، لا تتم إدارة أقفال النطاق ، لذا قد تحدث عمليات قراءة وهمية .
قد يحدث انحراف في الكتابة عند هذا المستوى من العزل في بعض الأنظمة. يُعرف انحراف الكتابة بأنه ظاهرة تسمح فيها معاملتان مختلفتان (قرأتا الأعمدة التي تُحدِّثانها مسبقًا) بالكتابة إلى نفس العمود (أو الأعمدة) في جدول، مما ينتج عنه احتواء العمود على بيانات مختلطة من المعاملتين. [ 3 ] [ 4 ]
اقرأ ما تم الالتزام به
في مستوى العزل هذا، يحتفظ نظام إدارة قواعد البيانات الذي يعتمد على التحكم في التزامن باستخدام الأقفال بأقفال الكتابة (المكتسبة على البيانات المختارة) حتى نهاية المعاملة، بينما تُحرر أقفال القراءة بمجرد تنفيذ عملية SELECT (لذا قد تحدث ظاهرة القراءة غير المتكررة في هذا المستوى من العزل). وكما في المستوى السابق، لا تتم إدارة أقفال النطاق .
ببساطة، يُعدّ "القراءة الملتزمة" مستوى عزل يضمن أن أي بيانات تُقرأ تُلتزم فور قراءتها. فهو يمنع القارئ من رؤية أي قراءة وسيطة غير ملتزمة أو "غير مُعدّلة". ولا يضمن بأي حال من الأحوال أنه إذا أعادت المعاملة إصدار أمر القراءة، فستجد نفس البيانات؛ فالبيانات قابلة للتغيير بعد قراءتها.
اقرأ دون التزام
هذا هو أدنى مستوى للعزل. في هذا المستوى، يُسمح بالقراءات غير الملتزمة ، لذا قد ترى معاملة ما تغييرات لم يتم الالتزام بها بعد أجرتها معاملات أخرى.
مستوى العزل الافتراضي
يختلف مستوى العزل الافتراضي لأنظمة إدارة قواعد البيانات اختلافًا كبيرًا. تسمح معظم قواعد البيانات التي تدعم المعاملات للمستخدم بتحديد أي مستوى عزل. كما تتطلب بعض أنظمة إدارة قواعد البيانات استخدام صيغة إضافية عند تنفيذ عبارة SELECT للحصول على أقفال (مثل SELECT ... FOR UPDATE للحصول على أقفال كتابة حصرية على الصفوف التي تم الوصول إليها).
ومع ذلك، فقد تعرضت التعريفات المذكورة أعلاه لانتقادات لكونها غامضة، ولأنها لا تعكس بدقة العزلة التي توفرها العديد من قواعد البيانات:
- تُبين هذه الورقة البحثية عددًا من نقاط الضعف في منهجية الشذوذ لتحديد مستويات العزل. فظواهر ANSI الثلاث غامضة، وحتى في أكثر تفسيراتها مرونةً، لا تستبعد بعض السلوكيات الشاذة... وهذا يؤدي إلى نتائج غير بديهية. على وجه الخصوص، تتميز مستويات العزل القائمة على الأقفال بخصائص مختلفة عن نظيراتها في ANSI. وهذا أمرٌ مُقلق لأن أنظمة قواعد البيانات التجارية تستخدم عادةً تطبيقات الأقفال. إضافةً إلى ذلك، لا تُميز ظواهر ANSI بين عدد من أنواع سلوك مستويات العزل الشائعة في الأنظمة التجارية. [ 5 ]
وهناك أيضًا انتقادات أخرى تتعلق بتعريف العزل في معيار ANSI SQL، حيث أنه يشجع المنفذين على القيام بـ "أشياء سيئة":
- ... يعتمد هذا الأمر، بطرق دقيقة، على افتراض استخدام آلية تأمين للتحكم في التزامن، بدلاً من آلية تزامن تفاؤلية أو متعددة الإصدارات. وهذا يعني أن الدلالات المقترحة غير محددة بدقة . [ 6 ]
مستويات العزل مقابل ظواهر القراءة
اقرأ الظواهر مستوى العزل | قراءة جريئة | قراءة غير قابلة للتكرار | قراءة وهمية |
|---|---|---|---|
| قابل للتسلسل | لا | لا | لا |
| قراءة متكررة | لا | لا | نعم |
| اقرأ ما تم الالتزام به | لا | نعم | نعم |
| اقرأ دون التزام | نعم | نعم | نعم |
لا يُعدّ التسلسل الشاذ مرادفًا للتسلسل. أي أنه من الضروري، ولكن ليس كافيًا، أن يكون الجدول الزمني القابل للتسلسل خاليًا من جميع أنواع الظواهر الثلاثة. [ 5 ]
انظر أيضاً
مراجع
- ↑ "مستويات العزل في محرك قاعدة البيانات"، TechNet، مايكروسوفت، https://technet.microsoft.com/en-us/library/ms189122(v=SQL.105).aspx
- ١ ٢ "بنية أنظمة معالجة المعاملات"، الفصل ٢٣، تطور أنظمة المعالجة، قسم علوم الحاسوب، جامعة ستوني بروك، تم الاطلاع عليه في ٢٠ مارس ٢٠١٤، http://www.cs.sunysb.edu/~liu/cse315/23.pdf
- ↑ فلاد ميهالسا (2015-10-20). "دليل المبتدئين لقراءة وكتابة الظواهر المائلة" .
- ↑ "ويكي Postgresql - SSI" .
- 1 2 "نقد لمستويات عزل ANSI SQL" (ملف PDF) . تم الاطلاع عليه بتاريخ 29 يوليو 2012 .
- ↑ سيلزفورس (2010-12-06). "شهادات العملاء (SimpleGeo، CLOUDSTOCK 2010)" . www.DataStax.com: DataStax . تم الاطلاع عليه بتاريخ 2010-03-09 .
(انظر أعلاه عند الدقيقة 13:30 تقريبًا من البث المباشر!)
روابط خارجية
- مفاهيم قاعدة بيانات أوراكل® ، الفصل 13: تزامن البيانات واتساقها، والظواهر التي يمكن تجنبها، ومستويات عزل المعاملات
- مرجع لغة SQL لقاعدة بيانات Oracle® ، الفصل 19: عبارات SQL: من SAVEPOINT إلى UPDATE ، و SET TRANSACTION
- في JDBC : حقول الثوابت الخاصة بالاتصال ، Connection.getTransactionIsolation() ، Connection.setTransactionIsolation(int)
- في إطار عمل Spring : @Transactional ، العزل
- بي. بايليس. متى يكون "الحموضة" حموضة؟ نادراً.
- إدارة البيانات
- معالجة المعاملات
