database - ونظم - مميزات قواعد البيانات




هل هناك حاجة إلى سلوك المعاملات خارج قواعد البيانات؟ (5)

أنظمة الملفات الحديثة لها معاملات. فهي شفافة فقط للمستخدم النهائي.

نتفس و شفس و جفس و EXT3 و ريسيرفس كل ذلك، على سبيل المثال لا الحصر.

وهذا فقط الداخلية لنظام الملفات. العديد من أنظمة التشغيل أيضا دعم تأمين الملفات (انظر قطيع (2) في * نيكس العالم، على سبيل المثال) مع الحصري (الكتابة) والأقفال المشتركة (قراءة).

تحرير: إذا كنت تفكر في ذلك، أنظمة الملفات ليس لديها مستويات عزل مثل دبس الحديثة لأنه بمجرد الانتهاء من قراءة ملف، يمكنك تقليديا إغلاقه إذا كنت لا قفله. ثم إعادة فتحه عندما تريد الكتابة إليه.

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

  • أنظمة الملفات
  • خدمات الويب (لا شيء استخدمته)

وحتى في البيانات غير الثابتة، كثيرا ما يكون من المفيد التراجع عن كتلة العمل، في أعقاب استثناء. أي من هياكل البيانات القياسية تحصل مع لغة، ودعم المعاملات.

ما أود أن أعرفه هو، لماذا قواعد البيانات حالة خاصة؟

هل هناك أي روابط مفيدة لموضوع سلوك المعاملات خارج جانب قواعد البيانات؟


التخريب يرتكب هي المعاملات: فهي ذرية حقا، لذلك التزام متقطع لا يترك المستودع في حالة غير متناسقة.


يستخدم كلوجور ذاكرة المعاملات البرمجيات ، والذي يستخدم المعاملات لجعلها سهلة وآمنة لكتابة برامج متعددة الخيوط دون أقفال يدوية. كلوجور له هياكل البيانات غير قابلة للتغيير مع المراجع القابلة للتبديل لهم، والمعاملات مطلوبة لتغيير المراجع.


لا بد لي من الاختلاف باحترام: أنظمة المعاملات ليست محركات قاعدة البيانات تلقائيا وحصريا، على العكس تماما ...

لقد نفذت آلية معاملة الطلب (في .NET) التي تختلف عن معاملة قاعدة البيانات. هو في الواقع من السهل بدلا (بضع ساعات العمل بما في ذلك وحدة اختبار جناح). هو مكتوب تماما في C # مع عدم وجود تبعيات على أي وظيفة قاعدة بيانات أو أي عنصر آخر. ولكن أولا بعض السياق ...

هذه الميزة غير قاعدة البيانات المعاملة موجود في عدة مظاهر على منصة جافا، مثل مع إجبس، إسبس، جمس، وغالبا ما يرتبط مع بم. بعض هذه المظاهر تستخدم قاعدة بيانات أساسية، ولكن ليس دائما وليس من الضرورة. منصات أخرى لها مظاهر مماثلة، مثل مسمق.

لا تقوم معظم أنظمة التحكم بالإصدار القديم بتنفيذ دلالات معاملات أسيد. كما قال داء، كفس لا ولكن التخريب (خلفها) لا. المصدر البصري الآمن لا. إذا كنت تبحث التخريب، يمكنك أن تجد المقارنة المخططات التي تجعل نقطة من هذا.

الآن لنقطة حرجة، معاملة قاعدة البيانات أو ما يعادلها لا يضمن منطق الأعمال آمنة. على الرغم من أنني أحب التخريب، فمن السخرية مثال عظيم على هذه الحقيقة.

