2013-08-22 5 views
16

प्रश्न 1: मुझे पता है कि रेडिस सभी डेटा को स्मृति में लोड करता है, इस प्रकार पढ़ने/लिखने की गति में सुधार होता है। तो, क्या इसका मतलब यह है कि यदि मेरा मेमोरी आकार 2 जी है, तो अधिकतम डेटासेट आकार 2 जी से बड़ा नहीं होना चाहिए? अब मेरे डेटाबेस में 100 जी + डेटा है, मेरे सर्वर की याददाश्त 32 जी से बड़ी नहीं हो सकती है, इसलिए, रेडिस अब मेरे लिए उपयुक्त नहीं है?रेडिस, वितरित या नहीं?

प्रश्न 2: क्या Redis एक वितरित प्रणाली है या नहीं? जब मैं रेडिस की सीएपी संपत्ति की खोज के लिए Google का उपयोग करता हूं, तो यह कहता है कि रेडिस एक वितरित प्रणाली नहीं है, इसलिए, इसका CAP से कोई लेना देना नहीं है। लेकिन Wikipedia से, यह कहता है कि इसमें मास्टर-गुलाम वास्तुकला है, कई गुलामों के साथ एक मास्टर है। कितना भ्रमित है।

उत्तर

35

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

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

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

आप जिस वितरित प्रणाली की आवश्यकता है उसे बनाने के लिए आप शेर्डिंग और मास्टर/गुलाम प्रतिकृति मिश्रण कर सकते हैं। हालांकि, रेडिस केवल ऐसा करने के लिए बुनियादी ईंटें प्रदान करता है। विशेष रूप से, यह लचीलापन और एचए से निपटने के लिए बहुत कम पेशकश करता है (और सीएपी प्रमेय में पी को संबोधित करता है)। आईएमओ, Redis sentinel अकेले एचए रेडिस कॉन्फ़िगरेशन का समर्थन करने के लिए पर्याप्त नहीं है, क्योंकि इसमें केवल भूमिका प्रबंधन शामिल है। आपको इसे संसाधन प्रबंधक के साथ पूरक करने की आवश्यकता है, और ग्राहक/एप्लिकेशन में बहुत अधिक तर्क डालना है।

Redis Cluster नामक एक चल रही परियोजना है, जिसका उद्देश्य एक न्यूनतम उपयोग में आसान वितरित प्रणाली प्रदान करना है, लेकिन इसमें अभी भी बहुत सी चीजों की कमी है, और अभी तक उत्पादन के उद्देश्य के लिए उपयोग योग्य नहीं है।

आप एक ऑफ-शेल्फ वितरित की दुकान की जरूरत है, Redis शायद नहीं एक अच्छा विकल्प है। बेहतर होगा कि तुम कैसेंड्रा, Riak, MongoDB, काउचबेस एयरोस्पाइक, MySQL क्लस्टर, ओरेकल NoSQL, आदि द्वारा परोसा जाएगा ... हालांकि, अगर आप अपनी खुद की विशेष प्रणाली का निर्माण करना चाहते हैं, Redis पर निर्माण करने के लिए एक उत्कृष्ट घटक है।

+0

ठीक है, आपकी जानकारी वास्तव में महत्वपूर्ण है और me.From अपने विवरण के लिए बिंदु पर, redis सच में नहीं मेरे लिए उपयुक्त, क्योंकि हम एक विशेष प्रणाली के निर्माण पर ब्याज पर है, बस एक ऑफ-द-शेल्फ NoSQL 100G भंडारण डेटाबेस है + data.I अब MongoDB और CouchDB के लिए और अधिक attentiont भुगतान कर रहा हूँ। – wuchang

+1

इसके अलावा, मुझे लगता है कि Redis ** के लिए ** कैशिंग एक अच्छा समाधान है और पूरे डेटा भंडारण नहीं। इसलिए, लगातार उपयोग और पहुंच के लिए डेटा के विखंडन को स्टोर करना संभव है। – Babak