5

क्या कोई वितरित उच्च उपलब्धता है, अंततः संगत डीबी जो स्केलर मानों पर बेवकूफ संचालन का समर्थन करता है?घटनात्मक निरंतर वितरित डेटाबेस idempotent वृद्धि ऑपरेटर के साथ?

यदि हम सामान्य अपडेट का उपयोग करते हैं तो संभावना है कि हमारे पास अलग-अलग नोड्स पर 2 अलग-अलग मान होंगे और कोई भी मूल्य सही नहीं होगा क्योंकि हमें दोनों लेनदेन मूल्यों द्वारा रकम बढ़ाने की आवश्यकता है।

क्या कोई वितरित डीबी है जहां मैं एक कमांड वृद्धि (कुंजी, विशेषता [कॉलम], diff) भेज सकता हूं ताकि जब मुझे कोई प्रतिक्रिया मिलती है तो मैं सुनिश्चित कर सकता हूं कि वर्तमान के बावजूद यह ऑपरेशन अन्य प्रतिकृतियों पर निष्पादित किया जाएगा खाते का मूल्य? इस तरह से मेरे पास ऑपरेशन बढ़ाने के लिए अंततः स्थिरता होगी, भले ही 2 अलग-अलग नोड्स एक अलग मूल्य से बढ़े, क्योंकि यह वृद्धि अन्य प्रतिकृतियों के लिए प्रचारित होगी।

मैं सशर्त अपडेट के बारे में बात नहीं कर रहा हूं क्योंकि यह उच्च उपलब्धता डीबी पर काम नहीं करेगा जैसे कि कैसंद्रा (यही कारण है कि उनके पास यह सुविधा नहीं है), मुझे परमाणु वृद्धि ऑपरेशन में रूचि है।

धन्यवाद।

पीएस idempotent वृद्धि के मामले में मैं एक कमांड वृद्धि (कुंजी, विशेषता, diff, lock_key) के लिए होता है, इसलिए यदि यह पहले से ही एक ही lock_key

tl के साथ एक ही आदेश प्राप्त है कि डाटाबेस में वृद्धि नहीं होगा, डॉ:

क्या वितरित एपी प्रकार डेटाबेस में एक सटीक काउंटर बनाने का कोई तरीका है? 2 समस्याएं: 1) यदि मैं काउंटर बढ़ाने के लिए ऑपरेशन भेजता हूं और मुझे प्रतिक्रिया नहीं मिलती है तो मैं उस अनुरोध को फिर से भेजूंगा लेकिन काउंटर को दो बार बढ़ाना नहीं चाहता हूं। 2) यदि वह काउंटर एक ही प्रतिकृति पर एक ही समय में अपडेट किया गया है, तो मैं अंततः इस वृद्धि को जोड़ना चाहता हूं, मानों को ओवरराइट नहीं करना चाहता हूं। तो क्या बढ़ने की तरह एक आदेश है ("जॉन का संतुलन", +5.67, "sdfsdfas") जहां sdfsdfas डुप्लिकेट अद्यतन को त्यागने के लिए उपयोग की जाने वाली स्ट्रिंग है। क्या कोई डीबी है जो इस तरह के आदेशों को दोहराती है?

+0

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

+0

प्रतिकृति के साथ किसी भी डीबी का उपयोग करने के बारे में क्या है, और उसके बाद समकक्ष रूप से वृद्धि_ऑपरेशंस (target_id, वृद्धि_माउंट, ऑपरेशन_आईडी) में डालें और फिर योग (जीत) जीतने के लिए अपना रास्ता? operation_id यह है कि आप डुप्लिकेट ऑपरेशंस की पहचान कैसे करते हैं। यह निश्चित रूप से अंततः संगत है। – goat

उत्तर

1

ठीक है, मुझे लगता है कि समस्या 2 कैसेंड्रा में हल किया गया है को देखने के https://issues.apache.org/jira/browse/CASSANDRA-1072 वितरित काउंटर वृद्धि संचालन जोड़ेगा तो सब कुछ अंत में संगत हो जाएगा।

समस्या 1 (idempotency) एक खुला मुद्दा है: https://issues.apache.org/jira/browse/CASSANDRA-4775

कम से कम मैं जानता हूँ कि लोगों को इस बारे में लगता है कि, यह मेरी परिदृश्य के लिए वास्तव में महत्वपूर्ण है इसलिए मैं उस समस्या को हल करने में मदद करने की कोशिश करेंगे।

मुझे आशा है कि इससे मेरे प्रश्न को स्पष्ट करने में मदद मिलेगी।

1

ऐसा लगता है कि आप दो अलग-अलग चीजों के बारे में बात कर रहे हैं। बेवकूफता का मतलब यह होगा कि आप कई बार increase निर्देश भेज सकते हैं लेकिन काउंटर केवल एक बार बढ़ेगा। परमाणुता एक ही ऑपरेशन के लिए समझ में नहीं आता है (यह एक से अधिक के लिए समझ में आता है, उदाहरण के लिए, काउंटर को बढ़ाएं और परमाणु रूप से वृद्धि की तारीख; दोनों या तो संशोधित हो जाएं, या कोई भी नहीं करता है)।

मोंगोडीबी "दस्तावेज़" स्तर पर परमाणु संचालन का समर्थन करता है (जो मुझे यकीन नहीं है), लेकिन स्पष्ट रूप से एक वृद्धि ऑपरेटर बेवकूफ नहीं है (परिभाषा के अनुसार! आप अपना काउंटर अन्यथा कैसे बढ़ाएंगे?)।

क्या आप अपना प्रश्न स्पष्ट कर सकते हैं?

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

एक जवाब के रूप में, आप एक वेतन वृद्धि ऑपरेटर बनाए रखने के लिए MongoDB उपयोग करना चाहते हैं, तो निम्न पैटर्न (अपनी वेबसाइट, [$inc operator][1] के उदाहरण से) का उपयोग करें:

db.collection.update({ age: 20 }, { $inc: { age: 1 } }); 
db.collection.update({ name: "John" }, { $inc: { age: 1 } }); 

आपके मामले में, यह होगा db.collection.update({$inc:{mycounter:1}});

+0

हाँ, मुझे कुछ अपडेट (जैसे नाम: "जॉन"}, {$ inc: {balance: 58.4}} होना चाहिए); क्या मुझे मोंगोडीबी में एक पुष्टिकरण मिलता है ताकि मैं दो बार एक ही प्रश्न नहीं चलाऊं? यह एक तरीका है। एक ही चीज़ को पूरा करने का एक और तरीका एक प्रकार की बेवकूफ वृद्धि के साथ है ताकि एक ही ऑपरेशन दो बार नहीं चलाया जा सके। उदाहरण के लिए यदि कमांड को किसी प्रकार की लॉकिंग_की प्रदान करने की आवश्यकता है ताकि यह जान सके कि क्या मैंने पहले ही अपडेट करने का प्रयास किया है। मैं एपी डेटाबेस में इस तरह की एक सुविधा देखना चाहता हूं (मोंगोडीबी सीपी है, है ना?) – user1944408

+0

मेरे प्रश्न में डॉ। – user1944408