जवाबों:
Redis और MongoDB का उपयोग अच्छे परिणामों के साथ किया जा सकता है। MongoDB और Redis (MySQL और Sphinx के साथ) चलाने के लिए प्रसिद्ध एक कंपनी क्रेगलिस्ट है। जेरेमी Zawodny से इस प्रस्तुति को देखें ।
MongoDB लगातार, दस्तावेज़ उन्मुख, विभिन्न तरीकों से अनुक्रमित डेटा के लिए दिलचस्प है। Redis वाष्पशील डेटा, या विलंबता संवेदनशील अर्ध-निरंतर डेटा के लिए अधिक दिलचस्प है।
MongoDB के शीर्ष पर Redis के ठोस उपयोग के कुछ उदाहरण यहां दिए गए हैं।
प्री-2.2 MongoDB में अभी तक एक समाप्ति तंत्र नहीं है। वास्तव में वास्तविक TTL को लागू करने के लिए कैप किए गए संग्रह का उपयोग नहीं किया जा सकता है। रेडिस में एक टीटीएल-आधारित समाप्ति तंत्र है, जो अस्थिर डेटा को संग्रहीत करने के लिए सुविधाजनक बनाता है। उदाहरण के लिए, उपयोगकर्ता सत्र आमतौर पर Redis में संग्रहीत किए जाते हैं, जबकि उपयोगकर्ता डेटा को MongoDB में संग्रहीत और अनुक्रमित किया जाएगा। ध्यान दें कि MongoDB 2.2 ने संग्रह स्तर पर (उदाहरण के लिए डेटा को शुद्ध करने के लिए उपयोग करने के लिए) एक कम सटीकता समाप्ति तंत्र पेश किया है।
रेडिस एक सुविधाजनक सेट डेटाटाइप और इसके संबद्ध संचालन (संघ, चौराहे, कई सेटों पर अंतर, आदि ...) प्रदान करता है। इस सुविधा के शीर्ष पर एक मूल मुखर खोज या टैगिंग इंजन को लागू करना काफी आसान है, जो MongoDB अधिक पारंपरिक अनुक्रमण क्षमताओं के लिए एक दिलचस्प अतिरिक्त है।
रेडिस सूचियों पर कुशल अवरुद्ध पॉप संचालन का समर्थन करता है। इसका उपयोग एक तदर्थ वितरित कतार प्रणाली को लागू करने के लिए किया जा सकता है। यह MongoDB की तुलना में अधिक लचीली है शापित कर्सर IMO, क्योंकि बैकएंड एप्लिकेशन एक टाइमआउट के साथ कई कतारों को सुन सकता है, आइटम को दूसरी कतार में परमाणु रूप से स्थानांतरित कर सकता है, आदि ... यदि एप्लिकेशन को कुछ कतार की आवश्यकता होती है, तो यह Redis में कतार को संग्रहीत करने के लिए समझ में आता है। , और MongoDB में लगातार कार्यात्मक डेटा रखें।
रेडिस भी एक पब / उप तंत्र प्रदान करता है। एक वितरित अनुप्रयोग में, एक घटना प्रसार प्रणाली उपयोगी हो सकती है। यह फिर से रेडिस के लिए एक उत्कृष्ट उपयोग मामला है, जबकि लगातार डेटा MongoDB में रखा जाता है।
क्योंकि रेडिस के साथ मोंगोबीडी के साथ डेटा मॉडल को डिजाइन करना बहुत आसान है (रेडिस अधिक निम्न-स्तर है), यह मुख्य लगातार डेटा के लिए MongoDB के लचीलेपन से लाभ के लिए दिलचस्प है, और रेडिस द्वारा प्रदान की गई अतिरिक्त सुविधाओं से (कम विलंबता) , आइटम समाप्ति, कतारों, पब / उप, परमाणु ब्लॉक, आदि ...)। यह वास्तव में एक अच्छा संयोजन है।
कृपया ध्यान दें कि आपको एक ही मशीन पर Redis और MongoDB सर्वर कभी नहीं चलाना चाहिए। MongoDB मेमोरी को स्वैप करने के लिए डिज़ाइन किया गया है, Redis नहीं है। यदि MongoDB कुछ स्वैपिंग गतिविधि को ट्रिगर करता है, तो Redis का प्रदर्शन विनाशकारी होगा। उन्हें अलग-अलग नोड्स पर अलग किया जाना चाहिए।
स्पष्ट रूप से इससे कहीं अधिक अंतर हैं, लेकिन एक अत्यंत उच्च अवलोकन के लिए:
उपयोग के मामलों के लिए:
तकनीकी तौर पर:
कुछ ओवरलैप है, लेकिन दोनों का उपयोग करना बेहद सामान्य है। यहाँ पर क्यों:
रेडिस का उपयोग पारंपरिक डेटास्टोर के प्रतिस्थापन के रूप में किया जा सकता है, लेकिन इसका उपयोग अक्सर एक अन्य सामान्य "लंबे" डेटा स्टोर के साथ किया जाता है , जैसे कि मोंगो, पोस्टग्रैस्कल, मायएसक्यूएल, आदि।
Redis एक कैशिंग सर्वर के रूप में MongoDB के साथ उत्कृष्ट रूप से काम करता है। यहाँ क्या होता है।
कभी भी जो mongoose कैश क्वेरी जारी करता है, वह सबसे पहले कैश सर्वर पर जाएगा।
कैश सर्वर यह देखने के लिए जांच करेगा कि क्या इससे पहले कभी सटीक क्वेरी जारी की गई है।
यदि यह नहीं है तो कैश सर्वर क्वेरी लेगा, इसे मोंगोडब पर भेजेगा और मोंगो क्वेरी निष्पादित करेगा।
हम फिर उस क्वेरी का परिणाम लेंगे, यह फिर से कैश सर्वर पर चला जाता है, कैश सर्वर क्वेरी के परिणाम को स्वयं स्टोर करेगा।
यह कभी भी कहेगा कि मैं उस क्वेरी को निष्पादित करता हूं, मुझे यह प्रतिक्रिया मिलती है और इसलिए इसे जारी किए गए प्रश्नों और प्रतिक्रियाओं के बीच एक रिकॉर्ड बनाए रखना है जो उन प्रश्नों से वापस आते हैं।
कैश सर्वर प्रतिक्रिया लेगा और इसे वापस मूंगोज को भेज देगा, मानगो इसे व्यक्त करने के लिए देगा और यह अंततः आवेदन के अंदर समाप्त हो जाएगा।
कभी भी, वही सटीक क्वेरी फिर से जारी की जाती है, mongoose कैश सर्वर को एक ही क्वेरी भेजेगा, लेकिन अगर कैश सर्वर देखता है कि यह क्वेरी mongodb पर क्वेरी नहीं भेजेगा, तो इसके बजाय प्रतिक्रिया लेने जा रहा है अंतिम बार मिली क्वेरी और तुरंत इसे फिर से मानसून पर भेज दें। यहां कोई सूचक नहीं है, कोई पूर्ण तालिका स्कैन नहीं है, कुछ भी नहीं।
हम यह कहने के लिए एक साधारण खोज कर रहे हैं कि क्या इस क्वेरी को निष्पादित किया गया है? हाँ? ठीक है, अनुरोध लें और इसे तुरंत वापस भेजें और मोंगो को कुछ भी न भेजें।
हमारे पास मानगो सर्वर, कैश सर्वर (रेडिस) और मोंगोडब है।
कैश सर्वर पर डेटा स्टोर के प्रमुख मूल्य प्रकार के साथ एक डेटास्टोर हो सकता है जहां सभी कुंजी पहले जारी किए गए किसी प्रकार के क्वेरी और उस क्वेरी के परिणाम का मूल्य है।
तो शायद हम _id द्वारा ब्लॉगपोस्ट का एक समूह देख रहे हैं।
तो हो सकता है कि यहाँ की कुंजियाँ उन अभिलेखों से परे हैं जिन्हें हमने पहले देखा है।
तो कल्पना कीजिए कि मानगो एक नई क्वेरी जारी करता है जहां यह 123 के _id के साथ एक ब्लॉगपोस्ट खोजने की कोशिश करता है, क्वेरी कैश सर्वर में प्रवाहित होती है, कैश सर्वर यह देखने के लिए जांच करेगा कि क्या यह किसी ऐसे क्वेरी के लिए परिणाम है जो _id की तलाश में था 123 का।
यदि यह कैश सर्वर में मौजूद नहीं है, तो इस क्वेरी को मोंगॉडब इंस्टेंस पर ले जाया और भेजा जाता है। Mongodb क्वेरी को निष्पादित करेगा, एक प्रतिक्रिया प्राप्त करेगा और इसे वापस भेजेगा।
यह परिणाम कैश सर्वर को वापस भेज दिया जाता है जो उस परिणाम को लेता है और तुरंत इसे फिर से भेज देता है ताकि हमें यथासंभव तेजी से प्रतिक्रिया मिल सके।
ठीक इसके बाद, कैश सर्वर जारी किए गए क्वेरी को भी ले जाएगा, और जो जारी किए गए हैं उनके प्रश्नों के संग्रह में जोड़ देगा और क्वेरी के परिणाम को ले जाएगा और इसे क्वेरी के खिलाफ सही स्टोर करेगा।
तो हम कल्पना कर सकते हैं कि भविष्य में हम फिर से एक ही क्वेरी जारी करते हैं, यह कैश सर्वर को हिट करता है, यह उसके पास मौजूद सभी कुंजियों को देखता है और कहता है कि ओह, मुझे पहले ही पता चल गया है कि यह ब्लॉगपोस्ट है, यह मोंगो तक नहीं पहुंचता है, यह बस लेता है क्वेरी का परिणाम है और इसे सीधे मानस में भेजता है।
हम जटिल क्वेरी तर्क नहीं कर रहे हैं, कोई संकेत नहीं, ऐसा कुछ भी नहीं है। इसका उपवास जितना संभव हो। इसका एक साधारण कुंजी मूल्य है।
MongoDB के साथ कैश सर्वर (Redis) कैसे काम करता है, इसका अवलोकन।
अब दूसरी चिंताएँ हैं। क्या हम डेटा को हमेशा के लिए कैशिंग कर रहे हैं? हम रिकॉर्ड कैसे अपडेट करते हैं?
हम हमेशा कैश में डेटा संग्रहीत नहीं करना चाहते हैं और कैश से पढ़ना चाहते हैं।
कैश सर्वर का उपयोग किसी भी लिखने की क्रिया के लिए नहीं किया जाता है। कैश लेयर का उपयोग केवल डेटा पढ़ने के लिए किया जाता है। यदि हम कभी भी डेटा लिखते हैं, तो लेखन हमेशा मोंगोडब उदाहरण पर जाएगा और हमें यह सुनिश्चित करने की आवश्यकता है कि कभी भी हम डेटा लिखते हैं हम कैश सर्वर पर संग्रहीत किसी भी डेटा को साफ़ करते हैं जो उस रिकॉर्ड से संबंधित है जिसे हमने सिर्फ मोंगो में अपडेट किया था।