मल्टीपल रेडिस डेटाबेस का क्या मतलब है?


159

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

यदि मैं कई डेटाबेस में खंड करता हूं, तो सब कुछ अभी भी सिंगल थ्रेडेड है, और मुझे अभी भी केवल एक कोर का उपयोग करना है। यदि मैं उसी बॉक्स पर Redis का एक और उदाहरण लॉन्च करता हूं, तो मुझे एक अतिरिक्त कोर का उपयोग करने के लिए मिलता है। उसके ऊपर, मैं रेडिस डेटाबेस का नाम नहीं दे सकता, या उन्हें किसी भी प्रकार के अधिक तार्किक पहचानकर्ता नहीं दे सकता। तो, उस सब के साथ, क्यों / जब मैं कभी भी एक अतिरिक्त डेटाबेस मैं चाहता हूँ के लिए Redis का एक अतिरिक्त उदाहरण कताई के बजाय कई Redis डेटाबेस का उपयोग करना चाहते हैं? और संबंधित, रेडिस प्रत्येक अतिरिक्त डेटाबेस के लिए एक अतिरिक्त कोर का उपयोग करने की कोशिश क्यों नहीं करता है जो मैं जोड़ता हूं? डेटाबेस में सिंगल थ्रेडेड होने का क्या फायदा है?


