ठीक है, आइए कल्पना करें कि आपके पास एक वितरित डेटाबेस है। मान लीजिए कि आपके पास ओरेगन में एक नोड है और एक कैलिफोर्निया में है। CAP सिद्धांत कहता है कि आप इस प्रकार के डेटाबेस को स्थापित करते समय समस्याओं में चलेंगे।
उदाहरण के लिए, यदि आप एक डेटाबेस से डेटा क्वेरी करते हैं, तो उसे दूसरे डेटाबेस के डेटा के समान होना चाहिए। यह सुनिश्चित करता है कि आपके पास एक डेटाबेस में जो भी मूल्य है वह अन्य में होने की गारंटी है ( सीएपी सिद्धांत की संगति )। ऐसा करने से आप डेटा को एक डेटाबेस में अपडेट कर सकते हैं और दूसरे से क्वेरी कर सकते हैं, वही परिणाम प्राप्त कर सकते हैं।
जब हम ओरेगन नोड में डेटा को अपडेट करते हैं, तो डेटा कैलिफोर्निया नोड को भेजा जाता है ताकि डेटाबेस सुसंगत हो। वास्तव में स्थिरता बनाए रखने के लिए, हमें यह सुनिश्चित करना होगा कि दोनों डेटाबेस को अपडेट प्राप्त करने से पहले डेटा को सही मायने में सहेजने की अनुमति दी जाए (वितरित लेनदेन का उपयोग करके दो-चरण की प्रतिबद्धता)। दूसरे शब्दों में, यदि कैलिफ़ोर्निया डेटाबेस किसी कारण से डेटा को सहेज नहीं सकता है (जैसे हार्ड ड्राइव विफलता), तो ओरेगन में डेटाबेस डेटा को नहीं बचाएगा और लेनदेन को विफल कर देगा।
ऊपर की तरह वितरित लेनदेन के साथ समस्या तब आती है जब हम उच्च उपलब्धता चाहते हैं। ऊपर इस परिदृश्य में, दोनों डेटाबेस को सिंक में प्राप्त करने की कोशिश की प्रक्रिया बहुत ही धीमी प्रक्रिया है। (कल्पना करें, हमें ओरेगन से कैलिफोर्निया में डेटा भेजना होगा, सुनिश्चित करें कि यह वहां हो जाता है, सुनिश्चित करें कि दोनों डेटाबेस में डेटा पर ताले हैं, आदि) यह बड़ी समस्याओं का कारण बनता है जब हम एक ऐसी प्रणाली चाहते हैं जो तेज और उत्तरदायी भी हो उच्च मांग का समय। (यह कैप प्रमेय की उपलब्धता है।)
आमतौर पर हम उच्च उपलब्धता का बीमा करने के लिए क्या करते हैं, क्या हम वितरित लेनदेन के बजाय प्रतिकृति का उपयोग करते हैं। इसलिए यह गारंटी देने के बजाय कि कैलिफोर्निया डेटा को स्वीकार कर सकता है, हम अभी आगे बढ़ते हैं और इसे ओरेगन नोड में संग्रहीत करते हैं और फिर जब हम इसे प्राप्त करते हैं तो डेटा को कैलिफोर्निया भेज देते हैं। यह गारंटी देता है कि हम हमेशा डेटा संग्रहीत कर सकते हैं, भले ही कैलिफोर्निया डेटा संग्रहीत करने के लिए तैयार है या नहीं।
यह उपलब्धता में सुधार करता है, लेकिन संगति की कीमत पर। देखें, यदि कोई ओरेगन में डेटा अपडेट करता है और फिर कोई (उसी समय) कैलिफोर्निया में डेटा पढ़ता है, तो उन्हें नया डेटा नहीं मिल रहा है - डेटाबेस अब सुसंगत नहीं हैं। वास्तव में, वे तब तक संगत नहीं होंगे जब तक कि ओरेगन कैलिफोर्निया को डेटा नहीं भेजते!
इसलिए, यह उपलब्धता -v- संगति व्यापार-बंद है।
विभाजन सिद्धांत सीएपी सिद्धांत का तीसरा पहलू है। विभाजन, इस संदर्भ में, यह विचार है कि एक डेटाबेस (या अन्य वितरित प्रणाली) अलग-अलग वर्गों में टूट सकता है और अभी भी सही ढंग से कार्य कर सकता है।
सवाल यह है कि तब क्या होता है जब दोनों डेटाबेस सही तरीके से चल रहे होते हैं, लेकिन ओरेगन से कैलिफोर्निया के लिंक को अलग कर दिया जाता है?
यदि हम ओरेगन में डेटाबेस को अपडेट करते हैं, तो हमें डेटा को एक या दूसरे तरीके से वितरित करने की आवश्यकता है (वितरित लेनदेन या प्रतिकृति)। हालाँकि, यदि दोनों के बीच की कड़ी को अलग कर दिया जाता है, तो सिस्टम विभाजन हो गया है और डेटाबेस अब एक साथ लिंक नहीं हुए हैं।
जब ऐसा होता है, तो आपकी पसंद उपलब्धता की कीमत पर अपडेट (निरंतरता बनाए रखने) की अनुमति देना बंद कर देती है या स्थिरता की कीमत पर अपडेट (उपलब्धता बनाए रखने के लिए) की अनुमति देती है।
जैसा कि आप देख सकते हैं, विभाजन सहिष्णुता संगति और उपलब्धता के बीच प्रत्यक्ष व्यापार-बंद बनाता है।
स्पष्ट रूप से इससे अधिक है, लेकिन उन उदाहरणों के एक जोड़े हैं कि कैसे वितरित सिस्टम के ये तीन प्रमुख पहलू एक-दूसरे के खिलाफ काम करते हैं। जूलियन ब्राउन के सीएपी सिद्धांत की व्याख्या अधिक जानने के लिए एक उत्कृष्ट स्थान है।