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

From Vigyanwiki
No edit summary
No edit summary
Line 18: Line 18:


{|class="wikitable"
{|class="wikitable"
|+ users
|+ उपयोगकर्ता
! id !! name !! age
!आईडी
!नाम
! आयु
|-
|-
| 1  || Alice  || 20
| 1  || Alice  || 20
Line 27: Line 29:




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


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


{|
{|
|-
|-
! Transaction 1
! लेन-देन 1
! Transaction 2
! लेन-देन 2
|-
|-
|<syntaxhighlight lang="sql">
|<syntaxhighlight lang="sql">
Line 68: Line 70:




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


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


{|
{|
|-
|-
! Transaction 1
! लेन-देन 1
! Transaction 2
! लेन-देन 2
|-
|-
|<syntaxhighlight lang="sql">
|<syntaxhighlight lang="sql">
Line 103: Line 105:




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


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


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


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


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


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


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


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


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


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


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


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


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


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


: यह पत्र आइसोलेशन के स्तर को परिभाषित करने के लिए विसंगतिपूर्ण दृष्टिकोण में कई कमजोरियों को दर्शाता है। तीन एएनएसआई घटनाएं अस्पष्ट हैं, और यहां तक ​​​​कि उनकी सबसे छोटी व्याख्याओं में कुछ विषम व्यवहारों को सम्मलित नहीं किया गया है ... यह कुछ प्रति-सहज ज्ञान युक्त परिणामों की ओर जाता है। विशेष रूप से, लॉक-आधारित आइसोलेशन स्तरों में उनके एएनएसआई समकक्षों की तुलना में भिन्न विशेषताएं होती हैं। यह चिंताजनक है क्योंकि व्यावसायिक डेटाबेस प्रणाली आमतौर पर लॉकिंग कार्यान्वयन का उपयोग करते हैं। इसके अतिरिक्त, ANSI घटना कई प्रकार के आइसोलेशन स्तर के व्यवहार के बीच अंतर नहीं करती है जो वाणिज्यिक प्रणालियों में लोकप्रिय हैं।<ref name="sql-isolation">
: यह पत्र आइसोलेशन के स्तर को परिभाषित करने के लिए विसंगतिपूर्ण दृष्टिकोण में कई कमजोरियों को दर्शाता है। तीन एएनएसआई घटनाएं अस्पष्ट हैं, और यहां तक ​​​​कि उनकी सबसे छोटी व्याख्याओं में कुछ विषम व्यवहारों को सम्मलित नहीं किया गया है ... यह कुछ प्रति-सहज ज्ञान युक्त परिणामों की ओर जाता है। विशेष रूप से, लॉक-आधारित आइसोलेशन स्तरों में उनके एएनएसआई समकक्षों की तुलना में भिन्न विशेषताएं होती हैं। यह चिंताजनक है क्योंकि व्यावसायिक डेटाबेस प्रणाली सामान्यतः लॉकिंग कार्यान्वयन का उपयोग करते हैं। इसके अतिरिक्त, एएनएसआई घटना कई प्रकार के आइसोलेशन स्तर के व्यवहार के मध्य अंतर नहीं करती है जो वाणिज्यिक प्रणालियों में लोकप्रिय हैं।<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 183: Line 183:
| access-date = 29 July 2012 }}
| access-date = 29 July 2012 }}
</ref>
</ref>
ANSI SQL की आइसोलेशन परिभाषा से संबंधित अन्य आलोचनाएँ भी हैं, जिसमें यह कार्यान्वयनकर्ताओं को बुरे काम करने के लिए प्रोत्साहित करती है:
एएनएसआई एसक्यूएल की आइसोलेशन परिभाषा से संबंधित अन्य आलोचनाएँ भी हैं, जिसमें यह कार्यान्वयनकर्ताओं को बुरे काम करने के लिए प्रोत्साहित करती है:


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

Revision as of 15:20, 23 February 2023

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

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

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

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

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

घटनाएं पढ़ें

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

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

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

उपयोगकर्ता
आईडी नाम आयु
1 Alice 20
2 Bob 25


गंदा पठन

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

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

लेन-देन 1 लेन-देन 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 में दूसरा सेलेक्ट अपडेटेड रो को रिट्रीव करता है: यह नॉन-रिपीटेबल रीड है। रिपीटेबल रीड और सेरिअलिज़ाब्ली(SERIALIZABLE) आइसोलेशन लेवल पर, लेन-देन 1 में दूसरा सेलेक्ट प्रारंभिक पंक्ति को पुनः प्राप्त करता है।

लेन-देन 1 लेन-देन 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 में दूसरा सेलेक्ट पंक्तियों के नए सेट को पुनः प्राप्त करता है जिसमें सम्मिलित पंक्ति सम्मलित होती है: यह फैंटम रीड है। सेरिअलिज़ाब्ली आइसोलेशन स्तर पर, लेन-देन 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 को क्रमांकन विफलता के साथ वापस ले लिया जाता है।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

... यह एक धारणा पर सूक्ष्म तरीकों से निर्भर करता है कि आशावादी या बहु-संस्करण समवर्ती योजना के विपरीत समवर्ती नियंत्रण के लिए लॉकिंग स्कीमा का उपयोग किया जाता है। इसका तात्पर्य है कि प्रस्तावित शब्दार्थ खराब परिभाषित हैं।[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!)


बाहरी संबंध