2013-09-07 8 views
8

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

सोफेबेस में समाधान का उल्लेख अक्सर वृद्धि कार्य है, जहां आप संख्यात्मक कुंजी पर वृद्धि को कॉल कर सकते हैं और यह अनुक्रम में एक नया अद्वितीय संख्या उत्पन्न करेगा।

इस पर मेरा सवाल यह है कि जब मैं प्रतिकृति की बात करता हूं तो मुझे बड़ी समस्या के आसपास अपना सिर नहीं मिल सकता है।

मान लें कि आपके पास तीन कोचबेस नोड्स का समूह है और आप एक अनुरोध लॉग संग्रहीत कर रहे हैं। आप इस लॉग को कुंजी करना चाहते हैं ताकि आप "requestlog_counter" नामक एक प्रविष्टि बना सकें।

अब कहें कि हमारे पास 4 वेब नोड्स प्रत्येक को 20 अनुरोध प्राप्त करते हैं और उनमें से प्रत्येक को "अनुरोध :: {आईडी}) के रूप में रिकॉर्ड करने की आवश्यकता होती है"। यह 80 सेकंड एक अनुरोध है।

कहें कि नोड्स 1 और 3 में नेटवर्क विलंबता का एक छोटा सा हिस्सा है लेकिन दोनों एक ही समय में इन 40 अनुरोधों में से एक प्राप्त करते हैं। आपकी स्क्रिप्ट अनुरोध काउंटर को बढ़ाती है (इस उदाहरण के लिए कहें कि यह वर्तमान में 1500 पर है) और एक आईडी प्राप्त होती है। निश्चित रूप से अब यह संभव है कि दोनों कोचबेस उदाहरण 1501 को वेब नोड्स 1 और 3 पर वापस कर सकें और दोनों सर्वर अब "अनुरोध: 1501" के रूप में अनुरोध कर रहे अनुरोध को संग्रहीत करने का प्रयास करेंगे।

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

तो क्या इसका मतलब यह है कि वास्तव में आपको महत्वपूर्ण डेटा की कुंजी बनाने का एक बेहतर तरीका चाहिए और पूर्ण मूल्यों के लिए ऑटो वृद्धि का उपयोग करना और अद्वितीय कुंजी पीढ़ी ऐसा कुछ है जिसे नोएसक्यूएल क्लस्टर पर्यावरण से बचा जाना चाहिए?

या - क्या ऐसा कुछ है जो आप अपनी कुंजी उत्पन्न करने वाली प्रक्रिया के हिस्से के रूप में कर सकते हैं जो इस 100% विश्वसनीय बनाता है।

क्रॉस डेटा सेंटर प्रतिकृति का उपयोग करके भी एकाधिक क्लस्टर पर्यावरण पर विचार करें।

धन्यवाद।

माइक

उत्तर

7

documentation कार्यों increment और decremant Couchbase के अनुसार सबसे पहले "परमाणु" क्लस्टर के भीतर हैं। तो यदि आप उन्हें "autoincrement" उत्पन्न करने के लिए उपयोग करते हैं तो सभी को ठीक काम करना चाहिए।

लेकिन अगर आप यह सुनिश्चित करना चाहते हैं कि आप सोफेबेस में नई वस्तु को सहेजते हैं तो आप मौजूदा ओवरराइड नहीं करेंगे (जैसे "दोनों कोचबेस उदाहरण 1501 लौटा सकते हैं") आप StoreMode.Add के साथ स्टोर ऑपरेशन का उपयोग कर सकते हैं। इसलिए यदि आप एक ही समय में couchbase.store(StoreMode.Add, "request:1501",value) पर कॉल करते हैं, तो एक अनुरोध सफलता के साथ समाप्त हो जाएगा, अन्य असफल हो जाएंगे और आप इसे "असफल" पकड़ सकते हैं और फिर उस स्टोर ऑपरेशन को दोहराने का प्रयास कर सकते हैं (नई कुंजी के लिए नई ऑटोइनक्रिएटेड आईडी प्राप्त करने के साथ)

+1

ठीक है क्रॉस डेटा सेंटर प्रतिकृति उदाहरण पर विचार करें। कहें डीसी 1 और डीसी 2 के बीच का लिंक 5 सेकंड के लिए बाहर निकलता है और उस दौरान डीसी 1 और डीसी 2 प्रत्येक 200 अनुरोध प्राप्त करता है और संसाधित करता है। ऑटो ऑटोमेंट्स की तुलना में अब हमारे ऑटो इंक के साथ क्या होता है, दोनों बढ़कर 1700 हो गए हैं और डीसी के उन आईडी का उपयोग करके रिकॉर्ड रिकॉर्ड किए गए हैं 'तब क्या होता है? एक स्टोर कमांड उस स्थिति में असफल नहीं होने जा रहा है और इसलिए, परमाणु या नहीं, ऑपरेशन डेटा स्थिरता के लिए कुछ भयानक हो रहा है? –

+2

जैसा कि मैंने कहा कि वृद्धि एक क्लस्टर में परमाणु है।यदि आप एक्सडीसीआर का उपयोग करने की योजना बना रहे हैं, तो आपको अपने "autoincrement" में क्लस्टर आईडी जैसे कुछ जोड़ने की आवश्यकता है। अर्थात। अनुरोध: : 'या' अनुरोध: : '। इस मामले में यदि आपको दो समान ऑटोइनक्रिकेंटेड आईडी मिलती हैं, तो भी आपकी कुंजी अद्वितीय होगी क्योंकि इसमें अद्वितीय 'cluster_id' होगा। लेकिन, मेरे लिए, अगर मुझे एक्सडीसीआर की ज़रूरत है तो मैं केवल GUID का उपयोग करूंगा और मूल्यों को क्रमबद्ध करने के लिए टाइमस्टैम्प की तरह कुछ जोड़ूंगा और परमाणु संचालन की परवाह नहीं करूंगा। – m03geek

+0

ठीक है कि इसे साफ़ करता है। मुझे लगता है कि सवाल पूछते समय यह मामला हो सकता है और मुझे यकीन है कि भविष्य में अन्य लोग आरडीबी से नोएसक्यूएल में जाने पर एक ही सवाल पूछेंगे। या ऐसा होने की अधिक संभावना है कि कोई इस पर विचार नहीं करेगा और एक्सडीसीआर शुरू करने के बाद यह सब अलग हो जाएगा - उम्मीद है कि इससे उन्हें समझाया जाएगा कि क्या गलत हुआ और उन्हें इस मुद्दे को हल करने का एक तरीका प्रदान किया गया। पुष्टि और सलाह m03geek के लिए धन्यवाद। –

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