ACID और डेटाबेस लेनदेन कैसे काम करते हैं?


161

ACID और डेटाबेस लेनदेन के बीच क्या संबंध है?

क्या ACID डेटाबेस लेन-देन देता है या यह एक ही बात है?

क्या कोई इस विषय पर प्रकाश डाल सकता है।

जवाबों:


320

ACID उन संपत्तियों का एक समूह है, जिन्हें आप किसी डेटाबेस को संशोधित करते समय लागू करना चाहते हैं।

  • atomicity
  • संगति
  • एकांत
  • सहनशीलता

लेन-देन संबंधित परिवर्तनों का एक समूह है जिसका उपयोग ACID के कुछ गुणों को प्राप्त करने के लिए किया जाता है। लेनदेन ACID गुण प्राप्त करने के लिए उपकरण हैं।

एटमॉसिटी का अर्थ है कि आप गारंटी दे सकते हैं कि सभी लेन-देन होता है, या इसमें से कोई भी नहीं करता है; आप एक ही इकाई, सभी या कुछ भी नहीं के रूप में जटिल संचालन कर सकते हैं, और एक दुर्घटना, बिजली की विफलता, त्रुटि, या कुछ और आपको ऐसी स्थिति में नहीं रहने देगा जिसमें केवल संबंधित परिवर्तन हुए हैं।

संगति का अर्थ है कि आप गारंटी देते हैं कि आपका डेटा सुसंगत होगा; संबंधित डेटा पर आपके पास कोई भी बाधा कभी भी उल्लंघन नहीं होगी।

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

स्थायित्व का अर्थ है कि एक बार लेन-देन पूरा हो जाने के बाद, यह गारंटी दी जाती है कि सभी परिवर्तन एक टिकाऊ माध्यम (जैसे हार्ड डिस्क) में दर्ज किए गए हैं, और यह तथ्य कि लेन-देन पूरा हो चुका है, उसी तरह रिकॉर्ड किया गया है।

इसलिए, इन संपत्तियों की गारंटी के लिए लेनदेन एक तंत्र है; वे संबंधित क्रियाओं को एक साथ समूहित करने का एक तरीका है जैसे कि एक पूरे के रूप में, संचालन का एक समूह परमाणु हो सकता है, लगातार परिणाम उत्पन्न कर सकता है, अन्य कार्यों से पृथक हो सकता है, और टिकाऊ रूप से रिकॉर्ड किया जा सकता है।


6
आप कहते हैं "संगति का अर्थ है कि आप गारंटी देते हैं कि आपका डेटा सुसंगत होगा। संबंधित डेटा पर आपके पास कोई भी बाधा कभी भी उल्लंघन नहीं होगी।" यदि बाधाओं से, आपका मतलब है कि डेटाबेस में परिभाषित (उदाहरण के लिए, बाधाओं की जांच), तो लेनदेन प्रबंधन को उन्हें उल्लंघन करने से रोकने के साथ क्या करना है? क्या वे हमेशा लागू नहीं होते? यह मुझे लगता है कि ACID में C का एक और अर्थ होना चाहिए।
मार्क रोचकांड

20
@MarcRochkind एक लेन-देन आपको संगतता चेक लागू करने की अनुमति देता है, भले ही लेन-देन के भीतर व्यक्तिगत संचालन स्थिरता की बाधाओं का उल्लंघन करता हो। उदाहरण के लिए, यदि आप डबल-एंट्री बहीखाता पद्धति को अपडेट कर रहे हैं, तो आपको एक ही समय में कई खातों और क्रेडिट से कई खातों में डेबिट करने की आवश्यकता हो सकती है। लेन-देन के बिना, आप हर बयान के बाद बाधाओं की जांच करेंगे, और असफल होंगे क्योंकि व्यक्तिगत बयान स्थिरता को संरक्षित नहीं करते हैं। लेन-देन के साथ, हालांकि व्यक्तिगत बयान एकरूपता को संरक्षित नहीं करते हैं, लेकिन लेन-देन पूरी तरह से करता है।
ब्रायन कैंपबेल

1
" और अगर किसी को दूसरे द्वारा लिखे गए डेटा को पढ़ने की आवश्यकता है, तो उसे तब तक इंतजार करना होगा जब तक कि दूसरा समाप्तहो जाए " - पूरी तरह से सच नहीं है। पहला लेन-देन उस डेटा को पढ़ सकता है (और करेगा) और दूसरा लेन-देन शुरू होने से पहले की स्थिति को देखेगा।
a_horse_with_no_name

