2009-08-20 12 views
13

स्टोर करने के लिए मैं कई विभागों और श्रेणियों के साथ एक वेब-स्टोर बना रहा हूं। वे हमारे डेटाबेस में संग्रहीत हैं और अक्सर उपयोग किया जाता है।Asp.net - कैशिंग बनाम स्टेटिक वेरिएबल एक डिक्शनरी

हम यूआरएल पुनर्लेखन का उपयोग कर रहे हैं, इसलिए दुकान के भीतर लगभग हर अनुरोध एक लुकअप उत्पन्न करता है। मुख्य स्टोर और विभाग पृष्ठों के लिए मेनू उत्पन्न करने के लिए हमें अक्सर डेटा पर फिर से प्रयास करने की आवश्यकता होती है।

यह जानकारी अक्सर परिवर्तन नहीं होगा तो मैं सोच रहा हूँ कि मैं सूचना पुनर्प्राप्ति तेजी लाने के लिए एक शब्दकोश में डेटाबेस लोड करना चाहिए।

मुझे पता है कि मानक अभ्यास अनुप्रयोग कैश में डेटा लोड करना है, हालांकि मुझे लगता है कि कैशिंग के दौरान होता है और कुछ बड़े डेटा-स्ट्रक्चर के लिए सीरियलाइजेशन का कुछ स्तर होता है, मुझे लगता है कि ओवरहेड महत्वपूर्ण होगा।

इस पर मेरे आवेग संबंधित वर्गों में से एक में एक स्थिर चर में शब्दकोश डाल करने के लिए है। हालांकि मैं इस पर कुछ इनपुट इनपुट प्राप्त करना चाहता हूं। क्या मैं सोच रहा हूं कि यह विधि तेज होगी? क्या यह भयानक अभ्यास है? क्या कोई बेहतर तरीका है कि मैं याद कर रहा हूं?

मैं इस पर ज्यादा जानकारी मिल नहीं कर पा रहे हैं और मैं वास्तव में किसी भी जानकारी है कि आप साझा कर सकते हैं की सराहना करेंगे। धन्यवाद!

उत्तर

19

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

केवल अन्य उल्लेख के लायक बात यह है कि क्या आप इस संग्रह के लिए बहु-क्रम का उपयोग के बारे में सोचना बनाना है। यदि आप ठीक से लॉक नहीं करते हैं तो आप कुछ गंभीर मुद्दों के साथ समाप्त होने जा रहे हैं

+0

बहुत बहुत धन्यवाद- यही वही है जो मुझे जानने की जरूरत है। –

+0

मदद करने में खुशी :) – LorenVS

+4

बस यह सुनिश्चित करें कि, यदि आप एप्लिकेशन या कैश का उपयोग कर रहे हैं, तो वे प्रति मशीन हैं। यदि आपके पास एकाधिक मशीनें हैं (उदाहरण के लिए वेब फार्म) तो आप परेशानी में हैं .. और आपको एक स्केलेबल कैशिंग समाधान, जैसे कि माइक्रोसॉफ्ट वेग या मेमकैचडी ('डी' डेमन के लिए है) का उपयोग करने की आवश्यकता होगी। –

3

memcached आपका मित्र है! किसी भी विचार कितना बड़ा अपने शब्दकोश आवेदन कैश में किया जाएगा (लेकिन overkill हो सकता है आप बाहर स्केलिंग नहीं कर रहे हैं)

? मैं एक अच्छा पहला विकल्प के रूप में सिफारिश करने के लिए लुभाना होगा।

+0

मैं कुछ दर्जन विभागों और कुछ सौ श्रेणियों को संबंधित जानकारी के साथ देख रहा हूं ... इसलिए आकार के अनुसार यह बहुत बुरा नहीं होना चाहिए। डेटाबेस स्तर कैशिंग का उपयोग करने के साथ मेरा एकमात्र हिचकिचाहट यह है कि प्रत्येक कॉल के साथ मुझे अभी भी डेटाबेस द्वारा उनके संबंधित प्रकारों में लौटाई गई वस्तुओं को परिवर्तित करना होगा। यूआरएल जैसे कुछ संबंधित डेटा भी हैं जिन्हें मैं प्रीकंप्यूट करने की उम्मीद कर रहा था। यह देखते हुए कि मुझे अक्सर इन वस्तुओं की लंबी सूची प्राप्त करने की आवश्यकता होगी, मैं सोच रहा था कि मुझे लाइन को और आगे कैश करना चाहिए। यह अभी भी निश्चित रूप से एक अच्छा विकल्प है और मैं वास्तव में जानकारी की सराहना करता हूं! –

4

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

तो, मेरा जवाब है - कैश का उपयोग करें और देखें कि यह कैसे काम करता है।

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