2012-06-12 16 views
6

मैं अपाचे + mod_wsgi के शीर्ष पर PostgreSQL से जुड़े Django के मानक (जैसा कि गैर-रोल के विपरीत) संस्करण का उपयोग कर रहा हूं। यह सेटअप मोंगोडीबी से भी जुड़ता है (कुछ डेटा बाहरी रूप से सहेजा जाता है)। अभी मुझे प्रत्येक Django अनुरोध के लिए एक नया मोंगोडीबी कनेक्शन बनाना है, और इसे सभी कार्यों के लिए कॉल स्टैक के साथ पास करना है जिसके लिए मोंगोडीबी तक पहुंच की आवश्यकता है। क्या अनुरोधों के बीच कनेक्शन कैश करने का कोई तरीका है?Django में कैशिंग मोंगोडीबी कनेक्शन

संपादित

निन्दा का खतरा कम, होगा इस मामले में एक वैश्विक चर काम करता है?

+0

स्पष्टीकरण के लिए, मुझे लगता है कि आप django पक्ष पर कैशिंग का मतलब है, क्या यह सही है? –

+0

हां। हर अनुरोध पर Django में एक नया कनेक्शन बनाने से बचना चाहते हैं। –

उत्तर

4

वहाँ कई समझा mod_wsgi साथ कैसे pymongo काम (या असफल) कर सकते हैं तरीके हैं, यहाँ का सुझाव दिया: http://api.mongodb.org/python/current/faq.html?highlight=wsgi#does-pymongo-work-with-mod-wsgi

इसके अलावा आप यहाँ वर्णित की तरह, पूलिंग समाधान किसी तरह का उपयोग कर सकते हैं: http://www.mongodb.org/display/DOCS/Notes+on+Pooling+for+Mongo+Drivers

एक परियोजना कि मुझे पता है कि पहले से ही पूलिंग है MongoEngine, यह एक बहुत ही सरल ओआरएम है जो दृश्यों के पीछे पिमोंगो का उपयोग करता है। आप उपरोक्त pymongo faq समाधान के साथ इसे एक साथ देखना चाह सकते हैं।

+0

मोंगोइंजिन एक विकल्प नहीं है क्योंकि ए) जहां तक ​​मैं समझता हूं, यह बहुत स्थिर नहीं है, और बी) मुझे मौजूदा एसक्यूएल बैकएंड को त्यागने की आवश्यकता है। मुझे एक संकर समाधान की आवश्यकता है। –

+5

मोंगोइंजिन जो मैंने अनुभव किया उससे काफी स्थिर है। और जब तक आप चाहें, तब तक आपको कुछ भी त्यागने की आवश्यकता नहीं होती है। – Evgeny

+0

सी एक्सटेंशन के साथ ज्ञात समस्या के बारे में प्रमुखों के लिए धन्यवाद। हालांकि इसे वास्तव में कैशिंग कनेक्शन के साथ नहीं करना है। पूलिंग भी एक विकल्प है, लेकिन केवल तभी अनुरोध है जब अनुरोधों पर कनेक्शन का पुन: उपयोग करना संभव हो, जो अभी भी मुझे स्पष्ट नहीं है। –

2

आप कहीं भी मोंगोडीबी कनेक्शन को तुरंत चालू कर सकते हैं और इसे हर बार pymongo.connection.Connection() पर कॉल करने के विरोध में आयात कर सकते हैं। या आप ऐसा करने के लिए सिंगलटन बना सकते हैं। settings.py में ऐसा कुछ।

class ConnectionSingleton(object): 
    """Represents a MongoDB connection""" 
    conn=None 
    def __new__(cls,*args,**kwds): 
     if cls.conn is None: 
      cls.conn=pymongo.connection.Connection() 
     return cls.conn 

क्या यह आपकी समस्या का समाधान नहीं करेगा?

+1

चूंकि पिमोंगो का दावा है कि यह थ्रेड सुरक्षित है और इस बिंदु पर कनेक्शन कनेक्शन के अंदर कनेक्शन पूलिंग करता है ऐसा लगता है कि मैं केवल दृश्य के अंदर कनेक्शन घोषित कर सकता हूं, या वास्तव में सेटिंग फ़ाइल में, और यह "केवल काम" करेगा, भले ही एक्सेस किया जाए wsgi के तहत कई धागे द्वारा। पिमोंगो का उदाहरण प्रोजेक्ट ऐसा ही प्रतीत होता है: https://github.com/mdirolf/DjanMon/blob/master/status/views.py –

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