अपने Node.js ऐप में, यह करें ---> मॉड्यूल.exports = {"1": "आपका नाम redis db one", "2": "आपका नाम redis db two", "3": "your" redis db तीन "} आदि के लिए नाम, या कुंजी और मूल्यों को स्विच करें, आपको जो कुछ भी चाहिए
अलेक्जेंडर मिल्स

1
Redis 2.8.0 और इसके बाद यह अनुशंसा की जाती है कि आप KEYS के बजाय SCAN का उपयोग करें, क्योंकि यह एक समय में कम संख्या में तत्वों पर निर्भर करता है (इस प्रकार लंबे समय तक सर्वर को अवरुद्ध नहीं करता है)।
TryHarder

जवाबों:


85

प्रिंसिपल में, उसी उदाहरण पर Redis डेटाबेस RDBMS डेटाबेस इंस्टेंसेस में स्कीमा से अलग नहीं हैं।

तो, उस सब के साथ, क्यों / जब मैं कभी भी एक अतिरिक्त डेटाबेस मैं चाहता हूँ के लिए Redis का एक अतिरिक्त उदाहरण कताई के बजाय कई Redis डेटाबेस का उपयोग करना चाहते हैं?

एक ही redis उदाहरण में redis डेटाबेस का उपयोग करने का एक स्पष्ट लाभ है, और वह है प्रबंधन। यदि आप प्रत्येक एप्लिकेशन के लिए एक अलग इंस्टेंस बनाते हैं, और मान लें कि आपको 3 एप्लिकेशन मिले हैं, तो यह 3 अलग-अलग रेडिस इंस्टेंसेस हैं, जिनमें से प्रत्येक को HA के लिए उत्पादन में एक दास की आवश्यकता होगी, इसलिए यह 6 कुल उदाहरण हैं। एक प्रबंधन के दृष्टिकोण से, यह गन्दा वास्तविक त्वरित हो जाता है क्योंकि आपको उन सभी की निगरानी करने की आवश्यकता है, उन्नयन / पैच, आदि। यदि आप उच्च I / O के साथ रेडिस को ओवरलोड करने की योजना नहीं बनाते हैं, तो एक दास के साथ एक एकल उदाहरण सरल और है बशर्ते कि यह आपके SLA से मिलता है।


25
मल्टीपल रेडिस इंस्टेंस हमेशा जाने का रास्ता है। अवधि। विभिन्न डेटा के लिए समानांतर क्वेरी चलाएँ। यदि आपकी CICD पाइपलाइन आपके लिए कैश क्लस्टर नहीं बनाती है, तो इसे ठीक करें, इसके बजाय ..... आपको बिंदु मिलता है
Cmag

3
यह ओपी बिंदुओं को संबोधित नहीं करता है: (1) रेडिस प्रत्येक अतिरिक्त डेटाबेस के लिए अतिरिक्त कोर का उपयोग करने की कोशिश क्यों नहीं करता है? (२) डेटाबेस में सिंगल थ्रेडेड होने का क्या फायदा है?
Ives

93

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

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

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

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

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

कई उदाहरणों का उपयोग करके आप बहु थ्रेडिंग जटिलता को एक सरल संदेश पासिंग स्टाइल सिस्टम में बदल देते हैं।


57
कई डेटाबेस का उपयोग किया जाता है? क्या आप कृपया उस कथन का संदर्भ प्रदान कर सकते हैं। मुझे पता है कि कई डेटाबेस रेडिस क्लस्टर में समर्थित नहीं हैं, लेकिन न तो कोई जटिल बहु-कुंजी कमांड हैं और वे पदावनत नहीं हैं।
1

27
रेडिस के 'स्वामी' (Google कोड के अनुसार ) से कुछ (मजबूत) सबूत हैं कि "... डेटाबेस को तब भी नहीं निकाला जाएगा जब मैं अतीत में कहा था कि वे होंगे।"
केनी एविट

3
आप Redis-क्लस्टर पर एक से अधिक redis db का उपयोग नहीं कर पाएंगे। इसके अलावा, कई डेटाबेस अभी भी एक बात है।
coredump

26
पदावनत कथन के लिए -1। एकाधिक डेटाबेस को हतोत्साहित किया जा सकता है, और रेडिस-क्लस्टर में असमर्थित किया जा सकता है, लेकिन वे पदावनत नहीं होते हैं।
अगदुदे

1
@-वास्तविक-बिल आप "एक प्रमुख सूचकांक कैसे बना सकते हैं"?
कीस दे कुटर

57

यहां तक ​​कि सल्वाटोर सैनफिलिपो (रेडिस के निर्माता) को लगता है कि रेडिस में कई डीबी का उपयोग करना एक बुरा विचार है। उनकी टिप्पणी यहां देखें:

https://groups.google.com/d/topic/redis-db/vS5wX8X4Cjg/discussion

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

डीबी नंबरों के साथ, कुछ डीबी के डिफ़ॉल्ट के साथ, हम बेहतर संचार कर रहे हैं कि यह विशेषता क्या है और इसका उपयोग कैसे किया जा सकता है मुझे लगता है। मुझे उम्मीद है कि कुछ बिंदु पर हम कई DBs समर्थन को सभी पर छोड़ सकते हैं, लेकिन मुझे लगता है कि शायद बहुत देर हो चुकी है क्योंकि इस सुविधा पर कई लोग भरोसा कर रहे हैं।


4
पकड़ो, इसलिए DB उप का उपयोग करना वास्तव में केवल उपसर्ग का उपयोग करने की तुलना में कम कुशल है? क्या यहाँ इस वाक्य का मतलब है (क्या कोई स्पष्ट कर सकता है)? "अगर DB चयन एक स्ट्रिंग के साथ किया जा सकता है तो मैं इस सुविधा को एक स्केलेबल ओ (1) शब्दकोश परत के रूप में इस्तेमाल किया जा सकता है, कि इसके बजाय यह नहीं है।"
प्रात:

8
  1. मैं वास्तव में एक ही उदाहरण पर कई डेटाबेस होने के किसी भी लाभ को नहीं जानता। मुझे लगता है कि यह उपयोगी है यदि कई सेवाएं समान डेटाबेस सर्वर (एस) का उपयोग करती हैं, तो आप महत्वपूर्ण टकराव से बच सकते हैं।

  2. मैं KEYSकमांड का उपयोग करते हुए निर्माण करने की सलाह नहीं दूंगा, क्योंकि यह O (n) है और यह अच्छे पैमाने पर नहीं है। आप इसके लिए क्या उपयोग कर रहे हैं कि आप दूसरे तरीके से पूरा कर सकते हैं? हो सकता है कि अगर आपके लिए कार्यक्षमता KEYSमहत्वपूर्ण है तो रेडिस आपके लिए सबसे अच्छा मैच नहीं है।

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


2 के जवाब में: मैं चाबी कमांड का उपयोग केवल तभी करता हूं जब मुझे सभी चाबियों की आवश्यकता होती है। मैं इसे उसी तरह से उपयोग करता हूं जिस तरह से एक hgetall का उपयोग करेगा। दोनों O (n) हैं। कुंजी खराब है अगर आपको कुछ रेगेक्स के लिए कुंजी के विशाल सेट के माध्यम से खोज करने की आवश्यकता है, लेकिन यह पूरी तरह से ठीक है अगर आपको कुछ डीबी में सभी कुंजी पर कुछ ऑपरेशन करने की आवश्यकता है। 3 के जवाब में: मैं एक डेटाबेस पर एकल थ्रेडिंग के लाभों को समझता हूं। मैं इसे कई डेटाबेस में नहीं समझता हूं क्योंकि एक डेटाबेस पर कार्रवाई करने के लिए दूसरे डेटाबेस AFAIK पर कार्रवाई को कभी भी ब्लॉक करने की आवश्यकता नहीं होती है।
एली

3

मैं ईमेल पते की एक ब्लैकलिस्ट को लागू करने के लिए रेडिस का उपयोग कर रहा हूं, और विभिन्न स्तरों के ब्लैकलिस्टिंग के लिए मेरे पास अलग-अलग टीटीएल मूल्य हैं, इसलिए एक ही उदाहरण पर अलग-अलग डीबी होने से मुझे बहुत मदद मिलती है।


1
अब हम एक ही मुद्दे का सामना कर रहे हैं - हम अपने डेटा के विभिन्न भागों के लिए अलग LRU नीति को परिभाषित करना चाहते हैं। क्या आप इसे साझा कर सकते हैं कि आपने इसे कैसे लागू किया?
user2717436

@ user2717436 मुझे यकीन नहीं है कि मैं क्या करता हूं, यह आपके लिए संबंधित है, लेकिन मैं अलग-अलग डेटाबेस का उपयोग विभिन्न सेटों के रूप में करता हूं, हमेशा कुंजी के टीटीएल को सेट करता हूं जब मैं उन्हें सम्मिलित करता हूं। जैसे redis.get (1) पर ब्लैकलिस्ट A है, और जब भी मैं वहां कोई कुंजी सेट करता हूं, तो मैं समाप्ति को 5000 पर सेट करता हूं। और redis.get (2) पर ब्लैक लिस्ट बी है और जब भी मैं वहां कोई कुंजी सेट करता हूं, मैं 10000 तक समाप्त करता
हूं

2

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


1

एक ही उदाहरण में कई डेटाबेस का उपयोग करना निम्नलिखित परिदृश्य में उपयोगी हो सकता है:

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


1

मुझे पता है कि यह प्रश्न वर्षों पुराना है, लेकिन एक और कारण है कि कई डेटाबेस उपयोगी हो सकते हैं।

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

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

मैं जिस उपयोग-केस को देख रहा हूं, उसके कई उदाहरण हैं, जिनमें से प्रत्येक में 200-300K का उपयोग होता है, फिर भी मेरे क्लाउड प्रदाता पर न्यूनतम आवंटन 1M है। हम वास्तव में किसी भी सीमा में सेंध लगाए बिना एक ही Redis पर 10 उदाहरणों को समेकित कर सकते हैं, और इसलिए Redia होस्टिंग लागत का लगभग 90% बचा सकते हैं। मैं सराहना करता हूं कि इस दृष्टिकोण के साथ सीमाएं और मुद्दे हैं, लेकिन यह ध्यान देने योग्य है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.