2011-06-16 7 views
7

PHP के साथ सत्र संग्रहण के लिए Memcached का उपयोग करना अच्छा विचार है? हमारे पास बहुत सारे सर्वर होंगे और हमें हर जगह से सत्र डेटा तक पहुंच प्राप्त करनी होगी ताकि हमें सत्र भंडारण या मेमकैच के रूप में डेटाबेस (हमारे मामले में MySQL) का उपयोग करने के लिए मजबूर किया जा सके। तुम क्या सोचते हो?सत्र भंडारण के लिए Memcached या MySQL - PHP

उत्तर

7

मैं उन लोगों को जानता हूं जिन्होंने इसके लिए मेमकैच किया है - यह बहुत तेज़ है, निश्चित रूप से डेटाबेस से बहुत तेज़ है, और यह बहुत अधिक समेकन को संभालने के लिए बनाया गया है।

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

स्पष्ट समाधान, यदि ऐसा है, तो कई डिस्क-आधारित NoSQL/हैश तालिका डेटाबेस, जैसे कि MemcacheDB, जो मेमकैड से आधारित है, में से एक पर जाना है। या देखें: CouchDB, MongoDB इत्यादि। इनमें से प्रत्येक डेमन्स (मेमकैच समेत) भी बहुत कम जटिल है जब MySQL की तुलना में प्रदर्शन ट्यूनिंग की बात आती है (जहां सभी प्रकार की चीजें जैसे कि कुंजी और सॉर्ट बफर, क्वेरी कैश इत्यादि को ट्यून किया जाना चाहिए प्रति इंस्टॉल/उपयोग मामले) - मेरा मतलब है, मेमकैच के साथ मेमोरी आवंटित करने और इसे शुरू करने के अलावा अन्य कुछ नहीं करना है।

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

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

मैंने MemcacheDB का उल्लेख किया क्योंकि यह मेमकैच प्रोटोकॉल का उपयोग करता है, इसलिए मेमकैच में स्वैप करना बेहद आसान है MemcacheDB या इसके विपरीत के लिए।

0

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

संबंधित मुद्दे