1.1 परिचय
आणि आता मजा सुरू होते - व्यवहार कसे कार्य करतात याचा सिद्धांत. जेव्हा तुम्ही वेगवेगळ्या थ्रेड्समध्ये समान डेटा बदलता तेव्हा सिस्टम कार्यरत कसे ठेवायचे? किंवा तुम्हाला एक व्यवहार दुसर्यामध्ये चालवायचा आहे? व्यवहारांच्या अलगावचा अभ्यास करून आपण या प्रश्नांची उत्तरे शोधण्यास सुरुवात करू...
व्यवहार अलगाव पातळी हे एक सशर्त मूल्य आहे जे डीबीएमएसमध्ये तार्किकदृष्ट्या समांतर व्यवहारांच्या अंमलबजावणीच्या परिणामी, विसंगत डेटाची अनुमती किती प्रमाणात आहे हे निर्धारित करते. ट्रान्झॅक्शन अलगाव पातळीच्या स्केलमध्ये अनेक मूल्ये असतात, सर्वात कमी ते सर्वोच्च रँक केली जातात; उच्च अलगाव पातळी चांगल्या डेटा सुसंगततेशी संबंधित आहे, परंतु त्याचा वापर भौतिकदृष्ट्या समांतर व्यवहारांची संख्या कमी करू शकतो.
याउलट, कमी अलगाव पातळी अधिक समांतर व्यवहारांना अनुमती देते, परंतु डेटा अचूकता कमी करते. अशा प्रकारे, वापरलेल्या व्यवहार अलगावची पातळी निवडणे, माहिती प्रणालीचा विकासक, काही प्रमाणात, कामाचा वेग आणि सिस्टमकडून प्राप्त झालेल्या डेटाची हमी सुसंगतता सुनिश्चित करण्यासाठी निवड प्रदान करतो.
व्यवहार वापरून समवर्ती प्रवेशाच्या समस्या
जेव्हा व्यवहार समांतरपणे चालवले जातात, तेव्हा खालील समस्या शक्य आहेत:
- गमावले अद्यतन - जर एकाच वेळी एक डेटा ब्लॉक भिन्न व्यवहारांद्वारे बदलला गेला तर, शेवटचा एक वगळता सर्व बदल गमावले जातात;
- "डर्टी" रीडिंग (इंग्रजी. डर्टी रीड) - व्यवहाराद्वारे जोडलेला किंवा बदललेला डेटा वाचणे, ज्याची नंतर पुष्टी होणार नाही (रोल बॅक);
- नॉन-रिपीटेबल रीड (eng. नॉन-रिपीटेबल रीड) - त्याच व्यवहारात पुन्हा वाचताना, पूर्वी वाचलेला डेटा बदलला जातो;
- फॅंटम रीड्स - एक व्यवहार त्याच्या अंमलबजावणीदरम्यान अनेक वेळा समान निकषांनुसार अनेक पंक्ती निवडतो. या फेचेसमधील दुसरा व्यवहार पहिल्या व्यवहाराच्या फेच निकषांमध्ये वापरलेल्या काही पंक्तींच्या पंक्ती जोडतो किंवा सुधारित करतो आणि यशस्वीरित्या समाप्त होतो. परिणामी, असे दिसून येईल की पहिल्या व्यवहारातील समान निवडी पंक्तींचे भिन्न संच देतात.
या समस्या उद्भवू शकतात अशा परिस्थितींचा विचार करा.
1.2 अद्यतन गमावले
जेव्हा एक डेटा ब्लॉक वेगवेगळ्या व्यवहारांद्वारे एकाच वेळी बदलला जातो तेव्हा त्यातील एक बदल गमावला जातो.
समजा एकाच वेळी दोन व्यवहार चालू आहेत:
व्यवहार १ | व्यवहार २ |
---|---|
अद्यतन tbl1 सेट f2=f2+20 जेथे f1=1; | अद्यतन tbl1 SET f2=f2+25 जेथे f1=1; |
दोन्ही व्यवहारांमध्ये, f2 फील्डचे मूल्य बदलते; पूर्ण झाल्यावर, फील्डचे मूल्य 45 ने वाढले पाहिजे. खरं तर, क्रियांचा पुढील क्रम येऊ शकतो:
- दोन्ही व्यवहार एकाच वेळी फील्डची सद्यस्थिती वाचतात. येथे अचूक भौतिक समरूपता आवश्यक नाही, दुसर्या व्यवहाराचा निकाल लिहिण्यापूर्वी क्रमाने दुसरे वाचन ऑपरेशन पूर्ण केले जाणे पुरेसे आहे.
- दोन्ही व्यवहार मागील वाचलेल्या मूल्यामध्ये अनुक्रमे 20 आणि 25 जोडून नवीन फील्ड मूल्याची गणना करतात.
- ट्रान्झॅक्शन्स गणनेचा निकाल फील्ड f2 वर परत लिहिण्याचा प्रयत्न करतात. एकाच वेळी दोन लेखन करणे शारीरिकदृष्ट्या अशक्य असल्याने, प्रत्यक्षात एक लेखन ऑपरेशन आधी केले जाईल, दुसरे नंतर. दुसरे लेखन ऑपरेशन पहिल्याचा परिणाम अधिलिखित करेल.
परिणामी, दोन्ही व्यवहार पूर्ण झाल्यावर, f2 फील्डचे मूल्य 45 ने वाढू शकत नाही, परंतु 20 किंवा 25 ने वाढू शकते, म्हणजे, डेटा बदलणाऱ्या व्यवहारांपैकी एक "गायब" होईल.
1.3 "डर्टी" वाचन
व्यवहाराद्वारे जोडलेला किंवा सुधारित केलेला डेटा वाचणे जो नंतर कमिट करण्यात अयशस्वी होईल (रोलबॅक).
समजा आमच्याकडे वेगवेगळ्या ऍप्लिकेशन्सद्वारे उघडलेले दोन व्यवहार आहेत जे खालील SQL विधाने कार्यान्वित करतात:
व्यवहार १ | व्यवहार २ |
---|---|
अद्यतन tbl1 सेट f2=f2+1 जेथे f1=1; | |
tbl1 मधून f2 निवडा जेथे f1=1; | |
रोलबॅक काम; |
व्यवहार 1 मध्ये, फील्ड f2 चे मूल्य बदलले आहे, आणि नंतर व्यवहार 2 मध्ये, या फील्डचे मूल्य निवडले आहे. त्यानंतर, व्यवहार 1 परत आणला जातो. परिणामी, दुसऱ्या व्यवहाराद्वारे प्राप्त झालेले मूल्य डेटाबेसमध्ये संग्रहित मूल्यापेक्षा वेगळे असेल.
1.4 पुनरावृत्ती न करता येणारे वाचन
परिस्थिती जेव्हा, त्याच व्यवहारात पुन्हा वाचताना, पूर्वी वाचलेला डेटा बदलला जातो.
समजा आमच्याकडे वेगवेगळ्या ऍप्लिकेशन्सद्वारे उघडलेले दोन व्यवहार आहेत जे खालील SQL विधाने कार्यान्वित करतात:
व्यवहार १ | व्यवहार २ |
---|---|
tbl1 मधून f2 निवडा जेथे f1=1; | |
अद्यतन tbl1 सेट f2=f2+3 जेथे f1=1; | |
कमिट; | |
tbl1 मधून f2 निवडा जेथे f1=1; |
व्यवहार 2 मध्ये, फील्ड f2 चे मूल्य निवडले आहे, नंतर व्यवहार 1 मध्ये, फील्ड f2 चे मूल्य बदलले आहे. तुम्ही ट्रान्झॅक्शन 2 मधील फील्ड f2 मधून एखादे मूल्य निवडण्याचा पुन्हा प्रयत्न केल्यास, वेगळा परिणाम मिळेल. ही परिस्थिती विशेषतः अस्वीकार्य आहे जेव्हा डेटा अंशतः सुधारित करण्यासाठी आणि डेटाबेसवर परत लिहिण्यासाठी वाचला जातो.
१.५ "फँटम्स" वाचणे
जेव्हा त्याच व्यवहारात वारंवार वाचन करताना, समान निवड पंक्तींचे वेगवेगळे संच देते तेव्हा परिस्थिती.
समजा भिन्न ऍप्लिकेशन्सद्वारे उघडलेले दोन व्यवहार आहेत जे खालील SQL विधाने कार्यान्वित करतात:
व्यवहार १ | व्यवहार २ |
---|---|
tbl1 मधून SUM(f2) निवडा; | |
tbl1 (f1,f2) मूल्यांमध्ये घाला(15,20); | |
कमिट; | |
tbl1 मधून SUM(f2) निवडा; |
ट्रान्झॅक्शन 2 एसक्यूएल स्टेटमेंट कार्यान्वित करते जे फील्ड f2 ची सर्व मूल्ये वापरते. नंतर व्यवहार 1 मध्ये एक नवीन पंक्ती घातली जाते, ज्यामुळे व्यवहार 2 मधील SQL स्टेटमेंट पुन्हा कार्यान्वित होऊन वेगळा परिणाम मिळतो. या परिस्थितीला फॅन्टम रीडिंग (फॅंटम रीडिंग) म्हणतात. पुनरावृत्ती न करता येण्याजोग्या वाचनापेक्षा हे वेगळे आहे की वारंवार डेटा ऍक्सेसचा परिणाम डेटाच्या बदलामुळे/हटवण्यामुळे नाही तर नवीन (फँटम) डेटा दिसल्यामुळे बदलला आहे.
GO TO FULL VERSION