1
@BrianCampbell 1) लेन-देन के अंत में UNIQUE, FOREIGN KEY के साथ-साथ वैध स्थिति (व्यावसायिक तर्क / आवेदन की आवश्यकता के अनुसार) की तरह संगति दोनों "चेक की कमी" है? 2) क्या अकेलेपन और या अलगाव अलगाव को सुनिश्चित नहीं करता है? क्या हमें एक आवश्यक संपत्ति के रूप में स्पष्टता का उल्लेख करना चाहिए?
user104309

1
@a_horse_with_no_name आप OCC (आशावादी संगोष्ठी नियंत्रण) v / s PCC (निराशावादी) के बारे में बात कर रहे हैं। दोनों को ACID- कंप्लायंट डेटाबेस सिस्टम में लागू किया जा सकता है, यह इस बात पर निर्भर करता है कि आप निरंतरता या उच्च उपलब्धता के लिए जा रहे हैं।
सिद्धार्थ

37

एसीआईडी ​​किसी भी लेनदेन प्रसंस्करण इंजन के वांछनीय गुण हैं।

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

लेकिन अन्य इंजन मौजूद हैं जो उन गुणों को भी उजागर कर सकते हैं। जिस तरह के सॉफ्टवेयर को "टीपी मॉनिटर" कहा जाता था, वह वर्तमान में (आजकल ज्यादातर वेब सर्वर के बराबर है) एक मामला है।

ऐसे टीपी मॉनिटर डीबीएमएस (जैसे एक प्रिंटर) के अलावा अन्य संसाधनों तक पहुंच सकते हैं, और फिर भी अपने उपयोगकर्ताओं के लिए एसीआईडी ​​की गारंटी देते हैं। जब एक प्रिंटर लेनदेन में शामिल होता है तो ACID का क्या अर्थ हो सकता है:

  • एटमॉसिटी: एक संपूर्ण दस्तावेज़ मुद्रित हो जाता है या कुछ भी नहीं होता है
  • संगति: अंत-लेन-देन में, पेपर फीड टॉप-ऑफ़-पेज पर स्थित है
  • अलगाव: कोई भी दो दस्तावेज छपाई करते समय नहीं मिलते हैं
  • स्थायित्व: प्रिंटर यह गारंटी दे सकता है कि यह खाली कारतूस के साथ "मुद्रण" नहीं था।

3
महान संक्षिप्त प्रिंटर उदाहरण।
लेकसियर

2
अच्छा उदाहरण। मैं हालांकि "संगति" भाग को नहीं समझता। मेरे दिमाग में, एक बेहतर उदाहरण है "प्रिंटर 10 इंच से बड़े कागज को स्वीकार नहीं करता है।"
skeller88

EDIT - "पेपर 10 इंच से अधिक चौड़ा।"
skeller88

1
मैं मानता हूं कि एक सा खिंचाव है। लेकिन बेहतर उदाहरण खोजना मुश्किल है क्योंकि "स्थिरता" डेटा के बारे में है, और एक प्रिंटर बिल्कुल डेटा डिवाइस नहीं है।
Erwin Smout

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

21

मैंने इसे और अधिक समझाने के लिए प्रिंटर उदाहरण को थोड़ा संशोधित किया

1 दस्तावेज़ जिसमें 2 पेज की सामग्री थी, उसे प्रिंटर पर भेजा गया था

लेनदेन - दस्तावेज़ को प्रिंटर पर भेजा गया

  • परमाणु - प्रिंटर किसी दस्तावेज़ के 2 पृष्ठ प्रिंट करता है या कोई नहीं
  • संगति - प्रिंटर आधा पृष्ठ प्रिंट करता है और पेज अटक जाता है। प्रिंटर खुद को पुनरारंभ करता है और सभी सामग्री के साथ 2 पेज प्रिंट करता है
  • अलगाव - जबकि प्रगति में बहुत सारे प्रिंट आउट थे - प्रिंटर दस्तावेज़ की सही सामग्री को प्रिंट करता है
  • स्थायित्व - छपाई करते समय, एक बिजली कटौती हुई थी - प्रिंटर फिर से बिना किसी त्रुटि के दस्तावेजों को प्रिंट करता है

