2013-08-18 3 views
13

पढ़ा से this ओरेकल जावा ट्यूटोरियल:अंतर

एक गैर repeatable पढ़ा तब होता है जब लेन-देन एक बाद एक पंक्ति, लेनदेन बी बाद में पंक्ति को अद्यतन करता प्राप्त करता है, और लेन-देन एक एक ही पंक्ति फिर से प्राप्त करता है। लेनदेन ए एक ही पंक्ति दो बार पुनर्प्राप्त करता है लेकिन अलग-अलग डेटा देखता है।

गंदे पढ़ने और गैर-दोहराने योग्य पढ़ने के बीच क्या अंतर है? क्या यह वही बात नहीं है? दूसरों के अपडेट के कारण गलत परिणाम पढ़ रहे हैं?

अग्रिम धन्यवाद।

उत्तर

14

ठीक उसी पेज बताता है कि एक गंदा पढ़ा है:

एक अद्यतन मूल्य कि प्रतिबद्ध नहीं किया गया है क्योंकि यह संभव है के लिए है कि मूल्य पिछला मान को वापस लुढ़का जा करने के लिए एक गंदा पढ़ने माना जाता है को एक्सेस करना । यदि आप बाद में लुढ़कने वाले मान को पढ़ते हैं, तो आपने एक अवैध मान पढ़ा होगा।

तो, गैर repeatable पढ़ा, दो अलग अलग प्रतिबद्ध मूल्यों को पढ़ने में होते हैं जबकि गंदा पढ़ा एक मूल्य है कि अभी तक प्रतिबद्ध नहीं किया गया है पढ़ने में होते हैं। बिल्कुल भिन्न।

+0

हालांकि यह कैसे संभव हो सकता है? मेरा मतलब है कि लेनदेन पूरा होने के बाद दोहराने योग्य पढ़ने को रोकने का एकमात्र तरीका यह है कि लॉक को भी बाद में रखा जाए ... वैसे भी जल्दी या बाद में एक और कनेक्शन (बी) किया जाएगा और यह उस के अपडेट को कैसे रोक रहा है पंक्ति को पहले – Rollerball

+0

द्वारा पुनर्प्राप्त किया गया था या शायद प्रति बार केवल 1 कनेक्शन डीबीएमएस में लिख सकता है। इसलिए जब तक डीबीएमएस के साथ कोई सक्रिय कनेक्शन नहीं है, कोई अन्य कनेक्शन वास्तव में उन विशेष पंक्तियों के लिए डीबी को अपडेट नहीं कर सकता है। (जब तक पहला कनेक्शन बंद नहीं हो जाता) क्या मैं सही हूँ? – Rollerball

+1

एक दोहराने योग्य-पढ़ने केवल लेनदेन की अवधि के लिए गारंटीकृत है: आप एक लेनदेन टी 1 शुरू करते हैं, ए 1 पढ़ते हैं, फिर एक और लेनदेन टी 2 ए 1 ​​से ए 2 को संशोधित करता है और करता है, तो पहला लेनदेन टी 1 मूल्य को फिर से पढ़ता है, और अभी भी ए 1 पढ़ता है । यह दोहराया जाने वाला है। बेशक, एक और लेनदेन टी 3 जो टी 2 के बाद पहली बार मूल्य पढ़ता है, प्रतिबद्ध मूल्य, ए 2 पढ़ेगा। यह जानने के लिए कि यह आपके डेटाबेस द्वारा कैसे कार्यान्वित किया गया है, इसके दस्तावेज़ पढ़ें। उनमें से अधिकतर [एमवीसीसी] का उपयोग करते हैं (http://en.wikipedia.org/wiki/Multiversion_concurrency_control), AFAIK। –

11

here से: -

गंदा पुस्तकें होते हैं जब एक लेन-देन एक और द्वारा लिखित डेटा, अप्रतिबद्ध, लेन-देन पढ़ता है। गंदे पढ़ने के साथ खतरा यह है कि अन्य लेनदेन कभी भी "गंदे" डेटा के साथ मूल लेनदेन छोड़कर कभी प्रतिबद्ध नहीं हो सकता है।

गैर Repeatable पढ़ता होते हैं जब एक लेन-देन दो बार एक ही डेटा का उपयोग करने का प्रयास करता है और एक दूसरे लेन-देन के बीच पहले लेनदेन के प्रयासों को पढ़ने के डेटा संशोधित करता है। इससे पहले लेन-देन उसी डेटा के लिए दो अलग-अलग मानों को पढ़ने के लिए हो सकता है, जिससे मूल रीड-अप करने योग्य हो सकता है।

+0

हालांकि यह कैसे संभव हो सकता है? मेरा मतलब है कि लेनदेन पूरा होने के बाद दोहराने योग्य पढ़ने को रोकने का एकमात्र तरीका यह है कि लॉक को भी बाद में रखा जाए ...वैसे भी जल्दी या बाद में एक और कनेक्शन (बी) किया जाएगा और यह – Rollerball

+0

द्वारा पहले से प्राप्त की गई पंक्ति के अद्यतन को रोकने के लिए कैसे जा रहा है या शायद प्रति दिन केवल 1 कनेक्शन डीबीएमएस में लिख सकता है। इसलिए जब तक डीबीएमएस के साथ कोई सक्रिय कनेक्शन नहीं है, कोई अन्य कनेक्शन वास्तव में उन विशेष पंक्तियों के लिए डीबी को अपडेट नहीं कर सकता है। (जब तक पहला कनेक्शन बंद नहीं हो जाता) क्या मैं सही हूँ? – Rollerball

+0

एक गैर-दोहराने योग्य पढ़ने वह है जहां एक लेनदेन दूसरी बार नहीं पढ़ सकता है जब तक कि कोई अन्य लेन-देन पंक्ति को बदलता न हो। चुनिंदा कथन करने के दौरान, जब दोबारा पढ़े जाते हैं तो गैर-दोहराने योग्य मेरे घटित होते हैं। गैर-दोहराने योग्य पठन एक प्रतिबद्ध संघर्ष द्वारा प्रभावित लेनदेन की आवश्यकता पर हो सकता है, वापस रोल करना आराम से होना चाहिए। –