2009-08-29 12 views
5

मेरे पास निम्न विचार था: कहें कि हमारे पास django का उपयोग करके लिखा गया एक वेबपैप है जो किसी प्रकार का बुलेटिन बोर्ड मॉडल करता है। इस बोर्ड में कई धागे हैं लेकिन उनमें से कुछ प्रति घंटे अधिकतर पोस्ट/दृश्य प्राप्त करते हैं। थ्रेड पेज प्रत्येक उपयोगकर्ता के लिए थोड़ा अलग दिखते हैं, इसलिए आप प्रस्तुत पृष्ठ को कैश नहीं कर सकते हैं और प्रस्तुत पृष्ठ के केवल कुछ हिस्सों को कैशिंग भी एक विकल्प नहीं है।अनुरोधों के बीच Django में वस्तुओं के लिए ऑब्जेक्ट स्टोर

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

प्रश्न: क्या मैं स्मृति भंडारण में धारावाहिकता (इसलिए कोई serialize-> memcached) के बिना लगातार बना सकता हूं? जैसा कि मैं इसे समझता हूं, डब्लूएसजीआई अनुप्रयोग (जैसे Django) अनुरोधों के बीच बंद किए बिना निरंतर प्रक्रिया में चलाते हैं, इसलिए सिद्धांत में यह संभव होना चाहिए। क्या कोई एपीआई मैं उपयोग कर सकता हूं? यदि नहीं: किसी भी बिंदु को देखने के लिए?

/संपादित 1: मुझे पता है कि "लगातार" का एक अलग अर्थ होता है, लेकिन इस मामले में मेरा सख्ती से "अनुरोध के बीच में" मतलब है।

+4

क्रमबद्धता के साथ क्या गलत है? क्या आपने अपना आवेदन प्रोफाइल किया है? डेटाबेस I/O बाधा है? –

उत्तर

5

एक उत्पादन डब्लूएसजीआई पर्यावरण में, आपके पास एक ही समय में कई कार्यकर्ता अनुरोधों की सेवा करने की प्रक्रिया होगी। इन कार्यकर्ताओं की प्रक्रिया समय-समय पर पुनर्नवीनीकरण की जाएगी, जिसका अर्थ है कि स्थानीय स्मृति वस्तुएं खो जाएंगी।

लेकिन अगर आपको वास्तव में इसकी आवश्यकता है (और सुनिश्चित करें कि आप करते हैं), तो मेरा सुझाव है कि आप Django के caching framework में देखें, स्थानीय-मेमोरी कैशिंग देखें। इसके अलावा, sessions पर एक नज़र डालें।

लेकिन यहां तक ​​कि स्थानीय-मेमोरी कैशिंग भी क्रमबद्धता का उपयोग करता है (pickle के साथ)। कस्टम कैश बैक-एंड लागू करके सीरियलाइजेशन के बिना स्थानीय-मेमोरी कैश को कार्यान्वित करना आसान है (the docs देखें)। आप serialization के बिना कैश बनाने के लिए locmem.py में कोड का उपयोग शुरुआती बिंदु के रूप में कर सकते हैं।

लेकिन मुझे संदेह है कि आप यहां कुछ समय से पहले अनुकूलन कर रहे हैं?

+0

मैंने पढ़ा है कि सत्र में बड़ी वस्तुओं को रखना एक बुरा विचार है, क्या कुछ प्रकार की नरम आकार सीमा है जहां आपको सत्र से बचने और कैश का उपयोग करना चाहिए? कैश में संग्रहीत किसी विशेष ऑब्जेक्ट के साथ आप सत्र को कैसे जोड़ेंगे? यदि आपके पास एक एसोसिएशन था और सत्र समय-समय पर समाप्त हो गया तो आप कैश से संबंधित ऑब्जेक्ट को कैसे साफ़ करेंगे? – bischoffingston

0

स्मृति भंडारण में एक निरंतर नहीं है, इसलिए नहीं।

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

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

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

+0

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

+0

ठीक है, अगर डिस्क पर लिखना बाधा है तो आप यहां गहरी गंदगी में हैं। ;) लेकिन पढ़ने के लिए आपको याद रखना होगा कि जब आप नए प्रतिक्रिया लिखे जाते हैं तो आप अमान्य हो जाते हैं। –

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