2010-06-21 12 views
18

मैं बहुत से लेख पढ़ रहा हूं जो डेटाबेस के सामने एक मेमकैच (या वेग, आदि) डालने का सुझाव देता है, डेटाबेस को सीधे मारने से अधिक कुशल है। यह मेमोरी कैश में डेटा को देखकर डेटाबेस पर हिट की संख्या को कम करेगा, जो डेटाबेस को मारने से तेज़ है।मेमकैच बनाम एसक्यूएल सर्वर कैश

हालांकि, डेटाबेस में ऑब्जेक्ट्स के लिए SQL सर्वर की अपनी मेमोरी कैश है। जब डेटा पुनर्प्राप्त किया जाता है, तो SQL सर्वर अपने कैश को बनाए रखता है और (यदि आवश्यक हो) पंक्ति को अपनी स्मृति से खींचें और डिस्क को हिट न करें।

तो यदि SQL सर्वर का अपना कैश है, तो बाह्य मेमकैच (या समान) सर्वर का लाभ क्या है?

अधिकांश लेख जो मैं पढ़ रहा हूं वह सोशल नेटवर्किंग साइट्स के आसपास हैं, जो ज्यादातर माइस्क्ल का उपयोग करते हैं। हालांकि, माइस्पेस के बारे में article, जो SQL सर्वर का उपयोग करता है, बताता है कि उस सिस्टम पर कैशिंग का भी उपयोग किया जाता है।

यह article बताता है कि कैशिंग का उपयोग कब किया जाना चाहिए और यह article एक काउंटरपॉइंट है।

उत्तर

13

तो यदि SQL सर्वर का अपना कैश है, तो बाहरी मेमकैच (या समान) सर्वर का लाभ क्या है?

हाँ एसक्यूएल सर्वर का अपना कैश है, लेकिन वह केवल कैश:
- क्वेरी की योजना बना रही
- डेटाबेस फ़ाइलों

से पृष्ठों लेकिन वह कैश नहीं करता है:
- एक प्रश्न से परिणाम

उदाहरण आप एक जटिल क्वेरी जो डेटा का एक बहुत पर कुछ एकत्रीकरण का उपयोग करता है (के बारे में सोच: कैसे कई अलग अलग देशों हम अपने ग्राहकों डेटाबेस में है: देश से ग्राहकों ग्रुप से अलग देश का चयन करें)

एसक्यूएल सर्वर वें पूरे स्कैन करेगा ग्राहक तालिका, लेकिन आपका परिणामसेट केवल कुछ प्रविष्टियां लंबी होगी। जब आप आपकी क्वेरी फिर से जारी, एसक्यूएल सर्वर क्वेरी योजना का पुन: उपयोग कर देंगे और ग्राहक की मेज, पुन: स्कैन करेगा (और अगर तुम भाग्यशाली हो पृष्ठों स्मृति में अब भी कर रहे हैं)

जब आप memcached का उपयोग आप की कुछ पंक्तियों को संग्रहीत कर सकती अपने परिणामसेट और डेटाबेस सर्वर से कनेक्ट किए बिना उन्हें बार-बार पुन: उपयोग करें। तो यह आपके डेटाबेस सर्वर से कुछ लोड लेता है।
नोट: SQL सर्वर पर आपका डेटा बदलता है, तो कुछ पुराने डेटा से सावधान रहें !!

+0

धन्यवाद। मुझे पता नहीं था कि यह पूरी तालिका को स्मृति में संग्रहीत करता है। इस पर दस्तावेज ढूंढना मुश्किल हो गया है। क्या आपके पास एक लिंक है जो यह दस्तावेज करता है? मेरा आखिरी टिप्पणी करने के लिए –

+0

सुधार - मुझे लगता है कि पृष्ठों, स्मृति में जमा हो जाती है न कि पूरी तालिका। –

+1

जब आप पहले से ही द्वारा एक ही स्तंभ समूहीकरण कर रहे हैं एक स्तंभ पर DISTINCT उपयोग करने के लिए नहीं है। – Kiril

0

वेग, एट अल, ग्रेट विशेष रूप से जब आपका SQL सर्वर अपने बॉक्स पर रहता है। हम एएसपी.नेट के अंतर्निर्मित कैशिंग का उपयोग कर रहे हैं लेकिन वेग में जाने की उम्मीद है। कई वेब सर्वर एक एसक्यूएल क्लस्टर से बात करते हैं और कैशिंग वास्तव में स्केलेबिलिटी और एसक्यूएल लोड को कम करने में मदद करता है।

4

एक और लाभ यह भी हो सकता है कि SQL सर्वर स्केल करने के लिए महंगा है जबकि एक नया वेब/कैशिंग सर्वर जोड़ना सस्ता हो सकता है।

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

यदि आवश्यक हो तो आप मार्कअप भी स्टोर कर सकते हैं (आउटपुट कैशिंग)।

एक दिन कैशिंग का उपयोग करके हम तनाव 800 से भी अधिक के लिए परीक्षण मैं दृढ़ता से यह उपयोग करने की अनुशंसा करते हुए 150 समवर्ती सत्र को संभालने में सक्षम होने से हमारी साइट में ले जाया गया !!

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