سؤال

يبدو أن هناك آراء مختلفة جدا حول استخدام المعاملات القراءة من قاعدة البيانات.

اقتباس من DeveloperWorks المادة استراتيجيات المعاملات:نماذج واستراتيجيات عامة:

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

كما يتعارض مع الرأي هناك الاقتباس التالي من السبات الوثائق غير المعاملات الوصول إلى البيانات و الوضع التلقائي الالتزام

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

هناك أيضا نقاش مماثل على EclipseLink القائمة البريدية هنا.

إذن أين تكمن الحقيقة ؟ هي المعاملات للقراءة أفضل الممارسات أو لا ؟ إذا كان كلاهما حلول ناجعة ، ما هي معايير استخدام المعاملات ؟

بقدر ما أستطيع أن أرى ذلك إلا فرقا إذا عزل مستوى أعلى من 'قراءة ارتكبت'.هل هذا صحيح ؟

ما هي الخبرات و التوصيات ؟

هل كانت مفيدة؟

المحلول

ستيفن Devijver بعض أسباب وجيهة ابتداء من المعاملات حتى لو كانت العمليات هي فقط قراءة قاعدة البيانات:

  • تعيين مهلة أو وسائط قفل
  • تعيين مستوى عزل

SQL القياسية يتطلب ذلك حتى استعلام يجب بدء معاملة جديدة إذا كان هناك أي صفقة حاليا في التقدم.هناك DBMS حيث أن ليس ما يحدث - مع وضع autocommit على سبيل المثال (بيان يبدأ معاملة ويرتكب فورا بيان يكمل).أخرى DBMS الإدلاء ببيانات الذرية (فعال autocommit) بشكل افتراضي ، ولكن بداية المعاملة الصريحة مع عبارة مثل 'بدء العمل' ، إلغاء autocommit حتى COMMIT أو العودة إلى الحالة السابقة (IBM ينفورميكس ديناميكية الخادم هو واحد من هذا القبيل - عندما تكون قاعدة البيانات لا وضع ANSI).

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

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

نصائح أخرى

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

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

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

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

هنا هو مادة لطيفة تلخيص كل شيء . التفاصيل هي أوراكل محددة، ولكن المفاهيم هي عامة.

يرجى ملء

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

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

قد تكون

وDBA لرصد النشاط التراجع، وأي سلوك التراجع الافتراضي مزعجة لهم في هذه الحالة.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top