2012-04-09 14 views
65

मैं अक्सर नोएसक्यूएल, डेटा ग्रिड इत्यादि के बारे में विभिन्न भाषणों में अंतिम स्थिरता के बारे में सुनता हूं ऐसा लगता है कि अंतिम स्थिरता की परिभाषा कई स्रोतों में भिन्न होती है (और यहां तक ​​कि एक ठोस डेटा भंडारण पर भी निर्भर करता है)।सादे अंग्रेजी में वर्तमान स्थिरता

क्या कोई भी सामान्य स्पष्टीकरण दे सकता है कि अंतिम संगतता सामान्य शर्तों में क्या है, किसी भी ठोस डेटा संग्रहण से संबंधित नहीं है?

+0

उदा किया विकिपीडिया मदद नहीं करता है? http://en.wikipedia.org/wiki/Eventual_consistency –

+7

@ ओली चार्ल्सवर्थ: नहीं। शायद यह सिर्फ मुझे है लेकिन दो बार पढ़ने के बाद भी यह बिल्कुल अस्पष्ट है। – Roman

उत्तर

102

अंततः स्थिरता:

  1. मैं मौसम की रिपोर्ट देख कर सीख रहे हैं कि यह कल बारिश होने वाली है।
  2. मैं आपको बताता हूं कि कल बारिश होगी।
  3. आपका पड़ोसी अपनी पत्नी से कहता है कि यह कल धूप में जा रहा है।
  4. आप अपने पड़ोसी से कहें कि कल बारिश होगी।

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

के रूप में सख्त संगति/एसिड अनुपालन करने का विरोध किया:

  1. आपका बैंक बैलेंस $ 50 है।
  2. आप $ 100 जमा करते हैं।
  3. कहीं भी किसी भी एटीएम से पूछे गए आपके बैंक की शेष राशि $ 150 है।
  4. आपकी बेटी आपके एटीएम कार्ड के साथ $ 40 वापस लेती है।
  5. कहीं भी किसी भी एटीएम से पूछे गए आपके बैंक की शेष राशि $ 110 है।

किसी भी समय आपकी शेष राशि आपके खाते में किए गए सभी लेनदेन की वास्तविक राशि के अलावा किसी अन्य समय को प्रतिबिंबित नहीं कर सकती है।

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

+0

मुझे समझ में नहीं आता है। क्या विकास रैखिक या घातीय है? –

+2

एन की एक प्रणाली के संचार ओवरहेड में वृद्धि सख्ती से लगातार नोड्स को आम तौर पर सुपर-रैखिक (यानी, रैखिक से अधिक) समझा जाता है। घातीय हो सकता है, घन हो सकता है ... संचार प्रोटोकॉल, आदि पर निर्भर करता है –

58

अंततः स्थिरता:

  1. आपका डाटा कई सर्वरों पर दोहराया जाता है
  2. आपके ग्राहकों सर्वर के किसी भी डेटा
  3. किसी को पुनः प्राप्त करने का उपयोग कर सकते सर्वरों में से एक के लिए डेटा का एक टुकड़ा लिखते हैं, लेकिन यह अभी तक बाकी की प्रतिलिपि नहीं बनाई गई थी
  4. एक क्लाइंट डेटा के साथ सर्वर का उपयोग करता है, और सबसे अद्यतित प्रति
  5. एक अलग क्लाइंट (या यहां तक ​​कि एक ही क्लाइंट) एक diff तक पहुंचता है ईरेंट सर्वर (जिसे अभी तक नई प्रति प्राप्त नहीं हुई है), और पुरानी प्रति

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

यदि आप कम विलंबता पढ़ना चाहते हैं तो अंतिम स्थिरता जरूरी है, क्योंकि प्रतिक्रिया सर्वर को डेटा की अपनी प्रतिलिपि वापस करनी होगी, और अन्य सर्वर से परामर्श करने और डेटा की सामग्री पर पारस्परिक समझौते तक पहुंचने का समय नहीं है । मैंने blog post लिखा है और इसे विस्तार से समझाया है।

+1

अच्छा ब्लॉग पोस्ट। अंतिम स्थिरता के विचार के लिए नए व्यक्ति के लिए पढ़ने के लायक है। यह उत्तर बेहतर होगा अगर ब्लॉग पोस्ट में जो कुछ भी है, उसे समझाने के लिए इसे फिर से लिखा गया हो। – axiopisty

0

अंतिम स्थिरता स्पेक्ट्रम की तरह अधिक है। एक तरफ आपके पास मजबूत स्थिरता है और दूसरी तरफ आपके पास स्थिरता है। बीच में स्नैपशॉट जैसे स्तर हैं, मेरे लिखते हैं, बाध्यता को बाध्य करते हैं। डौग टेरी के पास his paper on eventual consistency thru baseball में एक सुंदर स्पष्टीकरण है।

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

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

1

जब कोई एप्लिकेशन किसी मशीन पर डेटा आइटम में परिवर्तन करता है, तो उस परिवर्तन को अन्य प्रतिकृतियों के लिए प्रचारित किया जाना चाहिए। चूंकि परिवर्तन प्रसार तत्काल नहीं है, इसलिए समय की एक अंतराल है जिसके दौरान कुछ प्रतियों में सबसे हालिया परिवर्तन होगा, लेकिन अन्य नहीं होंगे। दूसरे शब्दों में, प्रतियां पारस्परिक रूप से असंगत होंगी। हालांकि, परिवर्तन अंततः सभी प्रतियों के लिए प्रचारित किया जाएगा, और इसलिए शब्द "अंतिम स्थिरता"। अंतिम स्थिरता शब्द केवल एक स्वीकृति है कि एक मशीन पर अन्य सभी प्रतियों में किए गए परिवर्तन को प्रसारित करने में एक असीमित देरी है। अंतिम स्थिरता केंद्रीकृत (एकल प्रति) सिस्टम में सार्थक या प्रासंगिक नहीं है क्योंकि प्रचार की कोई आवश्यकता नहीं है।

स्रोत: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf

0

बहुत सरल अंग्रेजी वाक्य में हम कह सकते हैं: आपके सिस्टम असंगत राज्यों में हो सकता है, उद्देश्य डेटा के प्रत्येक टुकड़े के लिए कुछ बिंदु पर स्थिरता तक पहुँचने के लिए हमेशा होता है।

1

सोचें कि आपके पास एक एप्लिकेशन और इसकी प्रतिकृति है। फिर आपको एप्लिकेशन में नया डेटा आइटम जोड़ना होगा।

enter image description here

फिर आवेदन नीचे

enter image description here

इस बीच नए ग्राहक एक प्रतिकृति है कि अभी तक अद्यतन नहीं से डेटा प्राप्त करने के लिए जा रहा में अन्य प्रतिकृति दिखाने के लिए डेटा सिंक्रनाइज़ करता है। उस स्थिति में वह सही तारीख डेटा प्राप्त नहीं कर सकता है। क्योंकि सिंक्रनाइज़ेशन कुछ समय मिलता है। उस मामले में यह नहीं अंत में स्थिरता

समस्या है कि हम कैसे अंत में स्थिरता कर सकते है?

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

enter image description here enter image description here

संबंधित मुद्दे