आशा है कि यह किसी को ACID की अवधारणा को लटकाने में मदद करेगा


मुझे यकीन नहीं है कि क्या "जबकि प्रगति में बहुत सारे प्रिंट आउट थे " का अर्थ है - यह "बहुत सारे" के बजाय सिर्फ "एकाधिक" है?
icc97

17

ACID और डेटाबेस लेनदेन के बीच क्या संबंध है?

एक रिलेशनल डेटाबेस में, प्रत्येक SQL स्टेटमेंट को लेनदेन के दायरे में निष्पादित करना होगा।

लेन-देन की सीमाओं को स्पष्ट रूप से परिभाषित किए बिना, डेटाबेस एक अंतर्निहित लेनदेन का उपयोग करने जा रहा है जो कि प्रत्येक व्यक्तिगत विवरण के आसपास लपेटता है।

निहित लेनदेन बयान के निष्पादित होने से पहले शुरू होता है और कथन निष्पादित होने के बाद समाप्त होता है (कमिट या रोलबैक)। निहित लेन-देन मोड को आमतौर पर ऑटोकॉमिट के रूप में जाना जाता है।

जैसा कि इस लेख में बताया गया है , लेन-देन पढ़ने / लिखने के संचालन का एक संग्रह है जो केवल तभी सफल होता है जब सभी निहित कार्य सफल होते हैं।

atomicity

आंतरिक रूप से एक लेन-देन चार गुणों (आमतौर पर ACID के रूप में संदर्भित) द्वारा विशेषता है:

  • atomicity
  • संगति
  • एकांत
  • सहनशीलता

क्या ACID डेटाबेस लेन-देन देता है या यह एक ही बात है?

एक रिलेशनल डेटाबेस सिस्टम के लिए, यह सत्य है क्योंकि SQL मानक निर्दिष्ट करता है कि लेनदेन को ACID गारंटी प्रदान करनी चाहिए:

atomicity

एटोमिसिटी व्यक्तिगत संचालन को लेती है और उन्हें काम की एक ऑल-ऑर-नथिंग यूनिट में बदल देती है, अगर सभी निहित ऑपरेशन सफल होते हैं और केवल तभी।

लेन-देन एक राज्य परिवर्तन को रोक सकता है (जब तक कि यह केवल-पढ़ने के लिए नहीं है)। एक लेन-देन को हमेशा एक सुसंगत स्थिति में सिस्टम को छोड़ना चाहिए, चाहे किसी भी समय कितने समवर्ती लेनदेन को इंटरलेय किया गया हो।

संगति

संगति का मतलब है कि हर प्रतिबद्ध लेनदेन के लिए बाधाओं को लागू किया जाता है। तात्पर्य यह है कि सभी कीज़, डेटा प्रकार, चेक और ट्रिगर सफल हैं और कोई बाधा उल्लंघन ट्रिगर नहीं है।

एकांत

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

सहनशीलता

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

यहां छवि विवरण दर्ज करें

स्थायित्व और रीडो लॉग के बारे में अधिक जानकारी के लिए, इस लेख को देखें


"स्थिरता" के लिए - मैं कई स्थानों में स्पष्टीकरण के रूप में "एप्लिकेशन विशिष्ट तार्किक शुद्धता" देखता हूं। यदि ऐसा है तो मान लें, DB एप्लिकेशन लॉजिक को नहीं जान सकता है। तो "स्थिरता" एक DB की एक अंतर्निहित संपत्ति नहीं हो सकती। तो एप्लिकेशन को इसकी शुद्धता (या "स्थिरता") को लागू करने के लिए एटमॉसिटी और अलगाव पर्याप्त नहीं है?
user104309

1
ACID में संगति का अर्थ है डेटाबेस अखंडता की कमी: PK, FK, UNIQUE की कमी। ACID महत्वपूर्ण है, लेकिन आपके एप्लिकेशन को इससे अधिक की आवश्यकता हो सकती है, जैसे लंबी बातचीत में खोए हुए अपडेट को रोकने के लिए जिसे एप्लिकेशन-स्तरीय आशावादी लॉकिंग की आवश्यकता होती है।
व्लाद मिहालसी

