मुझे लगता है कि उपरोक्त अलगाव स्तर एक जैसे हैं। क्या कोई कृपया कुछ अच्छे उदाहरणों के साथ वर्णन कर सकता है कि मुख्य अंतर क्या है?
मुझे लगता है कि उपरोक्त अलगाव स्तर एक जैसे हैं। क्या कोई कृपया कुछ अच्छे उदाहरणों के साथ वर्णन कर सकता है कि मुख्य अंतर क्या है?
जवाबों:
पढ़ें प्रतिबद्ध एक अलग स्तर है कि गारंटी देता है कि किसी भी डेटा पढ़ने गया था प्रतिबद्ध पल में पढ़ा जाता है। यह पाठक को किसी भी मध्यवर्ती, बिना पढ़े, 'गंदे' पढ़ने से रोकता है। यह कोई वादा नहीं करता है कि यदि लेन-देन फिर से जारी करता है, तो वही डेटा मिलेगा, जिसे पढ़ने के बाद डेटा बदलने के लिए स्वतंत्र है।
बार-बार पढ़ा जाने वाला एक उच्च अलगाव स्तर है, कि रीड प्रतिबद्ध स्तर की गारंटी के अलावा, यह भी गारंटी देता है कि पढ़ा गया कोई भी डेटा नहीं बदल सकता है , यदि लेनदेन फिर से उसी डेटा को पढ़ता है, तो यह पहले से पढ़े गए डेटा को जगह में बदल देगा, अपरिवर्तित , और पढ़ने के लिए उपलब्ध है।
अगला आइसोलेशन स्तर, सीरियल करने योग्य, एक और भी मजबूत गारंटी देता है: दोहराई जाने वाली सभी गारंटियों के अलावा, यह गारंटी भी देता है कि कोई भी नया डेटा एक बाद में पढ़े जाने वाले डेटा द्वारा नहीं देखा जा सकता है।
मान लें कि आपके पास एक स्तंभ C के साथ एक तालिका है जिसमें एक पंक्ति है, कहते हैं कि इसका मान '1' है। और विचार करें कि आपके पास निम्नलिखित की तरह एक सरल कार्य है:
BEGIN TRANSACTION;
SELECT * FROM T;
WAITFOR DELAY '00:01:00'
SELECT * FROM T;
COMMIT;
यह एक सरल कार्य है जो टेबल टी से दो रीड जारी करता है, उनके बीच 1 मिनट की देरी होती है।
यदि आप ऊपर दिए गए तर्क का पालन करते हैं, तो आप यह महसूस कर सकते हैं कि SERIALIZABLE लेन-देन, जबकि वे आपके लिए जीवन को आसान बना सकते हैं, हमेशा हर संभव समवर्ती ऑपरेशन को पूरी तरह से अवरुद्ध कर रहे हैं , क्योंकि उन्हें आवश्यकता है कि कोई भी पंक्ति को संशोधित, हटा या सम्मिलित नहीं कर सकता है। .Net System.Transactions
स्कोप का डिफ़ॉल्ट लेन-देन आइसोलेशन स्तर क्रमबद्ध होता है, और यह आमतौर पर परिणाम दिखाने वाले एबसिमल प्रदर्शन की व्याख्या करता है।
और अंत में, स्नैपशॉट अलगाव स्तर भी है। SNAPSHOT अलगाव स्तर क्रमबद्धता के समान गारंटी देता है, लेकिन यह आवश्यक नहीं है कि कोई समवर्ती लेनदेन डेटा को संशोधित न कर सके। इसके बजाय, यह हर पाठक को दुनिया के अपने संस्करण (यह खुद का 'स्नैपशॉट') देखने के लिए मजबूर करता है। यह प्रोग्राम के साथ-साथ बहुत ही स्केलेबल के खिलाफ प्रोग्राम करना आसान बनाता है क्योंकि यह समवर्ती अपडेट को ब्लॉक नहीं करता है। हालांकि, वह लाभ एक मूल्य के साथ आता है: अतिरिक्त सर्वर संसाधन खपत।
पूरक पढ़ता है:
डेटाबेस की स्थिति को लेनदेन की शुरुआत से बनाए रखा जाता है। यदि आप session1 में एक मान प्राप्त करते हैं, तो सत्र 2 में उस मान को अपडेट करें, सत्र 1 में इसे फिर से प्राप्त करने से वही परिणाम वापस आ जाएंगे। पढ़े जाने योग्य हैं।
session1> BEGIN;
session1> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> BEGIN;
session2> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> UPDATE names SET firstname = 'Bob' WHERE id = 7;
session2> SELECT firstname FROM names WHERE id = 7;
Bob
session2> COMMIT;
session1> SELECT firstname FROM names WHERE id = 7;
Aaron
लेन-देन के संदर्भ में, आप हमेशा सबसे हाल ही में प्रतिबद्ध मूल्य प्राप्त करेंगे। यदि आप session1 में मान प्राप्त करते हैं, तो इसे session2 में अपडेट करें, फिर इसे session1again में पुनः प्राप्त करें, आपको सत्र 2 में संशोधित मूल्य मिल जाएगा। यह अंतिम प्रतिबद्ध पंक्ति को पढ़ता है।
session1> BEGIN;
session1> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> BEGIN;
session2> SELECT firstname FROM names WHERE id = 7;
Aaron
session2> UPDATE names SET firstname = 'Bob' WHERE id = 7;
session2> SELECT firstname FROM names WHERE id = 7;
Bob
session2> COMMIT;
session1> SELECT firstname FROM names WHERE id = 7;
Bob
समझ में आता है?
इस धागे के लिए मेरे पढ़ने और समझ के अनुसार बस उत्तर और @ रेमस-रसानु उत्तर इस सरल परिदृश्य पर आधारित है:
दो प्रक्रियाएं ए और बी हैं। प्रक्रिया बी तालिका एक्स पढ़ रही है। प्रक्रिया एक तालिका में लिख रही है। प्रक्रिया बी फिर से तालिका एक्स पढ़ रही है।
पुराना प्रश्न जिसका पहले से ही स्वीकृत उत्तर है, लेकिन मैं इन दो अलगाव स्तरों के बारे में सोचना पसंद करता हूं कि वे SQL सर्वर में लॉकिंग व्यवहार को कैसे बदलते हैं। यह उन लोगों के लिए मददगार हो सकता है जो मेरे जैसे गतिरोध को डिबग कर रहे हैं।
पढ़ें (डिफ़ॉल्ट)
साझा ताले को SELECT में लिया जाता है और तब SELECT स्टेटमेंट पूरा होने पर जारी किया जाता है । यह इस प्रकार है कि सिस्टम यह गारंटी दे सकता है कि बिना डेटा के गंदे रीड्स नहीं हैं। आपके लेनदेन के पूर्ण होने और आपके लेनदेन के पूर्ण होने से पहले अन्य लेनदेन अभी भी अंतर्निहित पंक्तियों को बदल सकते हैं।
दोहराए गए पढ़ें
साझा ताले को SELECT में लिया जाता है और फिर लेनदेन पूर्ण होने के बाद ही जारी किया जाता है । यह इस तरह से है कि सिस्टम यह गारंटी दे सकता है कि आपके द्वारा पढ़ा गया मान लेन-देन के दौरान नहीं बदलेगा (क्योंकि वे लेनदेन समाप्त होने तक बंद रहते हैं)।
सरल आरेखों के साथ इस संदेह को समझाने की कोशिश की जा रही है।
पढ़ें प्रतिबद्ध: यहाँ इस अलगाव स्तर में, लेन-देन T1, लेन-देन T2 द्वारा प्रतिबद्ध X के अद्यतन मूल्य को पढ़ेगा।
बार-बार पढ़ने योग्य: इस अलगाव स्तर में, लेन-देन T1 लेनदेन T2 द्वारा किए गए परिवर्तनों पर विचार नहीं करेगा।
मुझे लगता है कि यह चित्र भी उपयोगी हो सकता है, यह मुझे एक संदर्भ के रूप में मदद करता है जब मैं अलगाव के स्तर के बीच के अंतर को जल्दी से याद रखना चाहता हूं ( यूट्यूब पर kudvenkat के लिए धन्यवाद )
कृपया ध्यान दें कि, repeatable में एक टपल करने के लिए repeatable पढ़ने का संबंध है, लेकिन पूरे मेज पर नहीं। एएनएससी अलगाव के स्तर में, प्रेत पढ़ा विसंगति हो सकती है, जिसका मतलब है कि एक तालिका उसी के साथ पढ़ें जहां खंड दो बार अलग-अलग वापसी कर सकता है विभिन्न परिणाम सेट। वास्तव में, यह दोहराने योग्य नहीं है ।
प्रारंभिक स्वीकृत समाधान पर मेरा अवलोकन।
RR (डिफ़ॉल्ट mysql) के तहत - यदि कोई tx खुला है और एक SELECT निकाल दिया गया है, तो दूसरा tx पिछले REx परिणाम सेट होने तक संबंधित किसी भी पंक्ति को हटा नहीं सकता है जब तक कि पिछला tx प्रतिबद्ध नहीं होता है (वास्तव में नया tx में स्टेटमेंट केवल लटका होगा) , हालांकि अगला tx बिना किसी परेशानी के तालिका से सभी पंक्तियों को हटा सकता है । Btw, पिछले tx में एक अगला READ अभी भी पुराने डेटा को तब तक देखेगा जब तक वह प्रतिबद्ध नहीं होता।