2012-02-09 19 views
14

मेरे पास लगभग 16 जीबी रैम वाला एक डेबियन सर्वर है जिसका उपयोग मैं nginx और कई भारी mysql डेटाबेस, और कुछ कस्टम php ऐप्स के साथ कर रहा हूं। मैं माइस्क्ल और PHP के बीच मेमोरी कैश को कार्यान्वित करना चाहता हूं, लेकिन रैम में सबकुछ स्टोर करने के लिए डेटाबेस बहुत बड़े हैं। मैं सोच रहा हूं कि जब तक मैं शोध करता हूं तब तक एलआरयू कैश बेहतर हो सकता है। क्या यह रेडिस से बाहर निकलता है? कॉचबेस भी एक विचार है।मेमकैच, रेडिस, या कॉचबेस

उत्तर

15

मान लीजिए कि एक अनूठा सर्वर है जो कुछ शेष फ्री रैम के साथ nginx + php + mysql उदाहरण चला रहा है, डेटा को कैश करने के लिए रैम का उपयोग करने का सबसे आसान तरीका बस mysql उदाहरणों के बफर कैश को बढ़ाने के लिए है। डेटाबेस पहले से ही अपने बफर को संभालने के लिए एलआरयू-जैसी तंत्र का उपयोग करते हैं।

अब, यदि आपको डेटाबेस से दूर प्रसंस्करण का हिस्सा स्थानांतरित करने की आवश्यकता है, तो प्री-कैशिंग एक विकल्प हो सकता है। Memcached/redis के बारे में बात करने से पहले, एपीसी जैसे PHP के साथ एकीकृत एक साझा मेमोरी कैश कुशल होगा बशर्ते केवल एक सर्वर माना जाता है (वास्तव में रेडिस/मेमकैड से अधिक कुशल)।

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

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

+0

मैंने एपीसी का उपयोग किया है, लेकिन वेब ऐप के साथ हम उपयोग कर रहे PHP क्लिप स्क्रिप्ट्स एक ही डेटा तक नहीं पहुंच सकते हैं। यही वह जगह है जहां memcached पहला अगला तार्किक कदम बन गया। मैं सोफेबेस देख रहा था क्योंकि मैंने पढ़ा था कि यह एक गैर-अस्थिर था (यदि आवश्यक हो) ड्रॉप-इन प्रतिस्थापन को कम या ज्यादा कम करने के लिए। – Poe

+19

कोचबेस को माना जाना चाहिए क्योंकि इसमें एक सादे-पुराने-मेमकैच मोड है (जिसे बाल्टी कहा जाता है) लेकिन प्रबंधन को आसान बनाता है, आँकड़े प्रबंधित करता है आदि। पूर्ण प्रकटीकरण: मैं कोचबेस के लिए काम करता हूं। –

1

हमने डेटा को कैश करने के लिए शुरुआत में memcached का उपयोग किया था। विभिन्न बाल्टी के तहत विभिन्न अनुप्रयोगों के लिए यादृच्छिक विभाजन डेटा एक वास्तविक मुद्दा था। इसके अलावा हमें एक बाल्टी से डेटा फ्लश करने की आवश्यकता है। मॉनिटरिंग डेटा एक और आवश्यकता है। हम कोचबेस में चले गए और memcahed शैली bucket.i का उपयोग करें लगता है कि memcahe का उपयोग करने के बजाय कैशिंग के लिए couchbase memcache शैली बाल्टी का उपयोग करने के लिए यह अधिक लचीला और कुशल है।

+0

यह कैश/मेमकेच उपयोगकर्ताओं के लिए कॉचबेस (मेमकेचे बाल्टी के साथ, और कभी-कभी कॉचबेस एक के साथ) के लिए एक सामान्य उपयोग केस है।मैं आपको http://www.couchbase.com/memcached देखने के लिए आमंत्रित करता हूं –

0

मैट इंगेंथ्रॉन ने बताया कि हरी ने नोट किया कि कोचबेस सीधे मेमकैच किए गए प्रतिस्थापन के रूप में काम करने का समर्थन करता है। कॉचबेस एक गैर-लोचदार तरीके से memcached का उपयोग करता है, क्योंकि memcache क्लस्टर में भाग लेने वाले प्रत्येक नोड में कोई दृढ़ता नहीं है, यानी सिर्फ एक कैश है, लेकिन सोफेबेस भी "कोचबेस" बाल्टी प्रकार प्रदान करता है जो दृढ़ता प्रदान करता है। मेम्बेस भी कोड का हिस्सा है इसलिए कॉचबेस न केवल डिस्क से डेटा प्रदान करता है बल्कि रैम से भी सेवा करता है और अन्य नोड्स को दोहराने और डिस्क पर बने रहने के दौरान इसे जारी रखता है क्योंकि परिवर्तन लागू होते हैं। मैं एक पदचिह्न में कैशिंग और दृढ़ता दोनों के लिए कोचबेस 3.x की अत्यधिक अनुशंसा करता हूं, या एकाधिक पैरों के निशान यदि आप केवल अपनी स्थिरता परत से अलग केवल एक कैशिंग परत चाहते थे।

1

क्या आपने कभी भी अपने डेटाबेस को दृढ़ता से इन-मेमोरी नोएसक्यूएल समाधानों में से किसी एक का उपयोग करके रैम पर ले जाना माना है? यह आपके मूल MySQL डेटाबेस से कम संग्रहण ले सकता है, क्योंकि कई नोएसक्यूएल समाधानों में आमतौर पर SQL डेटाबेस की तुलना में कम पदचिह्न होता है। इसके अलावा, यदि सर्वर साइड लॉजिक आपके लिए बहुत महत्वपूर्ण है, तो टारनटूल को आजमाएं क्योंकि इसमें लूआ स्क्रिप्टिंग ऑनबोर्ड है और इसमें काफी छोटी मेमोरी पदचिह्न होना चाहिए। मेरे मामलों में टारनटूल में एक ही डेटा MySQL में दो गुना कम था। ऐसा इसलिए है क्योंकि उनके पास प्रति पंक्ति और प्रति फ़ील्ड छोटे ओवरहेड हैं और डेटा संग्रहण के लिए संदेशपैक का उपयोग करते हैं।