2015-06-11 5 views
5

मैंने लेनदेन अलगाव स्तर के बारे में पढ़ा है। इसका उपयोग समांतर लेनदेन निष्पादन त्रुटियों को रोकने के लिए किया जाता है। यह काफी स्पष्ट है। इकाइयों के लिए उपलब्ध लॉकिंग मोड भी हैं। मैं समझता हूं कि वे कैसे काम करते हैं।लेनदेन अलगाव और इकाई लॉकिंग के बीच जेपीए अंतर

लेकिन मुझे कारण नहीं मिल रहा है कि मुझे लॉकिंग की आवश्यकता क्यों है? मैंने पहले ही लेनदेन अलगाव स्तर का उपयोग किया है। मुझे लॉकिंग का उपयोग क्यों करना है? अलगाव स्तर और लॉकिंग एक ही नौकरी करते हैं?

+0

लॉकिंग डेटाबेस स्तर पर भी हो सकता है, ताकि वेब अनुप्रयोग के बाहर अन्य ऑपरेशन डेटाबेस डेटा को संशोधित न करें। –

+0

तो जब मैं लॉकिंग द्वारा कार्यान्वित एनोटेशन में लेनदेन अलगाव स्तर का उपयोग करता हूं? – bossman

उत्तर

5

परिचय

विभिन्न लॉकिंग प्रकार और अलगाव स्तर हैं। locking types (ऑप्टिमाइस्टिक *) में से कुछ जेपीए-स्तर (जैसे। एक्लिप्ससेंक या हाइबरनेट में) पर लागू किए गए हैं, और अन्य (PESSIMISTIC *) को जेपीए-प्रदाता द्वारा डीबी स्तर पर सौंप दिया जाता है।

स्पष्टीकरण

अलगाव के स्तर और ताला ही नहीं हैं, लेकिन वे कहीं एक दूसरे को काटना कर सकते हैं। यदि आपके पास सर्जिकिज्ड अलगाव स्तर (जो प्रदर्शन-लालची है) है, तो आपको जेपीए में करने के लिए किसी भी लॉकिंग की आवश्यकता नहीं है, क्योंकि यह डीबी द्वारा पहले ही किया जा चुका है। दूसरी तरफ, यदि आप READ_COMMITTED चुनते हैं, तो आपको कुछ लॉकिंग करने की आवश्यकता हो सकती है, क्योंकि अकेले अलगाव स्तर आपको गारंटी नहीं देगा कि इस बीच प्रवेश दूसरे लेनदेन द्वारा नहीं बदला जाता है।

+1

मुझे लगता है, डेटाबेस अलगाव स्तर (सीरियलज़ेबल सहित निराशावादी लॉकिंग) सामान्य इंटरैक्टिव वेब अनुप्रयोगों के लिए स्केल नहीं करते हैं, क्योंकि सामान्य रूप से अलग-अलग लेन-देन में पढ़ना और लिखना दोनों ही होते हैं। इसके लिए एक डेटाबेस कनेक्शन और लेन-देन की आवश्यकता होती है जो संपादन की पूरी अवधि (पढ़ने के लिए पढ़ने से) के लिए खुली रहती है जो इंटरैक्टिव वेब अनुप्रयोगों में बहुत अवांछनीय है। – Tiny

4

दोनों लेनदेन अलगाव और जेपीए इकाई लॉकिंग समवर्ती नियंत्रण तंत्र हैं।

transaction isolation जेडीबीसी कनेक्शन स्तर पर लागू होता है और दायरा लेन-देन जीवन-चक्र स्वयं होता है (आप अपने वर्तमान चल रहे लेनदेन से लेनदेन अलगाव नहीं बदल सकते हैं)। आधुनिक डेटाबेस आपको 2PL (two-phase locking) अलगाव स्तर और MVCC वाले (SNAPSHOT_ISOLATION या PostgreSQL अलगाव स्तर) दोनों का उपयोग करने की अनुमति देता है। एमवीसीसी में, पाठक लेखकों को अवरुद्ध नहीं करते हैं और लेखकों पाठकों को अवरुद्ध नहीं करते हैं (केवल लेखक लेखकों को ब्लॉक करते हैं)।

  1. स्पष्ट आशावादी लॉक मोड:

आशावादी लॉकिंग अद्यतन/डिलीट स्टेटमेंट में संस्करण जांच का उपयोग करता है और संस्करण विसंगतियों पर विफल रहता है।

  1. स्पष्ट निराशावादी ताला मोड:

निराशावादी ताला मोड एक डेटाबेस विशेष ताला सिंटैक्स का उपयोग करें पढ़ने (साझा) या लिखने (अनन्य) ताले (उदाहरण के लिए) प्राप्त करने के लिए।अद्यतन करें ... अद्यतन के लिए)।

एक explicit lock mode उपयुक्त है जब आप निम्न-स्थिरता अलगाव स्तर (READ_COMMITTED) पर चलते हैं और आप ताले हासिल करना चाहते हैं जिनके दायरे upgraded from query life-time to a transaction life-time हैं।

संबंधित मुद्दे