البحث الرئيسي في هذه المقالة هو مقدمة وأمثلة لمستوى عزل معاملات الربيع ، على النحو التالي.
عندما تعمل معاملتان على السجلات في نفس قاعدة البيانات ، ما هو التأثير بينهما؟ هذا يظهر مفهوم مستوى عزل المعاملة. إن عزل قاعدة البيانات له علاقة كبيرة بالتحكم في التزامن. يعد مستوى عزل قاعدة البيانات جزءًا من حمض الخاصية المعاملات لقاعدة البيانات. الحمض ، وهذا هو ، الذرة ، الاتساق ، العزلة والمتانة. يحتوي Spring على أربعة مستويات عزل المعاملات: READ_UNCOMMITTED ، READ_COMMITTED ، REPEATABLE_READ و SERIALIZABLE . آخر هو مستوى العزلة الافتراضي لقاعدة البيانات DEFAULT ، و MySQL الافتراضيات إلى REPEATABLE_READ .
دعونا نلقي نظرة عليه بالتفصيل أدناه.
كما يوحي الاسم ، READ_UNCOMMITTED يعني أن أحد المعاملة يمكن أن تقرأ سجلات المعاملات التي لم يتم ارتكاب معاملة أخرى. بمعنى آخر ، يمكن للمعاملة قراءة البيانات التي لا تزال غير ملتزم بها المعاملات الأخرى. هذا هو أضعف مستوى العزلة لمعاملات الربيع. انظر الشكل أدناه ، يتم تشغيل المعاملة A ويتم كتابة سجل. في هذا الوقت ، تقرأ المعاملة B البيانات وتقرأ هذا السجل ، ولكن بعد ذلك المعاملة A التراجع. لذلك ، فإن البيانات التي تقرأها المعاملة B غير صالحة (قاعدة البيانات في حالة غير صالحة). هذا الموقف يسمى القراءة القذرة. بالإضافة إلى مشكلة القراءة القذرة ، قد يكون READ_UNCOMMITTED أيضًا non-repeatable read (وليس القراءة المتكررة) phantom read (القراءة الفانتوم).
يشير مستوى العزل READ_COMMITTED إلى أن المعاملة يمكن أن تقرأ فقط السجلات الملتزمة ولا يمكنها قراءة السجلات غير الملتزمات. بمعنى آخر ، يمكن للمعاملة قراءة البيانات الملتزمة فقط ، ولا يمكنها قراءة البيانات غير الملتزم بها. لذلك ، لم يعد موقف القراءة القذرة يحدث ، ولكن قد تحدث مشاكل أخرى. انظر الصورة أدناه.
بين اثنين من قراءات المعاملة أ ، المعاملة ب تعدل هذا السجل ويرتكبها. لذلك ، فإن السجلات تقرأ قبل وبعد المعاملة أ غير متسقة. تسمى هذه المشكلة القراءة غير القابلة للتكرار (لا يمكن قراءتها مرارًا وتكرارًا). (تقرأ السجلات بشكل غير متسق بين المرات ، وستجد القراءات المتكررة مشاكل.)
بالإضافة إلى مشكلة القراءة غير القابلة للتكرار ، قد تواجه READ_COMMITTED مشكلة في قراءة فانتوم.
repertable_read تعني أن المعاملة يمكنها قراءة سجل من قاعدة البيانات عدة مرات ، ويقرأ السجل عدة مرات هو نفسه. يمكن أن يتجنب مستوى العزلة مشكلة القراءة القذرة والقراءة غير القابلة للتكرار ، ولكن قد تحدث مشكلة القراءة الوهمية. كما هو مبين في الشكل أدناه.
تقرأ المعاملة A سلسلة من السجلات من قاعدة البيانات مرتين ، حيث تقوم المعاملة B بإدراج سجل وتقديمها. عندما تقرأ المعاملة A في المرة الثانية ، سيتم قراءة السجل الذي تم إدراج المعاملة B للتو. خلال المعاملة ، تكون سلسلة من السجلات التي تقرأها المعاملة A مرتين غير متسقة ، وتسمى هذه المشكلة قراءة Phantom.
قابلة للتسلسل هو أقوى مستوى عزل الربيع. عند تنفيذ المعاملة ، سيتم قفلها على جميع المستويات ، مثل القراءة والكتابة ، كما لو تم تنفيذ المعاملة بطريقة متسلسلة ، بدلاً من الحدوث معًا. هذا يمنع القراءة القذرة ، القراءة غير القابلة للتكرار والقراءة الوهمية ، ولكنه سيؤدي إلى تدهور الأداء.
MySQL الافتراضيات إلى REPEATABLE_READ .
دعونا نلقي نظرة على مثال أدناه. افتح معاملة في قاعدة البيانات MySQL ، ولا ترتكب. ثم تقرأ صفقة أخرى السجل.
في البداية ، تكون السجلات الموجودة في قاعدة البيانات كما هو موضح في الشكل
بعد ذلك ، افتح المعاملة A في قاعدة البيانات MySQL وأدخل سجلًا.
يتم تكوين سمة المعاملة لفئة الخدمة في الخدمة كما READ_UNCOMMITTED .
transactional (العزلة = العزلة {accountdao.outmoney (من ، المال) ؛ accountdao.inmoney (to ، money) ؛} public void readalluser () {list <counter> accounts = accountDao.getAlluser () ؛ for (حساب الحساب: حساب) {system.out.println (حساب) ؛}}}}}}}}}}}}}قم بتشغيل فئة الاختبار التالية
حزمة com.chris.service ؛ استيراد org.junit.assert org.springframework.test.context.junit4.springjunit4classrunner {accountservice.readalluser () ؛}}النتائج كما يلي:
يمكن ملاحظة أن هذه المعاملة تقرأ بيانات غير ملتزم بها.
في هذا الوقت ، تراجع المعاملة التي تم فتحها في MySQL.
mysql> التراجع.
قم بتشغيل البرنامج مرة أخرى والنتيجة
حساب [الاسم = مايكل ، المال = 1000.0]
حساب [name = Jane ، Money = 1000.0]
الحساب [name = kate ، المال = 1000.0]
ما سبق هو كل محتوى هذه المقالة حول مقدمة مستوى عزل المعاملة الربيع وتحليل الأمثلة. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!