3.1 एसिड का उद्भव
संक्षिप्त नाम ACID पहली बार 1983 में थियो हैडर और एंड्रियास रेउटर के एक लेख में दिखाई दिया। पाठ को सरल बनाने और इसे और अधिक ठोस बनाने के लिए, मैं इस लेख के एक अंश का अनुवाद (थोड़ी कटौती के साथ) दूंगा। यह स्निपेट एक बैंक लेनदेन के उदाहरण का उपयोग करता है जिसमें पैसा एक खाते से दूसरे खाते में स्थानांतरित किया जाता है।
$BEGIN_TRANSACTION
एक लेन-देन की अवधारणा, जिसमें उदाहरण में और के बीच डेटाबेस के साथ सभी इंटरैक्शन शामिल हैं $COMMIT_TRANSACTION
, के लिए आवश्यक है कि सभी क्रियाएं अविभाज्य रूप से की जाएं: या तो सभी क्रियाएं डेटाबेस की स्थिति में ठीक से परिलक्षित होती हैं, या कुछ भी नहीं होता है। $COMMIT_TRANSACTION
यदि उपयोगकर्ता के पास पहुंचने से पहले किसी भी समय एक कथन दर्ज ERROR
करता है $RESTORE_TRANSACTION
, तो डेटाबेस में कोई परिवर्तन दिखाई नहीं देता है।
इस अविभाज्यता को प्राप्त करने के लिए, एक लेन-देन में निम्नलिखित चार गुण होने चाहिए:
परमाणुता (परमाणुता)। लेन-देन ऊपर वर्णित ऑल-ऑर-नथिंग प्रकार का होना चाहिए, और इससे कोई फर्क नहीं पड़ता कि उपयोगकर्ता को पता होना चाहिए कि लेनदेन किस स्थिति में है।
संगति (संगति)। एक लेन-देन जो लेन-देन के अपने सामान्य अंत (ईओटी) तक पहुँचता है और इसके परिणाम प्रस्तुत करता है, डेटाबेस स्थिरता बनाए रखता है। दूसरे शब्दों में, हर सफल लेनदेन, परिभाषा के अनुसार, केवल वैध परिणाम देता है। चौथी संपत्ति - स्थायित्व का समर्थन करने के लिए यह स्थिति आवश्यक है।
अलगाव (अलगाव)। लेन-देन के भीतर होने वाली घटनाओं को अन्य समवर्ती निष्पादन लेनदेन से छिपाया जाना चाहिए। यदि यह शर्त पूरी नहीं होती, तो ऊपर बताए गए कारणों से, लेन-देन को अपनी शुरुआत में वापस करना असंभव होगा। अलगाव प्राप्त करने के लिए, सिंक्रनाइज़ेशन नामक विधियों का उपयोग किया जाता है ...
स्थायित्व (स्थायित्व)। एक बार लेन-देन पूरा हो जाने और इसके परिणाम डेटाबेस को सौंपने के बाद, सिस्टम को यह सुनिश्चित करना चाहिए कि वे परिणाम किसी भी बाद की विफलताओं से बचे रहें। चूंकि नियंत्रण का कोई दायरा नहीं है जो लेन-देन के सेट को फैलाता है, डेटाबेस प्रबंधन प्रणाली (डीबीएमएस) का लेनदेन की सीमाओं से परे कोई नियंत्रण नहीं है।
इसलिए, उपयोगकर्ता को गारंटी दी जानी चाहिए कि अगर सिस्टम उसे सूचित करता है कि कुछ हुआ है, तो यह "कुछ" वास्तव में हुआ है। चूंकि, परिभाषा के अनुसार, कोई भी (सफलतापूर्वक पूर्ण - एस.के.) लेन-देन सही है, अनिवार्य रूप से गलत लेन-देन (यानी गलत डेटा वाले लेन-देन) के परिणाम केवल संबंधित "काउंटर" लेनदेन (प्रति-लेन-देन) द्वारा समाप्त किए जा सकते हैं।
3.2 लेन-देन का उद्भव
ये चार विशेषताएँ - एटोमिसिटी, कंसिस्टेंसी, आइसोलेशन, और ड्यूरेबिलिटी (ACID) - ट्रांसेक्शनल प्रतिमान की मुख्य विशेषताओं का वर्णन करती हैं जो डेटाबेस सिस्टम डिज़ाइन के कई पहलुओं को प्रभावित करती हैं। इसलिए, हम मानते हैं कि लेन-देन का समर्थन करने के लिए किसी भी प्रणाली की क्षमता इस प्रणाली की गुणवत्ता की कसौटी (एसीआईडी परीक्षण) है।
एक साधारण PL/1-SQL प्रोग्राम जो एक खाते से दूसरे खाते में धनराशि स्थानांतरित करता है।
FUNDS_TRANSFER. PROCEDURE,
$BEGIN_TRANSACTION;
ON ERROR DO; /* in case of error */
$RESTORE_TRANSACTION, /* undo all work */
GET INPUT MESSAGE; /* reacquire input */
PUT MESSAGE ('TRANSFER FAILED'); /* report failure */
GO TO COMMIT;
END;
GET INPUT MESSAGE; /* get and parse input */
EXTRACT ACCOUNT_EBIT, ACCOUNT_CREDIT,
AMOUNT FROM MESSAGE,
$UPDATE ACCOUNTS /* do debit */
SET BALANCE ffi BALANCE - AMOUNT
WHERE ACCOUNTS.NUMBER = ACCOUNT_DEBIT;
$UPDATE ACCOUNTS /* do credit */
SET BALANCE = BALANCE + AMOUNT
WHERE ACCOUNTS.NUMBER = ACCOUNT_CREDIT;
$INSERT INTO HISTORY /* keep audit trail */
<DATE, MESSAGE>;
PUT MESSAGE ('TRANSFER DONE'); /* report success */
COMMIT: /* commit updates */
$COMMIT_TRANSACTION;
END; /* end of program */
मैंने आपको यह याद दिलाने के लिए इस कोड का एक उदाहरण प्रदान किया है कि, वास्तव में, ACID गुण, एक ओर, किसी भी DBMS के लिए आवश्यकताओं के रूप में माना जा सकता है जो लेनदेन का समर्थन करने का दावा करता है, और दूसरी ओर, लेनदेन की परिभाषा के रूप में एक डेटाबेस सिस्टम । यह परिभाषा पूरी तरह से सांसारिक अभ्यास के अनुरूप है। उदाहरण के लिए, यह कल्पना करना मुश्किल है कि बैंकिंग लेनदेन करने वाला ग्राहक (चाहे एक जीवित मानव टेलर की सहायता से या इंटरनेट बैंकिंग का उपयोग करके) बैंक से एसीआईडी के सभी गुणों को पूरा करने की अपेक्षा नहीं करता है। एक बैंक जो अपने लेन-देन के लिए एसीआईडी संपत्ति का समर्थन नहीं करता है, सबसे अच्छा, ग्राहकों को खो देगा, और सबसे खराब, दिवालिया हो जाएगा।
3.3 एसिड कनेक्टिविटी
यह बहुत महत्वपूर्ण है कि ACID गुण अविभाज्य हैं, उनमें से किसी को त्यागने से शेष संयोजन अर्थहीन हो जाता है। विशेष रूप से, यदि हम संगति गुण को छोड़ देते हैं (उस अर्थ में जिसमें इसका उपयोग उपरोक्त उद्धरण में किया गया था), तो हम लेन-देन की शुद्धता के लिए मानदंड खो देंगे। डेटाबेस सिस्टम किसी भी सार्थक तरीके से यह तय नहीं कर पाएगा कि लेन-देन की अनुमति है या नहीं, और डेटाबेस की वर्तमान स्थिति में किए गए संचालन की शुद्धता के लिए सभी जांचों को एप्लिकेशन कोड में करना होगा।
आपको यह समझने की जरूरत है कि इस मामले में हम तार्किक स्थिरता के बारे में बात कर रहे हैं। बैंक के ग्राहक को चाहिए कि बैंक उसके द्वारा स्थापित और ग्राहकों को ज्ञात नियमों के अनुसार काम करे, ताकि इन नियमों का उल्लंघन करने वाला कोई भी लेनदेन करना असंभव हो, ताकि उसी ग्राहक का अगला लेनदेन पर्यावरण इन नियमों के अनुसार सहमत हुए।
ऑनलाइन स्टोर के क्लाइंट को उसके द्वारा ऑर्डर किए गए सामान और भुगतान किए गए सामानों को समय पर ढंग से (क्लाइंट को स्थापित और ज्ञात नियमों के अनुसार) वितरित करने की आवश्यकता होती है। नहीं तो वह इस स्टोर पर भरोसा नहीं करेगा। उसी समय, न तो बैंक के ग्राहक और न ही इंटरनेट स्टोर के ग्राहक को उद्यम की आंतरिक रसोई की परवाह है कि इसके लेनदेन को पूरा करने के लिए कौन सी आंतरिक कार्रवाई की जाती है। क्लाइंट को परवाह नहीं है कि इस उद्यम की भौतिक स्थिरता कैसे बनाए रखी जाती है, भौतिक स्तर पर संचालन कैसे किया जाता है।
यदि DBMS लेन-देन (और डेटाबेस) की तार्किक स्थिरता बनाए रखने का ध्यान रखता है, तो अनुप्रयोग सरल, अधिक समझने योग्य और अधिक विश्वसनीय हो जाते हैं। लेनदेन के संबंध में आवेदन क्षेत्र (बैंक, स्टोर, गोदाम, आदि) के सभी तर्क और डेटा की वैध स्थिति डेटाबेस सिस्टम में जाती है। और इस प्रणाली के लिए आवश्यकताएं बहुत सरल हैं: एसीआईडी लेनदेन के लिए समर्थन, आवेदन द्वारा डेटाबेस में प्रदान की गई स्थिरता के नियमों को ध्यान में रखते हुए। मेरे दृष्टिकोण से, ACID लेनदेन की अस्वीकृति एप्लिकेशन डेवलपर्स के लिए अत्यधिक कठिनाइयाँ पैदा करती है, जिन्हें आप पसंद करते हैं या नहीं, उन्हें अपने ग्राहकों की प्राकृतिक जरूरतों को पूरा करने के लिए स्वयं कुछ ऐसा ही लागू करना होगा।
और एक बार फिर मैं ध्यान देता हूं कि एसीआईडी गुण, वास्तव में लेनदेन की अवधारणा को परिभाषित करते हैं। मेरी राय में, लेन-देन संबंधी डेटा प्रबंधन प्रणाली के बारे में बात करने की कम से कम कुछ संभावना होने के लिए जिसमें लेन-देन की स्थिरता की संपत्ति का समर्थन नहीं किया गया है, इस मामले में लेनदेन शब्द का क्या अर्थ है, इसे परिभाषित करना नितांत आवश्यक है।
दुर्भाग्य से, आज कई मामलों में (विशेष रूप से, यह NoSQL दिशा की विशेषता है), लोग OLTP अनुप्रयोगों का समर्थन करने के बारे में बात करते हैं, बिना यह निर्दिष्ट किए कि उनका किस प्रकार का लेन-देन है। इसलिए, इस लेख में, मैं वास्तविक लेनदेन को संदर्भित करने के लिए संयोजन ACID लेनदेन का उपयोग करूंगा, और अयोग्य शब्द का उपयोग अनौपचारिक अर्थों में, अलग-अलग संदर्भों में अलग-अलग किया जाएगा।
आइए अब हम कैप के "प्रमेय" से निपटते हैं और यह पता लगाने की कोशिश करते हैं कि ब्रेवर के अर्थ में निरंतरता का क्या अर्थ है।
GO TO FULL VERSION