18

ठीक है, मुझे लगता है कि मैं यहाँ एक बहुत ही बुनियादी संदेह है:Google ऐप इंजन: मेमकेचे या स्टेटिक चर?

मैं GAE (जावा) पर कोई ऐप विकासशील रहा हूँ और डेटासंग्रह कि एक बहुत संस्थाओं के रिटर्न के लिए एक क्वेरी प्रदर्शन कर, तो मैं यह कैश करने के लिए की जरूरत है । मैं memcache का उपयोग कर रहा था और यह बहुत अच्छा काम कर रहा था, लेकिन अगर मैं एक स्थिर चर में इकाइयों की सूची रखता हूं, तो पूरा अनुरोध memcache का उपयोग करने से तेज़ जितना तेज़ हो जाता है। मुझे लगता है कि ऐसा इसलिए है क्योंकि मैं हर समय इकाइयों को निराश नहीं कर रहा हूं।

memcache पर स्थिर स्थिर चर का उपयोग करने की क्या कमी होगी? मुझे नहीं पता कि क्लाउड में मेरे आवेदन के कई उदाहरण हो सकते हैं, और इस प्रकार मेरे स्थिर चर के कई उदाहरण हैं?

उन संस्थाओं की सूची जो मैं कैश करने की कोशिश कर रहा हूं वे पिछले सप्ताह के सर्वश्रेष्ठ (अधिक स्कोर) पद हैं। मैं उस सूची को लेता हूं और 5 यादृच्छिक पदों का चयन करता हूं और उन्हें कुछ पृष्ठों में दिखाता हूं।

सहायता के लिए धन्यवाद!

+3

मैंने यह पता लगाने के लिए एक प्रयोग शुरू किया कि जीएई आपको कितनी बार एक नया जेवीएम देता है: http://thrdcntr.appspot.com/। जाहिर है, जब भार अधिक होता है तो वे नए वीएम (उसी वीएम में नए धागे के विपरीत) उत्पन्न करते हैं। उन्होंने कुछ समय बाद अप्रयुक्त वीएम को भी बंद कर दिया (लेकिन अक्सर नहीं)। – Thilo

उत्तर

16

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

आप उल्लेख करते हैं कि आपके पास पोस्ट की एक सूची है और आप उपयोगकर्ताओं को दिखाने के लिए यादृच्छिक रूप से 5 चुनते हैं। क्या इससे कोई फर्क पड़ता है कि 2 अलग-अलग उपयोगकर्ता 5 का एक अलग सेट देखते हैं? यदि आप किसी भी तरह यादृच्छिक चुन रहे हैं, तो इससे कोई फर्क नहीं पड़ता। फिर आप memcache में पोस्ट की पूरी सूची संग्रहीत कर सकते हैं, और 5 यादृच्छिक लोगों को memcache से खींच सकते हैं और उन्हें एक स्थिर चर में स्टोर कर सकते हैं।

दूसरा, आप वास्तव में क्या याद कर रहे हैं, और आप इसे कैसे खींच रहे हैं? क्या आप memcache में पूर्ण पदों का पूरा समूह संग्रहीत कर रहे हैं, उन्हें सब प्राप्त कर रहे हैं, फिर 5 चुन रहे हैं? शायद आप पोस्ट की सूची डाउनलोड कर सकते हैं, 5 का चयन कर सकते हैं, और केवल 5 आपको चाहिए? यदि आपको लगता है कि यह निराशाजनक है जो आपको धीमा कर रहा है, तो इससे मदद मिल सकती है। क्या आप उन्हें प्राप्त करने के बाद पदों पर कोई प्रसंस्करण कर रहे हैं? यदि हां, तो क्या उस प्रसंस्करण के परिणाम कैश किए जा सकते हैं?

+0

हां: मैं पोस्ट की पूरी सूची को याद कर रहा हूं और उन्हें सब कुछ प्राप्त कर रहा हूं, फिर 5 चुन रहा हूं। अगर मैं केवल 5 चाहता हूं तो यह तेज़ होगा (और स्मार्ट!)। जैसा कि आपने कहा था, इससे कोई फर्क नहीं पड़ता कि 2 अलग-अलग उपयोगकर्ता 5 का एक अलग सेट देखते हैं।वास्तव में, यदि कोई उपयोगकर्ता पृष्ठ को फिर से लोड करता है, तो सेट अलग होगा, तो शायद मैं स्थिर var का उपयोग कर सकता हूं? यदि सूची में कई अलग-अलग उदाहरण हैं तो मुझे वास्तव में परवाह नहीं है। धन्यवाद पीटर !! – Damian

+0

यदि आप प्रदर्शन के हर अंतिम बिट को संभवतः प्राप्त करने का प्रयास करना चाहते हैं, तो आप कैश के दो स्तरों को आजमा सकते हैं। जब कोई अनुरोध आता है, तो आप पहले यह देखने के लिए जांच करेंगे कि क्या आपके स्थिर चर कैश में वैध मान है, और यदि नहीं, तो आप memcache की जांच करेंगे। यदि memcache में कुछ भी मान्य नहीं है, तो आप डेटास्टोर से डेटा ले लेंगे, और memcache और आपके स्थिर चर दोनों को पॉप्युलेट करेंगे। –

+1

एक आखिरी बात - यह एक ऑपरेशन आपके कुल पृष्ठ लोड समय को कितना प्रभावित करता है? यदि आपको यह ऑपरेशन 10 एमएस से 5 एमएस तक जाने के लिए मिलता है, तो यह अच्छा है, लेकिन अगर आपके पास 300 एमएमएस लेने वाला कोई अन्य ऑपरेशन है, तो आपको पहले अपनी ऊर्जा पर ध्यान देना चाहिए :) –

3

हाँ, इस बात की कोई गारंटी नहीं है कि इंटरनेट पर विभिन्न उपयोगकर्ताओं के लिए आपका उदाहरण समान होगा। आप लगातार खराब स्थिति में इसे स्थिर में पढ़ सकते हैं। Memcache उपलब्ध होने की उच्च गारंटी है। मैं सिर्फ memcache का उपयोग करता हूं, और आपके ऐप को भविष्य में कोई भी स्केल समस्या नहीं होनी चाहिए।

6

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

लेकिन, आप कैश परत के रूप में स्थैतिक चर का उपयोग करने में सक्षम होना चाहिए, बशर्ते आपके पास कहीं और से डेटा लोड करने का कोई तरीका हो।

मैं मेमोरी उपयोग के साथ ओवरबोर्ड पर जाने की भी कोशिश नहीं करता हूं, इस पर एक कोटा होना चाहिए कि आप कितनी मेमोरी का उपयोग कर सकते हैं।