आइसोलेशन (डेटाबेस सिस्टम): Difference between revisions

From Vigyanwiki
(Created page with "{{Refimprove|date=January 2009}} डेटाबेस सिस्टम में, अलगाव यह निर्धारित करता है कि डे...")
 
No edit summary
Line 1: Line 1:
{{Refimprove|date=January 2009}}
{{Refimprove|date=January 2009}}
[[डेटाबेस]] सिस्टम में, अलगाव यह निर्धारित करता है कि डेटाबेस लेनदेन की अखंडता अन्य उपयोगकर्ताओं और प्रणालियों के लिए कैसे दिखाई देती है।
[[डेटाबेस]] सिस्टम में, आइसोलेशन यह निर्धारित करता है कि डेटाबेस लेनदेन की अखंडता अन्य उपयोगकर्ताओं और प्रणालियों के लिए कैसे दिखाई देती है।


एक कम अलगाव स्तर एक ही समय में एक ही डेटा तक पहुंचने के लिए कई उपयोगकर्ताओं की क्षमता को बढ़ाता है, लेकिन कॉन्करेंसी (कंप्यूटर विज्ञान) प्रभावों की संख्या को बढ़ाता है (जैसे कि राइट-रीड कॉन्फ्लिक्ट या खोए हुए अपडेट) उपयोगकर्ताओं का सामना हो सकता है। इसके विपरीत, एक उच्च आइसोलेशन स्तर उन समवर्ती प्रभावों के प्रकारों को कम करता है जिनका उपयोगकर्ता सामना कर सकते हैं, लेकिन इसके लिए अधिक सिस्टम संसाधनों की आवश्यकता होती है और संभावना बढ़ जाती है कि एक लेनदेन दूसरे को ब्लॉक कर देगा।<ref>"Isolation Levels in the Database Engine", TechNet, Microsoft, https://technet.microsoft.com/en-us/library/ms189122(v=SQL.105).aspx</ref>
न्यून आइसोलेशन स्तर एक ही समय में एक ही डेटा तक पहुंचने के लिए कई उपयोगकर्ताओं की क्षमता को बढ़ाता है, लेकिन कॉन्करेंसी (कंप्यूटर विज्ञान) प्रभावों की संख्या को बढ़ाता है (जैसे कि राइट-रीड कॉन्फ्लिक्ट या खोए हुए अपडेट) उपयोगकर्ताओं का सामना हो सकता है। इसके विपरीत, उच्च आइसोलेशन स्तर उन समवर्ती प्रभावों के प्रकारों को कम करता है जिनका उपयोगकर्ता सामना कर सकते हैं, लेकिन इसके लिए अधिक सिस्टम संसाधनों की आवश्यकता होती है और संभावना बढ़ जाती है कि एक लेनदेन दूसरे को ब्लॉक कर देगा।<ref>"Isolation Levels in the Database Engine", TechNet, Microsoft, https://technet.microsoft.com/en-us/library/ms189122(v=SQL.105).aspx</ref>
अलगाव को आमतौर पर डेटाबेस स्तर पर एक संपत्ति के रूप में परिभाषित किया जाता है जो परिभाषित करता है कि कैसे या कब{{clarify|date=June 2021}} एक ऑपरेशन द्वारा किए गए परिवर्तन दूसरों को दिखाई देने लगते हैं। पुरानी प्रणालियों पर, इसे व्यवस्थित रूप से लागू किया जा सकता है, उदाहरण के लिए अस्थायी तालिकाओं के उपयोग के माध्यम से। द्वि-स्तरीय प्रणालियों में, अलगाव बनाए रखने के लिए लेनदेन प्रसंस्करण (टीपी) प्रबंधक की आवश्यकता होती है। एन-टियर सिस्टम में (जैसे कि कई वेबसाइटें एक उड़ान में आखिरी सीट बुक करने का प्रयास करती हैं), बुकिंग करने और ग्राहक को पुष्टि भेजने के लिए संग्रहीत प्रक्रियाओं और लेनदेन प्रबंधन के संयोजन की आवश्यकता होती है।<ref>"The Architecture of Transaction Processing Systems", Chapter 23, Evolution of Processing Systems, Department of Computer Science, Stony Brook University, retrieved 20 March 2014, http://www.cs.sunysb.edu/~liu/cse315/23.pdf</ref>
आइसोलेशन को आमतौर पर डेटाबेस स्तर पर एक संपत्ति के रूप में परिभाषित किया जाता है जो परिभाषित करता है कि कैसे या कब{{clarify|date=June 2021}} एक ऑपरेशन द्वारा किए गए परिवर्तन दूसरों को दिखाई देने लगते हैं। पुरानी प्रणालियों पर, इसे व्यवस्थित रूप से लागू किया जा सकता है, उदाहरण के लिए अस्थायी तालिकाओं के उपयोग के माध्यम से। द्वि-स्तरीय प्रणालियों में, आइसोलेशन बनाए रखने के लिए लेनदेन प्रसंस्करण (टीपी) प्रबंधक की आवश्यकता होती है। एन-टियर सिस्टम में (जैसे कि कई वेबसाइटें एक उड़ान में आखिरी सीट बुक करने का प्रयास करती हैं), बुकिंग करने और ग्राहक को पुष्टि भेजने के लिए संग्रहीत प्रक्रियाओं और लेनदेन प्रबंधन के संयोजन की आवश्यकता होती है।<ref>"The Architecture of Transaction Processing Systems", Chapter 23, Evolution of Processing Systems, Department of Computer Science, Stony Brook University, retrieved 20 March 2014, http://www.cs.sunysb.edu/~liu/cse315/23.pdf</ref>
अलगाव चार एसीआईडी ​​​​गुणों में से एक है, [[परमाणुता (डेटाबेस सिस्टम)]], [[संगति (डेटाबेस सिस्टम)]] और [[स्थायित्व (डेटाबेस सिस्टम)]] के साथ।
आइसोलेशन चार एसीआईडी ​​​​गुणों में से एक है, [[परमाणुता (डेटाबेस सिस्टम)]], [[संगति (डेटाबेस सिस्टम)]] और [[स्थायित्व (डेटाबेस सिस्टम)]] के साथ।


== समवर्ती नियंत्रण ==
== समवर्ती नियंत्रण ==
समवर्ती नियंत्रण में एक DBMS में अंतर्निहित तंत्र शामिल होते हैं जो अलगाव को संभालते हैं और संबंधित शुद्धता की गारंटी देते हैं। समवर्ती लेनदेन के सही निष्पादन की गारंटी देने के लिए और (विभिन्न तंत्रों के माध्यम से) अन्य DBMS प्रक्रियाओं की शुद्धता की गारंटी देने के लिए डेटाबेस और स्टोरेज इंजन दोनों द्वारा इसका भारी उपयोग किया जाता है। लेन-देन से संबंधित तंत्र आमतौर पर डेटाबेस डेटा एक्सेस ऑपरेशंस के समय ([[अनुसूची (कंप्यूटर विज्ञान)]]) को [[क्रमबद्धता]] और पुनर्प्राप्ति योग्यता अनुसूची गुणों के रूप में वर्णित कुछ आदेशों तक सीमित करते हैं। डेटाबेस एक्सेस ऑपरेशन निष्पादन को बाधित करने का मतलब आमतौर पर कम प्रदर्शन (निष्पादन की दरों से मापा जाता है), और इस प्रकार संगामिति नियंत्रण तंत्र को आमतौर पर बाधाओं के तहत सर्वोत्तम प्रदर्शन प्रदान करने के लिए डिज़ाइन किया गया है। अक्सर, जब संभव हो तो शुद्धता को नुकसान पहुँचाए बिना, बेहतर प्रदर्शन के लिए क्रमबद्धता संपत्ति से समझौता किया जाता है। हालाँकि, पुनर्प्राप्ति क्षमता से समझौता नहीं किया जा सकता है, क्योंकि आमतौर पर त्वरित डेटाबेस अखंडता उल्लंघन का परिणाम होता है।
समवर्ती नियंत्रण में एक DBMS में अंतर्निहित तंत्र शामिल होते हैं जो आइसोलेशन को संभालते हैं और संबंधित शुद्धता की गारंटी देते हैं। समवर्ती लेनदेन के सही निष्पादन की गारंटी देने के लिए और (विभिन्न तंत्रों के माध्यम से) अन्य DBMS प्रक्रियाओं की शुद्धता की गारंटी देने के लिए डेटाबेस और स्टोरेज इंजन दोनों द्वारा इसका भारी उपयोग किया जाता है। लेन-देन से संबंधित तंत्र आमतौर पर डेटाबेस डेटा एक्सेस ऑपरेशंस के समय ([[अनुसूची (कंप्यूटर विज्ञान)]]) को [[क्रमबद्धता]] और पुनर्प्राप्ति योग्यता अनुसूची गुणों के रूप में वर्णित कुछ आदेशों तक सीमित करते हैं। डेटाबेस एक्सेस ऑपरेशन निष्पादन को बाधित करने का मतलब आमतौर पर कम प्रदर्शन (निष्पादन की दरों से मापा जाता है), और इस प्रकार संगामिति नियंत्रण तंत्र को आमतौर पर बाधाओं के तहत सर्वोत्तम प्रदर्शन प्रदान करने के लिए डिज़ाइन किया गया है। अक्सर, जब संभव हो तो शुद्धता को नुकसान पहुँचाए बिना, बेहतर प्रदर्शन के लिए क्रमबद्धता संपत्ति से समझौता किया जाता है। हालाँकि, पुनर्प्राप्ति क्षमता से समझौता नहीं किया जा सकता है, क्योंकि आमतौर पर त्वरित डेटाबेस अखंडता उल्लंघन का परिणाम होता है।


