Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

क्या कोई रेडिस क्लाइंट (जावा पसंदीदा) है जो रेडिस क्लस्टर पर लेनदेन का समर्थन करता है?

रेडिस क्लस्टर के भीतर लेनदेन रेडिस स्टैंडअलोन के साथ लेनदेन की तुलना में एक अलग कहानी है।

TL;DR;

यह एक क्लाइंट मुद्दे की तुलना में गारंटी और ट्रेड-ऑफ के संबंध में एक वैचारिक समस्या है।

स्पष्टीकरण

रेडिस क्लस्टर में, एक विशेष नोड एक या एक से अधिक हैश-स्लॉट के लिए एक मास्टर है, जो कि कई नोड्स के बीच डेटा को विभाजित करने के लिए विभाजन योजना है। एक हैश-स्लॉट, कमांड में उपयोग की जाने वाली कुंजियों से परिकलित, एक नोड पर रहता है। एकाधिक कुंजियों वाले आदेश एक ही हैश-स्लॉट तक उपज तक सीमित हैं। अन्यथा, उन्हें अस्वीकार कर दिया जाता है। ऐसे नक्षत्रों को क्रॉस-स्लॉट कहा जाता है।

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

रेडिस क्लस्टर के लिए लेनदेन संबंधी सहायता प्रदान करने वाला एक उच्च-स्तरीय एपीआई कई मुद्दों का सामना करता है और अब तक दो रणनीतियां हैं, रेडिस क्लस्टर में लेनदेन से कैसे निपटें:

यदि सभी कुंजियां एक नोड पर स्थित हैं तो लेन-देन का समर्थन करें

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

वितरित लेनदेन

इस मामले में, वितरित लेनदेन में शामिल होने वाले सभी नोड्स पर कई लेनदेन शुरू होते हैं। इस वितरित लेनदेन में सभी मास्टर नोड्स की कुंजियाँ शामिल हो सकती हैं। लेन-देन निष्पादित होने के बाद, क्लाइंट लाइब्रेरी लेनदेन के निष्पादन को ट्रिगर करती है, लाइब्रेरी सभी परिणाम एकत्र करती है (कमांड परिणामों के क्रम को बनाए रखने के लिए) और इसे कॉलर को वापस कर देती है।

लेन-देन की यह शैली ग्राहक के लिए पारदर्शी है। जैसे ही किसी विशेष नोड पर एक कुंजी का अनुरोध किया जाता है और नोड अभी तक लेनदेन का हिस्सा नहीं है, एक MULTI लेनदेन में नोड में शामिल होने के लिए आदेश जारी किया जाता है। यहाँ कमी यह है कि लेन-देन अब सशर्त नहीं हो सकते (WATCH ) अलग-अलग लेन-देन को कोई जानकारी नहीं है कि क्या एक अलग नोड पर एक कुंजी बदली गई थी, और इसलिए एक लेनदेन को वापस लाया जा सकता है जबकि अन्य लेनदेन सफल होंगे। थोड़ा सा दो-चरण-प्रतिबद्ध जैसा लगता है।

निष्कर्ष

रेडिस लेनदेन परमाणु कमांड बैचिंग की तरह लगता है जिसे सशर्त बनाया जा सकता है। यह याद रखना महत्वपूर्ण है कि कमांड निष्पादन को स्थगित कर दिया गया है क्योंकि पढ़ने के परिणाम लेन-देन के निष्पादन के समय वापस आ जाते हैं न कि कमांड जारी होने के समय।

रेडिस क्लस्टर के लिए, ग्राहकों ने वैश्विक रणनीति पर निर्णय नहीं लिया है। किसी विशेष रेडिस क्लस्टर नोड पर लेन-देन चलाना सुरक्षित है, लेकिन आप उस नोड द्वारा दी जाने वाली कुंजियों तक सीमित हैं। दोनों संभावित रणनीतियों में ऐसे गुण होते हैं जो कुछ उपयोग-मामलों के लिए उपयोगी हो सकते हैं, लेकिन साथ ही उनकी सीमाएं भी होती हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सिंगल कैश फ्रंटएंड और बैकएंड

  2. उबंटू पर रेडिस को स्थापित और कॉन्फ़िगर करना

  3. ServiceStack.Redis:कनेक्ट करने में असमर्थ:खेल:50071

  4. सर्विसस्टैक रेडिस, लुआ तालिका को सूची के रूप में कैसे वापस करें

  5. phpRedis क्लस्टर में प्रवास और लगातार हैशिंग