2012-09-08 12 views
5

ऐसा प्रतीत होता है कि आप दंगा में लेनदेन नहीं कर सकते हैं। कोई कैसे सुनिश्चित करता है कि डेटा सही है?दंगा में शुद्धता सुनिश्चित करें?

आइए हम कहते हैं कि हम एक टिप्पणी डालना चाहते हैं। रेडिस में मैं

commentId=incr commentCount 
multi 
SET comment_post:commentId postId //for later use when we flag comments. We'll need to know where in the db it is 
RPUSH post_comment:postId binaryValue //contains commentId in it + comment body 
exec 

एसक्यूएल में मैं टेक्स्ट और पोस्ट आईडी के साथ एक टिप्पणी तालिका में एक नई पंक्ति डालूंगा। दोनों एक और कथन का उपयोग करते हैं। मैं दोनों टिप्पणी बॉडी कैसे डालूं और पोस्ट को दंगा में टिप्पणी में जोड़ूं क्योंकि इसमें कोई लेनदेन नहीं है?

एक और समस्या यह है कि अगर मैं एक पोस्ट संशोधित करता हूं। मैं उस टैग का उपयोग करके पोस्ट की टैग सूची को अपडेट और अपडेट कर सकता हूं

उत्तर

6

रीक एक अंततः संगत प्रणाली है जो लिखने के लिए डिज़ाइन की गई है और इसमें परमाणुता की कोई अवधारणा नहीं है; परमाणु काउंटर या लेनदेन नहीं हैं।

संपादित करें: हमने Riak 1.4 में सीआरडीटी का उपयोग कर काउंटर जारी किए। विवरण के लिए Counters in Riak 1.4

रीक द्वारा उपयोग किया जाने वाला दृष्टिकोण अमेज़ॅन डायनेमो पेपर पर आधारित है और विवाद समाधान के लिए वेक्टर घड़ियों का उपयोग करता है; यह बाद में पढ़ने के दौरान किए गए किसी भी संघर्ष समाधान के साथ एक पढ़ा/संशोधित/लिखना चक्र है। किसी भी समय आपके पास किसी दिए गए कुंजी के लिए कई मान हो सकते हैं जो सभी को लौटने पर वापस किया जाएगा।

यह लगता है कि आप हमारे secondary indexes को देखने के लिए चाहते हैं (अगर मैं अपने परिदृश्य को समझने कर रहा हूँ; तथ्य यह है कि आप के लिए एक नया commentId जरूरत है एक 'पसंद' अधिक जानने के बिना कुछ भ्रामक है)। आप एक माध्यमिक इंडेक्स तैयार करेंगे जो आपके टिप्पणी निकाय पर इंगित करता है जो स्टोर करते समय शरीर के साथ ही भेजता है। इससे समस्या का कम से कम एक आधा हल हो जाता है।

आप अपने commentId को कैसे प्राप्त करते हैं, यह थोड़ा सा ट्रिकियर है। आप वैश्विक परमाणु काउंटर का उपयोग नहीं कर सकते क्योंकि हमारे पास नहीं है। आपके डिज़ाइन को या तो अनुक्रमिक आईडी (शायद यूयूआईडी उत्पन्न कर सकते हैं) पर भरोसा करने की आवश्यकता होगी और शायद हमारे links का उपयोग करें?

यदि आप रुचि रखते हैं और संभावित डिजाइन दृष्टिकोण पर चर्चा करना चाहते हैं, तो कृपया हमें riak-users mailing list पर पिंग करें - हमारे सभी इंजीनियर इसे पढ़ते हैं और प्रश्नों का उत्तर देने में हमेशा खुश रहते हैं।

+0

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

+0

मैंने कुछ पढ़ा। मैं थोड़ी उलझन में हूं बीसी उदाहरण दिखाता है कि allow_mult को सही पर सेट किया जा रहा है। तो क्या होता है यदि मेरे पास कुछ ऐसा है जो लिखने का संघर्ष करता है और झूठा है ... तो ऐसा लगता है जैसे सब कुछ में एक vclock है? ऐसा लगता है कि आप लेखन को उच्च उपलब्ध करा रहे हैं। मैं वहां उपयोग और व्यापार देख सकता हूं। मैं कल्पना कर सकता हूं कि मेरी ज़रूरतों के लिए चीजों को कैसे हल और सही किया जाए, लेकिन मैं कल्पना नहीं कर सकता/सोचता हूं कि क्या होता है यदि मैंने मल्टी सेट नहीं किया है और यह गलत है? क्या कोई दूसरे को ओवरराइट करेगा? क्या यह असफल हो जाएगा? मैं देख सकता हूं कि अगर यह विफल हो जाता है तो चीजों को कैसे संभालना है (लेकिन मुझे अन्य लिखना पूर्ववत करना होगा) –

+0

लेकिन मैं नहीं देख सकता कि क्या होता है अगर यह असफल नहीं होता है और एक नौकरी समाप्त हो जाती है जबकि दूसरी नौकरी शुरू होती है और इसके बाद थोड़ा सा समाप्त होता है और डेटा ओवरराइट करता है । –

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