साझा कैश - अमान्य सर्वोत्तम अभ्यास


14

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

आवश्यक शर्तें

  • दूरस्थ मेमेकटेड सर्वर (कई अनुप्रयोगों के लिए कैश के रूप में सेवारत)
  • सभी सर्वर azure (आत्मीयता क्षेत्रों, समान डेटा केंद्रों) द्वारा होस्ट किए जाते हैं
  • कैश ऑब्जेक्ट का आकार 200 बाइट्स से लेकर 50 किलोबाइट तक होता है


दृष्टिकोण 1 (कैश asap में स्टोर)

  1. ऑब्जेक्ट A बना है -> डेटाबेस में स्टोर और कैश में स्टोर
  2. ऑब्जेक्ट क्लाइंट द्वारा अनुरोधित -> अस्तित्व के लिए कैश की जांच करें, अन्यथा डेटाबेस से प्राप्त करें और कैश में स्टोर करें
  3. ऑब्जेक्ट A अपडेट हो जाता है -> डेटाबेस में स्टोर, कैश में स्टोर

दृष्टिकोण 1 अधिक सीधा लगता है। अगर कुछ बनाया है, कैश asap में डाल दिया। भले ही किसी को इसकी आवश्यकता होगी।


दृष्टिकोण 2 (आलसी कैश स्टोर)

  1. ऑब्जेक्ट A बना है -> डेटाबेस में स्टोर
  2. ऑब्जेक्ट क्लाइंट द्वारा अनुरोधित -> अस्तित्व के लिए कैश की जांच करें, अन्यथा डेटाबेस से प्राप्त करें और कैश में स्टोर करें
  3. ऑब्जेक्ट ए अद्यतन हो जाता है -> डेटाबेस में स्टोर, कैश में कुंजी हटाएं

दृष्टिकोण 2 अधिक स्मृति-जागरूक लगता है। इस दृष्टिकोण में केवल अनुरोधित आइटम कैश में जाते हैं।


प्रश्न 1: प्रदर्शन के मद्देनजर, एक बेहतर तरीका क्या होगा? मेमोरी और न ही सीपीयू की अभी तक गिनती नहीं है।

प्रश्न 2: क्या मेरे विचार एक प्रकार की समयपूर्व अनुकूलन हैं?

प्रश्न 3: कोई अन्य विचार? अन्य दृष्टिकोण?

जवाबों:


12
  1. निर्भर करने योग्य है, सिवाय इसके कि यह निर्भर करता है। बहुत सारे कारक हैं जो यह निर्धारित करेंगे कि आपके मामले में कौन सा दृष्टिकोण सबसे अच्छा होने वाला है, उदाहरण के लिए: क्या निर्मित वस्तुओं को बनाए जाने के तुरंत बाद पुनः प्राप्त करना सामान्य है? एक्सेस करने के लिए अपडेट का अनुपात क्या है?
  2. पुन। निर्णय लेने के लिए आपको कैशे की आवश्यकता होती है: यदि आप बिना डेटा के अनुकूलन कर रहे हैं, तो हाँ, यह तकनीकी रूप से समयपूर्व अनुकूलन है। मैं कहता हूं कि तकनीकी रूप से अनुभव / पारंपरिक ज्ञान आपको बता सकता है कि आपको किसी प्रकार के कैश की आवश्यकता है। पुन। यह तय करना कि कैश कैसे काम करेगा: हाँ, यह निश्चित रूप से समयपूर्व अनुकूलन है।
    • अनुकूलन अक्सर सबसे अच्छा / सबसे इष्टतम समाधान खोजने के बारे में नहीं है। इसे निम्नानुसार जाना चाहिए:
      1. सिस्टम में अड़चनों का पता लगाएं।
      2. खोजें कि आप कम से कम काम के साथ सबसे बड़ा अंतर कहां बना सकते हैं।
      3. कम से कम काम करो!
      4. क्या यह अभी तक काफी तेज है? यदि नहीं, तो # 1 पर जाएं।
      5. किया हुआ!
    • ईमानदारी से, न तो दृष्टिकोण के बारे में आप ध्वनि जटिल वर्णन करते हैं। दोनों को क्यों लागू नहीं किया गया और देखें कि सबसे अच्छा काम कौन करता है?
    • चरण 2 में दृष्टिकोण # 2 को "ऑब्जेक्ट ए अपडेट किया गया -> डेटाबेस में स्टोर, कैश में एंट्री अपडेट" में बदला जा सकता है।

Baqueta, आपके उत्तर के लिए धन्यवाद। मैं इसकी सराहना करता हूं।
lurkerbelow

@lurkerbelow मदद करने के लिए खुशी है।
वॉनथॉन्ड्रोइड

2

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

Q1। दृष्टिकोण 2 प्रदर्शन के मामले में बेहतर होगा क्योंकि यह ऑब्जेक्ट को मेमेकैच्ड नहीं भेजता है, हालांकि प्रदर्शन में सुधार बहुत कम है।

Q2। यह कहना कठिन है। मान लें कि आप अड़चन जानते हैं और दृष्टिकोण का मसौदा तैयार करते हैं तो यह समय से पहले नहीं होगा।

Q3। अन्य दृष्टिकोण जैसे कैश केवल मेमेकैच्ड में हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.