[[डीबीएमएस]] में दो-चरण लॉकिंग सबसे आम लेन-देन समवर्ती नियंत्रण विधि है, जिसका उपयोग शुद्धता के लिए क्रमिकता और पुनर्प्राप्ति दोनों प्रदान करने के लिए किया जाता है। किसी डेटाबेस ऑब्जेक्ट तक पहुँचने के लिए किसी लेन-देन को पहले इस ऑब्जेक्ट के लिए [[लॉक (डेटाबेस)]] प्राप्त करने की आवश्यकता होती है। एक्सेस ऑपरेशन प्रकार (उदाहरण के लिए, किसी ऑब्जेक्ट को पढ़ना या लिखना) और लॉक प्रकार पर निर्भर करते हुए, लॉक को प्राप्त करना अवरुद्ध और स्थगित किया जा सकता है, यदि कोई अन्य लेन-देन उस ऑब्जेक्ट के लिए लॉक रखता है।
[[डीबीएमएस]] में दो-चरण लॉकिंग सबसे आम लेन-देन समवर्ती नियंत्रण विधि है, जिसका उपयोग शुद्धता के लिए क्रमिकता और पुनर्प्राप्ति दोनों प्रदान करने के लिए किया जाता है। किसी डेटाबेस ऑब्जेक्ट तक पहुँचने के लिए किसी लेन-देन को पहले इस ऑब्जेक्ट के लिए [[लॉक (डेटाबेस)]] प्राप्त करने की आवश्यकता होती है। एक्सेस ऑपरेशन प्रकार (उदाहरण के लिए, किसी ऑब्जेक्ट को पढ़ना या लिखना) और लॉक प्रकार पर निर्भर करते हुए, लॉक को प्राप्त करना अवरुद्ध और स्थगित किया जा सकता है, यदि कोई अन्य लेन-देन उस ऑब्जेक्ट के लिए लॉक रखता है।
Line 31: Line 31:
एक गंदा पठन (उर्फ अप्रतिबंधित निर्भरता) तब होता है जब एक लेन-देन एक पंक्ति को पुनः प्राप्त करता है जिसे किसी अन्य लेन-देन द्वारा अद्यतन किया गया है जो अभी तक प्रतिबद्ध नहीं है।
एक गंदा पठन (उर्फ अप्रतिबंधित निर्भरता) तब होता है जब एक लेन-देन एक पंक्ति को पुनः प्राप्त करता है जिसे किसी अन्य लेन-देन द्वारा अद्यतन किया गया है जो अभी तक प्रतिबद्ध नहीं है।


इस उदाहरण में, लेन-देन 1 आईडी 1 के साथ पंक्ति को पुनः प्राप्त करता है, फिर लेन-देन 2 पंक्ति को आईडी 1 के साथ अद्यतन करता है, और अंत में लेनदेन 1 आईडी 1 के साथ पंक्ति को फिर से प्राप्त करता है। अब यदि लेन-देन 2 अपने अपडेट को वापस ले लेता है (पहले से ही लेन-देन 1 द्वारा पुनर्प्राप्त किया गया है) या अन्य अपडेट करता है, तो लेन-देन में पंक्ति का दृश्य गलत हो सकता है। लेन-देन 1 में पढ़ा गया अलगाव स्तर पर, दूसरा लेन-देन 1 में चयन अद्यतन पंक्ति को पुनः प्राप्त करता है। : यह एक गंदा पठन है। रीड कमिटेड, रिपीटेबल रीड, और सीरियलाइज़ेबल आइसोलेशन लेवल पर, ट्रांजेक्शन 1 में दूसरा सेलेक्ट प्रारंभिक पंक्ति को पुनः प्राप्त करता है।
इस उदाहरण में, लेन-देन 1 आईडी 1 के साथ पंक्ति को पुनः प्राप्त करता है, फिर लेन-देन 2 पंक्ति को आईडी 1 के साथ अद्यतन करता है, और अंत में लेनदेन 1 आईडी 1 के साथ पंक्ति को फिर से प्राप्त करता है। अब यदि लेन-देन 2 अपने अपडेट को वापस ले लेता है (पहले से ही लेन-देन 1 द्वारा पुनर्प्राप्त किया गया है) या अन्य अपडेट करता है, तो लेन-देन में पंक्ति का दृश्य गलत हो सकता है। लेन-देन 1 में पढ़ा गया आइसोलेशन स्तर पर, दूसरा लेन-देन 1 में चयन अद्यतन पंक्ति को पुनः प्राप्त करता है। : यह एक गंदा पठन है। रीड कमिटेड, रिपीटेबल रीड, और सीरियलाइज़ेबल आइसोलेशन लेवल पर, ट्रांजेक्शन 1 में दूसरा सेलेक्ट प्रारंभिक पंक्ति को पुनः प्राप्त करता है।