मुझे देखने दो। लेकिन इससे पहले मुझे एक बुनियादी स्पष्टीकरण की आवश्यकता है। स्वीकार किए गए उत्तर में ब्रेन कैंपबेल की टिप्पणी "लेनदेन के साथ, हालांकि व्यक्तिगत बयान एकरूपता को संरक्षित नहीं करते हैं, एक पूरे के रूप में लेनदेन"। यह कैसे संभव है ? और संगति से संबंधित कई डेबिट और क्रेडिट कैसे करता है?
user104309

उन सभी सवालों के विस्तृत जवाब के लिए मेरे हाई-परफॉर्मेंस जावा पर्सिस्टेंस बुक में लेनदेन अध्याय देखें ।
व्लाद मिहालसी 21

12

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

डेटाबेस सिस्टम बहुत सारे विभिन्न प्रकार के लेन-देन के साथ खेलता है जहां सभी लेनदेन की कुछ विशेषता होती है। इस विशेषता को ACID गुण कहा जाता है। एसीआईडी ​​गुण सभी कार्यों को पूरा करने के लिए सभी डेटाबेस लेनदेन के लिए अनुदान लेते हैं।

परमाणु: या तो सभी या कुछ भी नहीं।

संगति: सभी नियम और लेन-देन में बाधा के संदर्भ में लगातार रिकॉर्ड बनाएं।

अलगाव: सुनिश्चित करें कि दो लेनदेन एक-दूसरे से अनजान हैं।

स्थायित्व: प्रतिबद्ध डेटा हमेशा के लिए संग्रहीत। इस लेख से लिया गया संदर्भ:


5

विकिपीडिया को उद्धृत करने के लिए :

ACID (परमाणुता, संगति, अलगाव, स्थायित्व) गुणों का एक समूह है जो डेटाबेस लेनदेन की गारंटी देता है मज़बूती से संसाधित होता है।

एक DBMS जो लेनदेन का समर्थन करता है, इन सभी गुणों का समर्थन करने का प्रयास करेगा - कोई भी व्यावसायिक DBMS (साथ ही कई खुले स्रोत DBMS) पूर्ण ACID 'सहायता' प्रदान करते हैं - हालाँकि यह अक्सर संभव है (उदाहरण के लिए, MSSQL में अलग-थलग स्तरों के साथ) ACIDness को कम करें - इस प्रकार पूरी तरह से व्यवहार संबंधी व्यवहार की गारंटी खो देता है।


3

[ग्रे] ने 1981 में लेनदेन के लिए एसीडी संपत्तियों की शुरुआत की। 1983 में [हैदर] ने अलगाव की संपत्ति को जोड़ा। मेरी राय में, एसीडी संपत्तियों पर चर्चा करने के लिए गुणों का अधिक उपयोगी सेट होगा। परमाणु की एक व्याख्या (कि लेन-देन किसी भी समय किसी भी ग्राहक से देखा जाने वाला परमाणु होना चाहिए) वास्तव में अलगाव संपत्ति का अर्थ होगा। लेनदेन अलग नहीं होने पर "अलगाव" संपत्ति उपयोगी है ; जब अलगाव की संपत्ति को आराम दिया जाता है। एएनएसआई एसक्यूएल में बोलते हैं: यदि अलगाव का स्तर कमजोर है, तो गंभीर है। लेकिन जब अलगाव का स्तर गंभीर होता है, तो अलगाव की संपत्ति वास्तव में ब्याज की नहीं होती है।

मैंने इस बारे में एक ब्लॉग पोस्ट में अधिक लिखा है: "एसीआईडी ​​डोंट मेक सेंस"।

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[ग्रे] लेन-देन की अवधारणा, जिम ग्रे, 1981। http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[हैडर] लेन-देन के सिद्धांतों-उन्मुख डेटाबेस रिकवरी, हैडर और रीटर, 1983। http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

लेनदेन को कार्य के संग्रह के रूप में परिभाषित किया जा सकता है जिसे न्यूनतम प्रसंस्करण इकाई माना जाता है। प्रत्येक न्यूनतम प्रसंस्करण इकाई को आगे विभाजित नहीं किया जा सकता है।

सभी लेनदेन में चार गुण होने चाहिए जिन्हें आमतौर पर ACID गुण के रूप में जाना जाता है। यानी ACID किसी भी लेनदेन की संपत्तियों का समूह है।

  • परमाणु:
  • संगति
  • एकांत
  • सहनशीलता
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.