يمكنك استخدام سوبفيرزيون دينيا، جنبا إلى جنب مع النصي البناء الآلي (أمر واحد الذي يجمع والاختبارات، وحزم التطبيق الخاص بك)، ولا تزال ارتكاب بناء مكسورة إلى مستودع التحكم في المصدر. لقد رأيت ذلك مرارا وتكرارا. وبطبيعة الحال، فإنه من الأسهل مع أدوات التحكم في المصدر غير أسيد القائم على المعاملة مثل فس. ولكن من الصدمة لكثير من الناس لمعرفة أنه من الممكن مع أدوات مثل التخريب.

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

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

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

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

لذلك، خلاصة، كل معاملة لها نطاق أو سياق يحد من حمايتها. وغالبا ما تتضمن المعاملات التجارية منطقا يتجاوز نطاق آليات المعاملات (مثل محرك قاعدة البيانات) الذي نستخدمه عادة. قد تضطر إلى تعويض الفرق. في حالات نادرة، قد يكون من المنطقي حتى كتابة آلية المعاملات الخاصة بك للقيام بذلك.

لقد صادفت إعادة كتابة نظام أعمال حاسم لشركة متواضعة تسعين شخصا. لقد وجدت أنه من الضروري تنفيذ مثل هذه الآلية، ووجدت التجربة لتكون سهلة، جديرة بالاهتمام، ومجزية. وأود أن أفعل ذلك مرة أخرى، ربما أكثر قليلا بسهولة، ولكن أود دائما السؤال لماذا لا يمكن التمسك مجرد قاعدة البيانات الصفقة.


وأعتقد أن السبب في أن المعاملات ينظر فقط في قواعد البيانات هو أنه، بحكم التعريف، والنظم التي توفر المعاملات تسمى قواعد البيانات. هذا يبدو دائري، لذلك يجب أن أوضح.

دعم المعاملات هو الميزة التي توفر خصائص أسيد . في المصطلحات للشخص العادي، وهذا يعني أن الصفقة هو شيء يسمح ل 1. حزمة عدد من العمليات السرية في حزمة واحدة إما أن تنجح ككل أو تفشل ككل 2. إخفاء التغييرات غير الملتزم بها للمستخدمين المتزامنة، بحيث 3. المستخدمين المتزامنين في جميع الأوقات، نظرة "متسقة" للنظام.

نظم الملفات تقدم تقليديا بعض آلية تأمين، ولكن هذا يختلف عن توفير المعاملات. ومع ذلك، فإن جميع أنظمة الملفات لديها بعض الخصائص الذرية. على سبيل المثال، إذا كانت لديك دلائل /a/ و /b/ ، وكنت تحاول في نفس الوقت تنفيذ mv /a /b/a و mv /b /a/b ، لن تنجح سوى واحدة من تلك العملية دون المساس بالنزاهة. ما نظم الملفات عموما تفتقر، ولكن القدرة على حزم عمليات متعددة في حزمة واحدة معزولة ذرية.

وذكر الجواب التخريب. جميع أنظمة التحكم الإصدار العاقل لها معاملات. عند الالتزام بملفات متعددة، النظام إما أبلي ارتكاب تماما، أو يرفض ذلك تماما (باستثناء كفس، أنني لا تعتبر عاقل). سبب الرفض هو دائما تغيير متزامن. إصدار نظام مراقبة منفذة واعية جدا من الحفاظ على قاعدة بيانات.

وذكر إجابة أخرى أنظمة الرسائل باعتبارها المعاملات. لم أقرأ المواد المرتبطة، ولكن الجواب نفسه ذكر فقط التسليم الذري للرسائل. هذه ليست المعاملات.

لم أسمع من كلوجور قبل بريان C. ذكر هنا. ويبدو لي أنه في الواقع تنفيذ للمعاملات خارج سياق قاعدة البيانات. هنا التركيز هو مراقبة التزامن، بدلا من الحفاظ على اتساق البيانات المعمرة.

لذا، وباستثناء كلوجور، يبدو أن أي نظام يحتاج إلى معاملات إما يستخدم قاعدة بيانات أساسية، أو يتحول نفسه إلى قاعدة بيانات.





unit-of-work