{|
{|
Line 107: Line 107:
एक फैंटम रीड तब ​​होता है जब एक लेन-देन दो बार पंक्तियों के एक सेट को पुनः प्राप्त करता है और नई पंक्तियों को उस सेट में डाला जाता है या बीच में किए गए किसी अन्य लेनदेन द्वारा हटा दिया जाता है।
एक फैंटम रीड तब ​​होता है जब एक लेन-देन दो बार पंक्तियों के एक सेट को पुनः प्राप्त करता है और नई पंक्तियों को उस सेट में डाला जाता है या बीच में किए गए किसी अन्य लेनदेन द्वारा हटा दिया जाता है।


इस उदाहरण में, लेन-देन 1 17 से अधिक आयु के साथ पंक्तियों के सेट को पुनः प्राप्त करता है, फिर लेन-देन 2 26 वर्ष की आयु के साथ एक पंक्ति सम्मिलित करता है और प्रतिबद्ध होता है, और अंत में लेन-देन 1 पंक्तियों के सेट को 17 से अधिक आयु के साथ पुनः प्राप्त करता है। रीड अनकमिटेड, रीड कमिटेड, और रिपीटेबल रीड आइसोलेशन लेवल पर, ट्रांजैक्शन 1 में दूसरा सेलेक्ट पंक्तियों के नए सेट को पुनः प्राप्त करता है जिसमें सम्मिलित पंक्ति शामिल होती है: यह एक फैंटम रीड है। SERIALIZABLE अलगाव स्तर पर, लेन-देन 1 में दूसरा चयन पंक्तियों के प्रारंभिक सेट को पुनः प्राप्त करता है।
इस उदाहरण में, लेन-देन 1 17 से अधिक आयु के साथ पंक्तियों के सेट को पुनः प्राप्त करता है, फिर लेन-देन 2 26 वर्ष की आयु के साथ एक पंक्ति सम्मिलित करता है और प्रतिबद्ध होता है, और अंत में लेन-देन 1 पंक्तियों के सेट को 17 से अधिक आयु के साथ पुनः प्राप्त करता है। रीड अनकमिटेड, रीड कमिटेड, और रिपीटेबल रीड आइसोलेशन लेवल पर, ट्रांजैक्शन 1 में दूसरा सेलेक्ट पंक्तियों के नए सेट को पुनः प्राप्त करता है जिसमें सम्मिलित पंक्ति शामिल होती है: यह एक फैंटम रीड है। SERIALIZABLE आइसोलेशन स्तर पर, लेन-देन 1 में दूसरा चयन पंक्तियों के प्रारंभिक सेट को पुनः प्राप्त करता है।


{|
{|
Line 140: Line 140:
लॉक-आधारित समवर्ती नियंत्रण के तहत, गैर-दोहराए जाने योग्य रीड और फैंटम रीड तब ​​हो सकते हैं जब सेलेक्ट करते समय रीड लॉक प्राप्त नहीं होते हैं, या जब सेलेक्ट होते ही प्रभावित पंक्तियों पर अधिग्रहीत लॉक जारी हो जाते हैं। [[बहुसंस्करण समवर्ती नियंत्रण]] के तहत, गैर-दोहराए जाने योग्य रीड्स और फैंटम रीड्स तब हो सकते हैं जब कमिट विरोध से प्रभावित लेनदेन को रोल बैक करने की आवश्यकता को आराम दिया जाता है।
लॉक-आधारित समवर्ती नियंत्रण के तहत, गैर-दोहराए जाने योग्य रीड और फैंटम रीड तब ​​हो सकते हैं जब सेलेक्ट करते समय रीड लॉक प्राप्त नहीं होते हैं, या जब सेलेक्ट होते ही प्रभावित पंक्तियों पर अधिग्रहीत लॉक जारी हो जाते हैं। [[बहुसंस्करण समवर्ती नियंत्रण]] के तहत, गैर-दोहराए जाने योग्य रीड्स और फैंटम रीड्स तब हो सकते हैं जब कमिट विरोध से प्रभावित लेनदेन को रोल बैक करने की आवश्यकता को आराम दिया जाता है।


== अलगाव स्तर ==
== आइसोलेशन स्तर ==
[[डेटाबेस प्रबंधन प्रणाली]] (डेटाबेस मैनेजमेंट सिस्टम) में चार एसीआईडी ​​​​गुणों में से, आइसोलेशन गुण सबसे अधिक आराम देने वाला गुण है। अलगाव के उच्चतम स्तर को बनाए रखने का प्रयास करते समय, एक DBMS आमतौर पर डेटा पर लॉक (डेटाबेस) प्राप्त करता है, जिसके परिणामस्वरूप संगामिति (कंप्यूटर विज्ञान) का नुकसान हो सकता है, या बहुसंस्करण संगामिति नियंत्रण लागू करता है। [[सॉफ़्टवेयर एप्लिकेशन]] को सही ढंग से कार्य करने के लिए इसमें तर्क जोड़ने की आवश्यकता है।
[[डेटाबेस प्रबंधन प्रणाली]] (डेटाबेस मैनेजमेंट सिस्टम) में चार एसीआईडी ​​​​गुणों में से, आइसोलेशन गुण सबसे अधिक आराम देने वाला गुण है। आइसोलेशन के उच्चतम स्तर को बनाए रखने का प्रयास करते समय, एक DBMS आमतौर पर डेटा पर लॉक (डेटाबेस) प्राप्त करता है, जिसके परिणामस्वरूप संगामिति (कंप्यूटर विज्ञान) का नुकसान हो सकता है, या बहुसंस्करण संगामिति नियंत्रण लागू करता है। [[सॉफ़्टवेयर एप्लिकेशन]] को सही ढंग से कार्य करने के लिए इसमें तर्क जोड़ने की आवश्यकता है।


अधिकांश DBMS कई लेन-देन अलगाव स्तरों की पेशकश करते हैं, जो डेटा का चयन करते समय होने वाली लॉकिंग की डिग्री को नियंत्रित करते हैं। कई डेटाबेस अनुप्रयोगों के लिए, अधिकांश डेटाबेस लेनदेन उच्च अलगाव स्तरों (जैसे SERIALIZABLE स्तर) की आवश्यकता से बचने के लिए बनाए जा सकते हैं, इस प्रकार सिस्टम के लिए लॉकिंग ओवरहेड को कम करते हैं। प्रोग्रामर को डेटाबेस एक्सेस कोड का सावधानीपूर्वक विश्लेषण करना चाहिए ताकि यह सुनिश्चित किया जा सके कि अलगाव की किसी भी छूट के कारण सॉफ़्टवेयर बग नहीं मिलते हैं जिन्हें खोजना मुश्किल है। इसके विपरीत, यदि उच्च अलगाव स्तरों का उपयोग किया जाता है, तो [[गतिरोध]] की संभावना बढ़ जाती है, जिससे बचने के लिए सावधानीपूर्वक विश्लेषण और प्रोग्रामिंग तकनीकों की भी आवश्यकता होती है।
अधिकांश DBMS कई लेन-देन आइसोलेशन स्तरों की पेशकश करते हैं, जो डेटा का चयन करते समय होने वाली लॉकिंग की डिग्री को नियंत्रित करते हैं। कई डेटाबेस अनुप्रयोगों के लिए, अधिकांश डेटाबेस लेनदेन उच्च आइसोलेशन स्तरों (जैसे SERIALIZABLE स्तर) की आवश्यकता से बचने के लिए बनाए जा सकते हैं, इस प्रकार सिस्टम के लिए लॉकिंग ओवरहेड को कम करते हैं। प्रोग्रामर को डेटाबेस एक्सेस कोड का सावधानीपूर्वक विश्लेषण करना चाहिए ताकि यह सुनिश्चित किया जा सके कि आइसोलेशन की किसी भी छूट के कारण सॉफ़्टवेयर बग नहीं मिलते हैं जिन्हें खोजना मुश्किल है। इसके विपरीत, यदि उच्च आइसोलेशन स्तरों का उपयोग किया जाता है, तो [[गतिरोध]] की संभावना बढ़ जाती है, जिससे बचने के लिए सावधानीपूर्वक विश्लेषण और प्रोग्रामिंग तकनीकों की भी आवश्यकता होती है।


चूँकि प्रत्येक आइसोलेशन स्तर नीचे की तुलना में अधिक मजबूत होता है, इसमें कोई भी उच्च आइसोलेशन स्तर किसी निम्न स्तर द्वारा निषिद्ध कार्रवाई की अनुमति नहीं देता है, मानक एक DBMS को एक अलगाव स्तर पर लेनदेन चलाने की अनुमति देता है जो कि अनुरोध किए गए से अधिक मजबूत होता है (उदाहरण के लिए, एक पढ़ा हुआ लेनदेन हो सकता है) वास्तव में एक बार-बार पढ़ने योग्य आइसोलेशन स्तर पर किया जाता है)।
चूँकि प्रत्येक आइसोलेशन स्तर नीचे की तुलना में अधिक मजबूत होता है, इसमें कोई भी उच्च आइसोलेशन स्तर किसी निम्न स्तर द्वारा निषिद्ध कार्रवाई की अनुमति नहीं देता है, मानक एक DBMS को एक आइसोलेशन स्तर पर लेनदेन चलाने की अनुमति देता है जो कि अनुरोध किए गए से अधिक मजबूत होता है (उदाहरण के लिए, एक पढ़ा हुआ लेनदेन हो सकता है) वास्तव में एक बार-बार पढ़ने योग्य आइसोलेशन स्तर पर किया जाता है)।


मानकीकरण [[SQL]] मानक के लिए अमेरिकी राष्ट्रीय मानक संस्थान/अंतर्राष्ट्रीय संगठन द्वारा परिभाषित अलगाव स्तर निम्नानुसार सूचीबद्ध हैं।
मानकीकरण [[SQL]] मानक के लिए अमेरिकी राष्ट्रीय मानक संस्थान/अंतर्राष्ट्रीय संगठन द्वारा परिभाषित आइसोलेशन स्तर निम्नानुसार सूचीबद्ध हैं।


=== सीरियल करने योग्य ===
=== सीरियल करने योग्य ===
Line 154: Line 154:
लॉक-आधारित संगामिति नियंत्रण DBMS कार्यान्वयन के साथ, क्रमबद्धता के लिए लेन-देन के अंत में जारी होने के लिए पढ़ने और लिखने वाले ताले (चयनित डेटा पर अधिग्रहित) की आवश्यकता होती है। साथ ही रेंज-लॉक तब भी प्राप्त किया जाना चाहिए जब एक सेलेक्ट (एसक्यूएल) क्वेरी एक विस्तृत WHERE क्लॉज का उपयोग करती है, विशेष रूप से 'आइसोलेशन (डेटाबेस सिस्टम) # फैंटम रीड्स' घटना से बचने के लिए।
लॉक-आधारित संगामिति नियंत्रण DBMS कार्यान्वयन के साथ, क्रमबद्धता के लिए लेन-देन के अंत में जारी होने के लिए पढ़ने और लिखने वाले ताले (चयनित डेटा पर अधिग्रहित) की आवश्यकता होती है। साथ ही रेंज-लॉक तब भी प्राप्त किया जाना चाहिए जब एक सेलेक्ट (एसक्यूएल) क्वेरी एक विस्तृत WHERE क्लॉज का उपयोग करती है, विशेष रूप से 'आइसोलेशन (डेटाबेस सिस्टम) # फैंटम रीड्स' घटना से बचने के लिए।


गैर-लॉक आधारित समवर्ती नियंत्रण का उपयोग करते समय, कोई लॉक प्राप्त नहीं किया जाता है; हालाँकि, यदि सिस्टम कई समवर्ती लेन-देन के बीच एक लेखन टकराव का पता लगाता है, तो उनमें से केवल एक को ही प्रतिबद्ध होने की अनुमति है। इस विषय पर अधिक विवरण के लिए [[स्नैपशॉट अलगाव]] देखें।
गैर-लॉक आधारित समवर्ती नियंत्रण का उपयोग करते समय, कोई लॉक प्राप्त नहीं किया जाता है; हालाँकि, यदि सिस्टम कई समवर्ती लेन-देन के बीच एक लेखन टकराव का पता लगाता है, तो उनमें से केवल एक को ही प्रतिबद्ध होने की अनुमति है। इस विषय पर अधिक विवरण के लिए [[स्नैपशॉट अलगाव|स्नैपशॉट आइसोलेशन]] देखें।


प्रेषक : (द्वितीय अनौपचारिक समीक्षा प्रारूप) आईएसओ/आईईसी 9075:1992, डेटाबेस लैंग्वेज SQL- 30 जुलाई, 1992:
प्रेषक : (द्वितीय अनौपचारिक समीक्षा प्रारूप) आईएसओ/आईईसी 9075:1992, डेटाबेस लैंग्वेज SQL- 30 जुलाई, 1992:
अलगाव स्तर पर समवर्ती SQL-लेन-देन का निष्पादन SERIALIZABLE को क्रमिक होने की गारंटी है। एक क्रमबद्ध निष्पादन को SQL-लेन-देन को समवर्ती रूप से निष्पादित करने के संचालन के निष्पादन के रूप में परिभाषित किया गया है जो समान SQL-लेन-देन के कुछ सीरियल निष्पादन के समान प्रभाव पैदा करता है। एक सीरियल निष्पादन वह है जिसमें प्रत्येक एसक्यूएल-लेनदेन अगले एसक्यूएल-लेनदेन शुरू होने से पहले पूरा होने के लिए निष्पादित होता है।
आइसोलेशन स्तर पर समवर्ती SQL-लेन-देन का निष्पादन SERIALIZABLE को क्रमिक होने की गारंटी है। एक क्रमबद्ध निष्पादन को SQL-लेन-देन को समवर्ती रूप से निष्पादित करने के संचालन के निष्पादन के रूप में परिभाषित किया गया है जो समान SQL-लेन-देन के कुछ सीरियल निष्पादन के समान प्रभाव पैदा करता है। एक सीरियल निष्पादन वह है जिसमें प्रत्येक एसक्यूएल-लेनदेन अगले एसक्यूएल-लेनदेन शुरू होने से पहले पूरा होने के लिए निष्पादित होता है।


=== बार-बार पढ़ने योग्य ===
=== बार-बार पढ़ने योग्य ===
इस अलगाव स्तर में, एक लॉक-आधारित समवर्ती नियंत्रण DBMS कार्यान्वयन लेन-देन के अंत तक रीड और राइट लॉक (चयनित डेटा पर प्राप्त) रखता है। हालाँकि, रेंज-लॉक प्रबंधित नहीं किए जाते हैं, इसलिए 'आइसोलेशन (डेटाबेस सिस्टम) # फैंटम रीड्स' हो सकता है।
इस आइसोलेशन स्तर में, एक लॉक-आधारित समवर्ती नियंत्रण DBMS कार्यान्वयन लेन-देन के अंत तक रीड और राइट लॉक (चयनित डेटा पर प्राप्त) रखता है। हालाँकि, रेंज-लॉक प्रबंधित नहीं किए जाते हैं, इसलिए 'आइसोलेशन (डेटाबेस सिस्टम) # फैंटम रीड्स' हो सकता है।


कुछ प्रणालियों में इस अलगाव स्तर पर तिरछा लिखना संभव है। तिरछा लिखना एक घटना है जहां दो अलग-अलग लेखकों द्वारा तालिका में एक ही कॉलम में दो लिखने की अनुमति दी जाती है (जिन्होंने पहले उन कॉलमों को पढ़ा है जिन्हें वे अपडेट कर रहे हैं), जिसके परिणामस्वरूप कॉलम में डेटा होता है जो दो लेनदेन का मिश्रण होता है .<ref>{{cite web|url=https://vladmihalcea.com/2015/10/20/a-beginners-guide-to-read-and-write-skew-phenomena/|title=A beginner's guide to read and write skew phenomena|author=Vlad Mihalcea|date=2015-10-20}}</ref><ref>{{cite web|url=https://wiki.postgresql.org/wiki/SSI#Simple_Write_Skew|title=Postgresql wiki - SSI}}</ref>
कुछ प्रणालियों में इस आइसोलेशन स्तर पर तिरछा लिखना संभव है। तिरछा लिखना एक घटना है जहां दो अलग-अलग लेखकों द्वारा तालिका में एक ही कॉलम में दो लिखने की अनुमति दी जाती है (जिन्होंने पहले उन कॉलमों को पढ़ा है जिन्हें वे अपडेट कर रहे हैं), जिसके परिणामस्वरूप कॉलम में डेटा होता है जो दो लेनदेन का मिश्रण होता है .<ref>{{cite web|url=https://vladmihalcea.com/2015/10/20/a-beginners-guide-to-read-and-write-skew-phenomena/|title=A beginner's guide to read and write skew phenomena|author=Vlad Mihalcea|date=2015-10-20}}</ref><ref>{{cite web|url=https://wiki.postgresql.org/wiki/SSI#Simple_Write_Skew|title=Postgresql wiki - SSI}}</ref>




=== पढ़ें प्रतिबद्ध ===
=== पढ़ें प्रतिबद्ध ===
इस अलगाव स्तर में, एक लॉक-आधारित समवर्ती नियंत्रण DBMS कार्यान्वयन लेन-देन के अंत तक राइट लॉक (चयनित डेटा पर प्राप्त) रखता है, लेकिन जैसे ही सेलेक्ट (SQL) ऑपरेशन किया जाता है, रीड लॉक जारी हो जाते हैं (इसलिए '' आइसोलेशन (डेटाबेस सिस्टम)#नॉन-रिपीटेबल रीड्स|नॉन-रिपीटेबल रीड्स इवेंट '' इस आइसोलेशन लेवल में हो सकता है)। पिछले स्तर की तरह, ''रेंज-लॉक'' को प्रबंधित नहीं किया जाता है।
इस आइसोलेशन स्तर में, एक लॉक-आधारित समवर्ती नियंत्रण DBMS कार्यान्वयन लेन-देन के अंत तक राइट लॉक (चयनित डेटा पर प्राप्त) रखता है, लेकिन जैसे ही सेलेक्ट (SQL) ऑपरेशन किया जाता है, रीड लॉक जारी हो जाते हैं (इसलिए '' आइसोलेशन (डेटाबेस सिस्टम)#नॉन-रिपीटेबल रीड्स|नॉन-रिपीटेबल रीड्स इवेंट '' इस आइसोलेशन लेवल में हो सकता है)। पिछले स्तर की तरह, ''रेंज-लॉक'' को प्रबंधित नहीं किया जाता है।


इसे सरल शब्दों में कहें तो रीड कमिटेड एक आइसोलेशन लेवल है जो गारंटी देता है कि कोई भी डेटा रीड उसी समय कमिट हो जाता है जब वह पढ़ा जाता है। यह पाठक को किसी भी मध्यवर्ती, अप्रतिबद्ध, 'गंदे' पढ़ने को देखने से रोकता है। यह कोई वादा नहीं करता है कि यदि लेन-देन रीड को फिर से जारी करता है, तो उसे वही डेटा मिलेगा; पढ़ने के बाद डेटा बदलने के लिए स्वतंत्र है।
इसे सरल शब्दों में कहें तो रीड कमिटेड एक आइसोलेशन लेवल है जो गारंटी देता है कि कोई भी डेटा रीड उसी समय कमिट हो जाता है जब वह पढ़ा जाता है। यह पाठक को किसी भी मध्यवर्ती, अप्रतिबद्ध, 'गंदे' पढ़ने को देखने से रोकता है। यह कोई वादा नहीं करता है कि यदि लेन-देन रीड को फिर से जारी करता है, तो उसे वही डेटा मिलेगा; पढ़ने के बाद डेटा बदलने के लिए स्वतंत्र है।
Line 173: Line 173:
यह आइसोलेशन का सबसे निचला स्तर है। इस स्तर पर, 'आइसोलेशन (डेटाबेस सिस्टम)#डर्टी रीड्स' की अनुमति है, इसलिए एक लेन-देन अन्य लेनदेन द्वारा किए गए अभी तक प्रतिबद्ध नहीं किए गए परिवर्तनों को देख सकता है।
यह आइसोलेशन का सबसे निचला स्तर है। इस स्तर पर, 'आइसोलेशन (डेटाबेस सिस्टम)#डर्टी रीड्स' की अनुमति है, इसलिए एक लेन-देन अन्य लेनदेन द्वारा किए गए अभी तक प्रतिबद्ध नहीं किए गए परिवर्तनों को देख सकता है।


== डिफ़ॉल्ट अलगाव स्तर ==
== डिफ़ॉल्ट आइसोलेशन स्तर ==
विभिन्न डेटाबेस प्रबंधन प्रणालियों का डिफ़ॉल्ट अलगाव स्तर काफी व्यापक रूप से भिन्न होता है। अधिकांश डेटाबेस जो लेन-देन की सुविधा देते हैं, उपयोगकर्ता को किसी भी अलगाव स्तर को सेट करने की अनुमति देते हैं। लॉक हासिल करने के लिए सेलेक्ट स्टेटमेंट करते समय कुछ DBMS को अतिरिक्त सिंटैक्स की भी आवश्यकता होती है (उदाहरण के लिए एक्सेस की गई पंक्तियों पर एक्सक्लूसिव राइट लॉक प्राप्त करने के लिए SELECT ... FOR UPDATE)।
विभिन्न डेटाबेस प्रबंधन प्रणालियों का डिफ़ॉल्ट आइसोलेशन स्तर काफी व्यापक रूप से भिन्न होता है। अधिकांश डेटाबेस जो लेन-देन की सुविधा देते हैं, उपयोगकर्ता को किसी भी आइसोलेशन स्तर को सेट करने की अनुमति देते हैं। लॉक हासिल करने के लिए सेलेक्ट स्टेटमेंट करते समय कुछ DBMS को अतिरिक्त सिंटैक्स की भी आवश्यकता होती है (उदाहरण के लिए एक्सेस की गई पंक्तियों पर एक्सक्लूसिव राइट लॉक प्राप्त करने के लिए SELECT ... FOR UPDATE)।


हालाँकि, ऊपर दी गई परिभाषाओं की अस्पष्ट होने के रूप में आलोचना की गई है, और कई डेटाबेस द्वारा प्रदान किए गए अलगाव को सटीक रूप से प्रतिबिंबित नहीं करते हैं:
हालाँकि, ऊपर दी गई परिभाषाओं की अस्पष्ट होने के रूप में आलोचना की गई है, और कई डेटाबेस द्वारा प्रदान किए गए आइसोलेशन को सटीक रूप से प्रतिबिंबित नहीं करते हैं:


: यह पत्र अलगाव के स्तर को परिभाषित करने के लिए विसंगतिपूर्ण दृष्टिकोण में कई कमजोरियों को दर्शाता है। तीन एएनएसआई घटनाएं अस्पष्ट हैं, और यहां तक ​​​​कि उनकी सबसे छोटी व्याख्याओं में कुछ विषम व्यवहारों को शामिल नहीं किया गया है ... यह कुछ प्रति-सहज ज्ञान युक्त परिणामों की ओर जाता है। विशेष रूप से, लॉक-आधारित अलगाव स्तरों में उनके एएनएसआई समकक्षों की तुलना में भिन्न विशेषताएं होती हैं। यह चिंताजनक है क्योंकि व्यावसायिक डेटाबेस सिस्टम आमतौर पर लॉकिंग कार्यान्वयन का उपयोग करते हैं। इसके अतिरिक्त, ANSI घटना कई प्रकार के अलगाव स्तर के व्यवहार के बीच अंतर नहीं करती है जो वाणिज्यिक प्रणालियों में लोकप्रिय हैं।<ref name="sql-isolation">
: यह पत्र आइसोलेशन के स्तर को परिभाषित करने के लिए विसंगतिपूर्ण दृष्टिकोण में कई कमजोरियों को दर्शाता है। तीन एएनएसआई घटनाएं अस्पष्ट हैं, और यहां तक ​​​​कि उनकी सबसे छोटी व्याख्याओं में कुछ विषम व्यवहारों को शामिल नहीं किया गया है ... यह कुछ प्रति-सहज ज्ञान युक्त परिणामों की ओर जाता है। विशेष रूप से, लॉक-आधारित आइसोलेशन स्तरों में उनके एएनएसआई समकक्षों की तुलना में भिन्न विशेषताएं होती हैं। यह चिंताजनक है क्योंकि व्यावसायिक डेटाबेस सिस्टम आमतौर पर लॉकिंग कार्यान्वयन का उपयोग करते हैं। इसके अतिरिक्त, ANSI घटना कई प्रकार के आइसोलेशन स्तर के व्यवहार के बीच अंतर नहीं करती है जो वाणिज्यिक प्रणालियों में लोकप्रिय हैं।<ref name="sql-isolation">
{{cite web
{{cite web
| url = http://www.cs.umb.edu/~poneil/iso.pdf
| url = http://www.cs.umb.edu/~poneil/iso.pdf
Line 184: Line 184:
| access-date = 29 July 2012 }}
| access-date = 29 July 2012 }}
</ref>
</ref>
ANSI SQL की अलगाव परिभाषा से संबंधित अन्य आलोचनाएँ भी हैं, जिसमें यह कार्यान्वयनकर्ताओं को बुरे काम करने के लिए प्रोत्साहित करती है:
ANSI SQL की आइसोलेशन परिभाषा से संबंधित अन्य आलोचनाएँ भी हैं, जिसमें यह कार्यान्वयनकर्ताओं को बुरे काम करने के लिए प्रोत्साहित करती है:


:... यह एक धारणा पर सूक्ष्म तरीकों से निर्भर करता है कि आशावादी या बहु-संस्करण समवर्ती योजना के विपरीत समवर्ती नियंत्रण के लिए लॉकिंग स्कीमा का उपयोग किया जाता है। इसका तात्पर्य है कि प्रस्तावित शब्दार्थ खराब परिभाषित हैं।<ref>{{cite web
:... यह एक धारणा पर सूक्ष्म तरीकों से निर्भर करता है कि आशावादी या बहु-संस्करण समवर्ती योजना के विपरीत समवर्ती नियंत्रण के लिए लॉकिंग स्कीमा का उपयोग किया जाता है। इसका तात्पर्य है कि प्रस्तावित शब्दार्थ खराब परिभाषित हैं।<ref>{{cite web
Line 220: Line 220:
* [[आशावादी समवर्ती नियंत्रण]]
* [[आशावादी समवर्ती नियंत्रण]]
* [[संबंधपरक डेटाबेस प्रबंधन प्रणाली]]
* [[संबंधपरक डेटाबेस प्रबंधन प्रणाली]]
* स्नैपशॉट अलगाव
* स्नैपशॉट आइसोलेशन


==संदर्भ==
==संदर्भ==

Revision as of 13:53, 23 February 2023

डेटाबेस सिस्टम में, आइसोलेशन यह निर्धारित करता है कि डेटाबेस लेनदेन की अखंडता अन्य उपयोगकर्ताओं और प्रणालियों के लिए कैसे दिखाई देती है।

न्यून आइसोलेशन स्तर एक ही समय में एक ही डेटा तक पहुंचने के लिए कई उपयोगकर्ताओं की क्षमता को बढ़ाता है, लेकिन कॉन्करेंसी (कंप्यूटर विज्ञान) प्रभावों की संख्या को बढ़ाता है (जैसे कि राइट-रीड कॉन्फ्लिक्ट या खोए हुए अपडेट) उपयोगकर्ताओं का सामना हो सकता है। इसके विपरीत, उच्च आइसोलेशन स्तर उन समवर्ती प्रभावों के प्रकारों को कम करता है जिनका उपयोगकर्ता सामना कर सकते हैं, लेकिन इसके लिए अधिक सिस्टम संसाधनों की आवश्यकता होती है और संभावना बढ़ जाती है कि एक लेनदेन दूसरे को ब्लॉक कर देगा।[1] आइसोलेशन को आमतौर पर डेटाबेस स्तर पर एक संपत्ति के रूप में परिभाषित किया जाता है जो परिभाषित करता है कि कैसे या कब[clarification needed] एक ऑपरेशन द्वारा किए गए परिवर्तन दूसरों को दिखाई देने लगते हैं। पुरानी प्रणालियों पर, इसे व्यवस्थित रूप से लागू किया जा सकता है, उदाहरण के लिए अस्थायी तालिकाओं के उपयोग के माध्यम से। द्वि-स्तरीय प्रणालियों में, आइसोलेशन बनाए रखने के लिए लेनदेन प्रसंस्करण (टीपी) प्रबंधक की आवश्यकता होती है। एन-टियर सिस्टम में (जैसे कि कई वेबसाइटें एक उड़ान में आखिरी सीट बुक करने का प्रयास करती हैं), बुकिंग करने और ग्राहक को पुष्टि भेजने के लिए संग्रहीत प्रक्रियाओं और लेनदेन प्रबंधन के संयोजन की आवश्यकता होती है।[2] आइसोलेशन चार एसीआईडी ​​​​गुणों में से एक है, परमाणुता (डेटाबेस सिस्टम), संगति (डेटाबेस सिस्टम) और स्थायित्व (डेटाबेस सिस्टम) के साथ।

समवर्ती नियंत्रण

समवर्ती नियंत्रण में एक DBMS में अंतर्निहित तंत्र शामिल होते हैं जो आइसोलेशन को संभालते हैं और संबंधित शुद्धता की गारंटी देते हैं। समवर्ती लेनदेन के सही निष्पादन की गारंटी देने के लिए और (विभिन्न तंत्रों के माध्यम से) अन्य DBMS प्रक्रियाओं की शुद्धता की गारंटी देने के लिए डेटाबेस और स्टोरेज इंजन दोनों द्वारा इसका भारी उपयोग किया जाता है। लेन-देन से संबंधित तंत्र आमतौर पर डेटाबेस डेटा एक्सेस ऑपरेशंस के समय (अनुसूची (कंप्यूटर विज्ञान)) को क्रमबद्धता और पुनर्प्राप्ति योग्यता अनुसूची गुणों के रूप में वर्णित कुछ आदेशों तक सीमित करते हैं। डेटाबेस एक्सेस ऑपरेशन निष्पादन को बाधित करने का मतलब आमतौर पर कम प्रदर्शन (निष्पादन की दरों से मापा जाता है), और इस प्रकार संगामिति नियंत्रण तंत्र को आमतौर पर बाधाओं के तहत सर्वोत्तम प्रदर्शन प्रदान करने के लिए डिज़ाइन किया गया है। अक्सर, जब संभव हो तो शुद्धता को नुकसान पहुँचाए बिना, बेहतर प्रदर्शन के लिए क्रमबद्धता संपत्ति से समझौता किया जाता है। हालाँकि, पुनर्प्राप्ति क्षमता से समझौता नहीं किया जा सकता है, क्योंकि आमतौर पर त्वरित डेटाबेस अखंडता उल्लंघन का परिणाम होता है।

डीबीएमएस में दो-चरण लॉकिंग सबसे आम लेन-देन समवर्ती नियंत्रण विधि है, जिसका उपयोग शुद्धता के लिए क्रमिकता और पुनर्प्राप्ति दोनों प्रदान करने के लिए किया जाता है। किसी डेटाबेस ऑब्जेक्ट तक पहुँचने के लिए किसी लेन-देन को पहले इस ऑब्जेक्ट के लिए लॉक (डेटाबेस) प्राप्त करने की आवश्यकता होती है। एक्सेस ऑपरेशन प्रकार (उदाहरण के लिए, किसी ऑब्जेक्ट को पढ़ना या लिखना) और लॉक प्रकार पर निर्भर करते हुए, लॉक को प्राप्त करना अवरुद्ध और स्थगित किया जा सकता है, यदि कोई अन्य लेन-देन उस ऑब्जेक्ट के लिए लॉक रखता है।

घटनाएं पढ़ें

ANSI/ISO मानक SQL 92 तीन अलग-अलग पठन परिघटनाओं को संदर्भित करता है जब एक लेन-देन उस डेटा को पुनः प्राप्त करता है जिसे किसी अन्य लेन-देन ने अपडेट किया हो।

निम्नलिखित उदाहरणों में, दो लेन-देन होते हैं। लेन-देन 1 में, एक क्वेरी निष्पादित की जाती है, फिर लेनदेन 2 में, एक अद्यतन किया जाता है, और अंत में लेनदेन 1 में, वही क्वेरी फिर से की जाती है।

उदाहरण निम्नलिखित संबंध का उपयोग करते हैं:

users
id name age
1 Alice 20
2 Bob 25


गंदा पढ़ता है

एक गंदा पठन (उर्फ अप्रतिबंधित निर्भरता) तब होता है जब एक लेन-देन एक पंक्ति को पुनः प्राप्त करता है जिसे किसी अन्य लेन-देन द्वारा अद्यतन किया गया है जो अभी तक प्रतिबद्ध नहीं है।

इस उदाहरण में, लेन-देन 1 आईडी 1 के साथ पंक्ति को पुनः प्राप्त करता है, फिर लेन-देन 2 पंक्ति को आईडी 1 के साथ अद्यतन करता है, और अंत में लेनदेन 1 आईडी 1 के साथ पंक्ति को फिर से प्राप्त करता है। अब यदि लेन-देन 2 अपने अपडेट को वापस ले लेता है (पहले से ही लेन-देन 1 द्वारा पुनर्प्राप्त किया गया है) या अन्य अपडेट करता है, तो लेन-देन में पंक्ति का दृश्य गलत हो सकता है। लेन-देन 1 में पढ़ा गया आइसोलेशन स्तर पर, दूसरा लेन-देन 1 में चयन अद्यतन पंक्ति को पुनः प्राप्त करता है। : यह एक गंदा पठन है। रीड कमिटेड, रिपीटेबल रीड, और सीरियलाइज़ेबल आइसोलेशन लेवल पर, ट्रांजेक्शन 1 में दूसरा सेलेक्ट प्रारंभिक पंक्ति को पुनः प्राप्त करता है।

Transaction 1 Transaction 2
BEGIN;
SELECT age FROM users WHERE id = 1;
-- retrieves 20
BEGIN;
UPDATE users SET age = 21 WHERE id = 1;
-- no commit here
SELECT age FROM users WHERE id = 1;
-- READ UNCOMMITTED retrieves 21 (dirty read)
-- READ COMMITTED retrieves 20 (dirty read has been avoided)
-- REPEATABLE READ retrieves 20 (dirty read has been avoided)
-- SERIALIZABLE retrieves 20 (dirty read has been avoided)
COMMIT;
ROLLBACK;


गैर-दोहराने योग्य पढ़ता है

एक गैर-दोहराने योग्य पठन तब होता है जब एक लेन-देन एक पंक्ति को दो बार प्राप्त करता है और उस पंक्ति को किसी अन्य लेन-देन द्वारा अद्यतन किया जाता है जो बीच में प्रतिबद्ध होता है।

इस उदाहरण में, लेन-देन 1 आईडी 1 के साथ पंक्ति को पुनः प्राप्त करता है, फिर लेन-देन 2 आईडी 1 के साथ पंक्ति को अपडेट करता है और प्रतिबद्ध होता है, और अंत में लेनदेन 1 आईडी 1 के साथ पंक्ति को फिर से प्राप्त करता है। रीड अनकमिटेड और रीड कमिटेड आइसोलेशन लेवल पर, ट्रांजैक्शन 1 में दूसरा सेलेक्ट अपडेटेड रो को रिट्रीव करता है: यह एक नॉन-रिपीटेबल रीड है। REPEATABLE READ और SERIALIZABLE आइसोलेशन लेवल पर, लेन-देन 1 में दूसरा सेलेक्ट प्रारंभिक पंक्ति को पुनः प्राप्त करता है।

Transaction 1 Transaction 2
BEGIN;
SELECT age FROM users WHERE id = 1;
-- retrieves 20
BEGIN;
UPDATE users SET age = 21 WHERE id = 1;
COMMIT;
SELECT age FROM users WHERE id = 1;
-- READ UNCOMMITTED retrieves 21 (non-repeatable read)
-- READ COMMITTED retrieves 21 (non-repeatable read)
-- REPEATABLE READ retrieves 20 (non-repeatable read has been avoided)
-- SERIALIZABLE retrieves 20 (non-repeatable read has been avoided)
COMMIT;


प्रेत पढ़ता है

एक फैंटम रीड तब ​​होता है जब एक लेन-देन दो बार पंक्तियों के एक सेट को पुनः प्राप्त करता है और नई पंक्तियों को उस सेट में डाला जाता है या बीच में किए गए किसी अन्य लेनदेन द्वारा हटा दिया जाता है।

इस उदाहरण में, लेन-देन 1 17 से अधिक आयु के साथ पंक्तियों के सेट को पुनः प्राप्त करता है, फिर लेन-देन 2 26 वर्ष की आयु के साथ एक पंक्ति सम्मिलित करता है और प्रतिबद्ध होता है, और अंत में लेन-देन 1 पंक्तियों के सेट को 17 से अधिक आयु के साथ पुनः प्राप्त करता है। रीड अनकमिटेड, रीड कमिटेड, और रिपीटेबल रीड आइसोलेशन लेवल पर, ट्रांजैक्शन 1 में दूसरा सेलेक्ट पंक्तियों के नए सेट को पुनः प्राप्त करता है जिसमें सम्मिलित पंक्ति शामिल होती है: यह एक फैंटम रीड है। SERIALIZABLE आइसोलेशन स्तर पर, लेन-देन 1 में दूसरा चयन पंक्तियों के प्रारंभिक सेट को पुनः प्राप्त करता है।

Transaction 1 Transaction 2
BEGIN;
SELECT name FROM users WHERE age > 17;
BEGIN;
INSERT INTO users VALUES (3, 'Carol', 26);
COMMIT;
SELECT name FROM users WHERE age > 17;
-- READ UNCOMMITTED retrieves Alice, Bob and Carol (phantom read)
-- READ COMMITTED retrieves Alice, Bob and Carol (phantom read)
-- REPEATABLE READ retrieves Alice, Bob and Carol (phantom read)
-- SERIALIZABLE retrieves Alice and Bob (phantom read has been avoided)
COMMIT;

गैर-दोहराए जाने योग्य रीड्स और फैंटम रीड्स को रोकने के लिए दो बुनियादी रणनीतियों का उपयोग किया जाता है। पहली रणनीति में, लॉक-आधारित संगामिति नियंत्रण, लेन-देन 1 के प्रतिबद्ध होने या वापस लुढ़कने के बाद लेनदेन 2 प्रतिबद्ध है। यह सीरियल शेड्यूल (कंप्यूटर साइंस) T1, T2 का उत्पादन करता है। अन्य रणनीति में, बहुसंस्कृति समवर्ती नियंत्रण, लेन-देन 2 तुरंत प्रतिबद्ध होता है, जबकि लेन-देन 1, जो लेन-देन 2 से पहले शुरू हुआ था, लेन-देन 1 की शुरुआत में लिए गए डेटाबेस के पुराने स्नैपशॉट पर काम करना जारी रखता है, और जब लेन-देन 1 अंततः प्रतिबद्ध करने की कोशिश करता है , यदि कमिटमेंट का परिणाम सीरियल शेड्यूल T1, T2 के बराबर होगा, तो ट्रांजैक्शन 1 प्रतिबद्ध है; अन्यथा, एक प्रतिबद्ध विरोध होता है और लेनदेन 1 को क्रमांकन विफलता के साथ वापस ले लिया जाता है।

लॉक-आधारित समवर्ती नियंत्रण के तहत, गैर-दोहराए जाने योग्य रीड और फैंटम रीड तब ​​हो सकते हैं जब सेलेक्ट करते समय रीड लॉक प्राप्त नहीं होते हैं, या जब सेलेक्ट होते ही प्रभावित पंक्तियों पर अधिग्रहीत लॉक जारी हो जाते हैं। बहुसंस्करण समवर्ती नियंत्रण के तहत, गैर-दोहराए जाने योग्य रीड्स और फैंटम रीड्स तब हो सकते हैं जब कमिट विरोध से प्रभावित लेनदेन को रोल बैक करने की आवश्यकता को आराम दिया जाता है।

आइसोलेशन स्तर

डेटाबेस प्रबंधन प्रणाली (डेटाबेस मैनेजमेंट सिस्टम) में चार एसीआईडी ​​​​गुणों में से, आइसोलेशन गुण सबसे अधिक आराम देने वाला गुण है। आइसोलेशन के उच्चतम स्तर को बनाए रखने का प्रयास करते समय, एक DBMS आमतौर पर डेटा पर लॉक (डेटाबेस) प्राप्त करता है, जिसके परिणामस्वरूप संगामिति (कंप्यूटर विज्ञान) का नुकसान हो सकता है, या बहुसंस्करण संगामिति नियंत्रण लागू करता है। सॉफ़्टवेयर एप्लिकेशन को सही ढंग से कार्य करने के लिए इसमें तर्क जोड़ने की आवश्यकता है।

अधिकांश DBMS कई लेन-देन आइसोलेशन स्तरों की पेशकश करते हैं, जो डेटा का चयन करते समय होने वाली लॉकिंग की डिग्री को नियंत्रित करते हैं। कई डेटाबेस अनुप्रयोगों के लिए, अधिकांश डेटाबेस लेनदेन उच्च आइसोलेशन स्तरों (जैसे SERIALIZABLE स्तर) की आवश्यकता से बचने के लिए बनाए जा सकते हैं, इस प्रकार सिस्टम के लिए लॉकिंग ओवरहेड को कम करते हैं। प्रोग्रामर को डेटाबेस एक्सेस कोड का सावधानीपूर्वक विश्लेषण करना चाहिए ताकि यह सुनिश्चित किया जा सके कि आइसोलेशन की किसी भी छूट के कारण सॉफ़्टवेयर बग नहीं मिलते हैं जिन्हें खोजना मुश्किल है। इसके विपरीत, यदि उच्च आइसोलेशन स्तरों का उपयोग किया जाता है, तो गतिरोध की संभावना बढ़ जाती है, जिससे बचने के लिए सावधानीपूर्वक विश्लेषण और प्रोग्रामिंग तकनीकों की भी आवश्यकता होती है।

चूँकि प्रत्येक आइसोलेशन स्तर नीचे की तुलना में अधिक मजबूत होता है, इसमें कोई भी उच्च आइसोलेशन स्तर किसी निम्न स्तर द्वारा निषिद्ध कार्रवाई की अनुमति नहीं देता है, मानक एक DBMS को एक आइसोलेशन स्तर पर लेनदेन चलाने की अनुमति देता है जो कि अनुरोध किए गए से अधिक मजबूत होता है (उदाहरण के लिए, एक पढ़ा हुआ लेनदेन हो सकता है) वास्तव में एक बार-बार पढ़ने योग्य आइसोलेशन स्तर पर किया जाता है)।

मानकीकरण SQL मानक के लिए अमेरिकी राष्ट्रीय मानक संस्थान/अंतर्राष्ट्रीय संगठन द्वारा परिभाषित आइसोलेशन स्तर निम्नानुसार सूचीबद्ध हैं।

सीरियल करने योग्य

यह आइसोलेशन का उच्चतम स्तर है।

लॉक-आधारित संगामिति नियंत्रण DBMS कार्यान्वयन के साथ, क्रमबद्धता के लिए लेन-देन के अंत में जारी होने के लिए पढ़ने और लिखने वाले ताले (चयनित डेटा पर अधिग्रहित) की आवश्यकता होती है। साथ ही रेंज-लॉक तब भी प्राप्त किया जाना चाहिए जब एक सेलेक्ट (एसक्यूएल) क्वेरी एक विस्तृत WHERE क्लॉज का उपयोग करती है, विशेष रूप से 'आइसोलेशन (डेटाबेस सिस्टम) # फैंटम रीड्स' घटना से बचने के लिए।

गैर-लॉक आधारित समवर्ती नियंत्रण का उपयोग करते समय, कोई लॉक प्राप्त नहीं किया जाता है; हालाँकि, यदि सिस्टम कई समवर्ती लेन-देन के बीच एक लेखन टकराव का पता लगाता है, तो उनमें से केवल एक को ही प्रतिबद्ध होने की अनुमति है। इस विषय पर अधिक विवरण के लिए स्नैपशॉट आइसोलेशन देखें।

प्रेषक : (द्वितीय अनौपचारिक समीक्षा प्रारूप) आईएसओ/आईईसी 9075:1992, डेटाबेस लैंग्वेज SQL- 30 जुलाई, 1992: आइसोलेशन स्तर पर समवर्ती SQL-लेन-देन का निष्पादन SERIALIZABLE को क्रमिक होने की गारंटी है। एक क्रमबद्ध निष्पादन को SQL-लेन-देन को समवर्ती रूप से निष्पादित करने के संचालन के निष्पादन के रूप में परिभाषित किया गया है जो समान SQL-लेन-देन के कुछ सीरियल निष्पादन के समान प्रभाव पैदा करता है। एक सीरियल निष्पादन वह है जिसमें प्रत्येक एसक्यूएल-लेनदेन अगले एसक्यूएल-लेनदेन शुरू होने से पहले पूरा होने के लिए निष्पादित होता है।

बार-बार पढ़ने योग्य

इस आइसोलेशन स्तर में, एक लॉक-आधारित समवर्ती नियंत्रण DBMS कार्यान्वयन लेन-देन के अंत तक रीड और राइट लॉक (चयनित डेटा पर प्राप्त) रखता है। हालाँकि, रेंज-लॉक प्रबंधित नहीं किए जाते हैं, इसलिए 'आइसोलेशन (डेटाबेस सिस्टम) # फैंटम रीड्स' हो सकता है।

कुछ प्रणालियों में इस आइसोलेशन स्तर पर तिरछा लिखना संभव है। तिरछा लिखना एक घटना है जहां दो अलग-अलग लेखकों द्वारा तालिका में एक ही कॉलम में दो लिखने की अनुमति दी जाती है (जिन्होंने पहले उन कॉलमों को पढ़ा है जिन्हें वे अपडेट कर रहे हैं), जिसके परिणामस्वरूप कॉलम में डेटा होता है जो दो लेनदेन का मिश्रण होता है .[3][4]


पढ़ें प्रतिबद्ध

इस आइसोलेशन स्तर में, एक लॉक-आधारित समवर्ती नियंत्रण DBMS कार्यान्वयन लेन-देन के अंत तक राइट लॉक (चयनित डेटा पर प्राप्त) रखता है, लेकिन जैसे ही सेलेक्ट (SQL) ऑपरेशन किया जाता है, रीड लॉक जारी हो जाते हैं (इसलिए आइसोलेशन (डेटाबेस सिस्टम)#नॉन-रिपीटेबल रीड्स|नॉन-रिपीटेबल रीड्स इवेंट इस आइसोलेशन लेवल में हो सकता है)। पिछले स्तर की तरह, रेंज-लॉक को प्रबंधित नहीं किया जाता है।

इसे सरल शब्दों में कहें तो रीड कमिटेड एक आइसोलेशन लेवल है जो गारंटी देता है कि कोई भी डेटा रीड उसी समय कमिट हो जाता है जब वह पढ़ा जाता है। यह पाठक को किसी भी मध्यवर्ती, अप्रतिबद्ध, 'गंदे' पढ़ने को देखने से रोकता है। यह कोई वादा नहीं करता है कि यदि लेन-देन रीड को फिर से जारी करता है, तो उसे वही डेटा मिलेगा; पढ़ने के बाद डेटा बदलने के लिए स्वतंत्र है।

अप्रतिबद्ध पढ़ें

यह आइसोलेशन का सबसे निचला स्तर है। इस स्तर पर, 'आइसोलेशन (डेटाबेस सिस्टम)#डर्टी रीड्स' की अनुमति है, इसलिए एक लेन-देन अन्य लेनदेन द्वारा किए गए अभी तक प्रतिबद्ध नहीं किए गए परिवर्तनों को देख सकता है।

डिफ़ॉल्ट आइसोलेशन स्तर

विभिन्न डेटाबेस प्रबंधन प्रणालियों का डिफ़ॉल्ट आइसोलेशन स्तर काफी व्यापक रूप से भिन्न होता है। अधिकांश डेटाबेस जो लेन-देन की सुविधा देते हैं, उपयोगकर्ता को किसी भी आइसोलेशन स्तर को सेट करने की अनुमति देते हैं। लॉक हासिल करने के लिए सेलेक्ट स्टेटमेंट करते समय कुछ DBMS को अतिरिक्त सिंटैक्स की भी आवश्यकता होती है (उदाहरण के लिए एक्सेस की गई पंक्तियों पर एक्सक्लूसिव राइट लॉक प्राप्त करने के लिए SELECT ... FOR UPDATE)।

हालाँकि, ऊपर दी गई परिभाषाओं की अस्पष्ट होने के रूप में आलोचना की गई है, और कई डेटाबेस द्वारा प्रदान किए गए आइसोलेशन को सटीक रूप से प्रतिबिंबित नहीं करते हैं:

यह पत्र आइसोलेशन के स्तर को परिभाषित करने के लिए विसंगतिपूर्ण दृष्टिकोण में कई कमजोरियों को दर्शाता है। तीन एएनएसआई घटनाएं अस्पष्ट हैं, और यहां तक ​​​​कि उनकी सबसे छोटी व्याख्याओं में कुछ विषम व्यवहारों को शामिल नहीं किया गया है ... यह कुछ प्रति-सहज ज्ञान युक्त परिणामों की ओर जाता है। विशेष रूप से, लॉक-आधारित आइसोलेशन स्तरों में उनके एएनएसआई समकक्षों की तुलना में भिन्न विशेषताएं होती हैं। यह चिंताजनक है क्योंकि व्यावसायिक डेटाबेस सिस्टम आमतौर पर लॉकिंग कार्यान्वयन का उपयोग करते हैं। इसके अतिरिक्त, ANSI घटना कई प्रकार के आइसोलेशन स्तर के व्यवहार के बीच अंतर नहीं करती है जो वाणिज्यिक प्रणालियों में लोकप्रिय हैं।[5]

ANSI SQL की आइसोलेशन परिभाषा से संबंधित अन्य आलोचनाएँ भी हैं, जिसमें यह कार्यान्वयनकर्ताओं को बुरे काम करने के लिए प्रोत्साहित करती है:

... यह एक धारणा पर सूक्ष्म तरीकों से निर्भर करता है कि आशावादी या बहु-संस्करण समवर्ती योजना के विपरीत समवर्ती नियंत्रण के लिए लॉकिंग स्कीमा का उपयोग किया जाता है। इसका तात्पर्य है कि प्रस्तावित शब्दार्थ खराब परिभाषित हैं।[6]


आइसोलेशन लेवल बनाम रीड फेनोमेना

Read phenomenon



Isolation level
Dirty read Non-repeatable read Phantom read
Serializable no no no
Repeatable read no no yes
Read committed no yes yes
Read uncommitted yes yes yes

सीरियल करने योग्य एनॉमली सीरियल करने योग्य के समान नहीं है। अर्थात्, यह आवश्यक है, लेकिन पर्याप्त नहीं है कि एक क्रमबद्ध कार्यक्रम तीनों प्रकार की घटनाओं से मुक्त होना चाहिए।[5]


यह भी देखें

संदर्भ

  1. "Isolation Levels in the Database Engine", TechNet, Microsoft, https://technet.microsoft.com/en-us/library/ms189122(v=SQL.105).aspx
  2. "The Architecture of Transaction Processing Systems", Chapter 23, Evolution of Processing Systems, Department of Computer Science, Stony Brook University, retrieved 20 March 2014, http://www.cs.sunysb.edu/~liu/cse315/23.pdf
  3. Vlad Mihalcea (2015-10-20). "A beginner's guide to read and write skew phenomena".
  4. "Postgresql wiki - SSI".
  5. 5.0 5.1 "A Critique of ANSI SQL Isolation Levels" (PDF). Retrieved 29 July 2012.
  6. salesforce (2010-12-06). "Customer testimonials (SimpleGeo, CLOUDSTOCK 2010)". www.DataStax.com: DataStax. Retrieved 2010-03-09. (see above at about 13:30 minutes of the webcast!)


बाहरी संबंध