2012-07-16 12 views
5

मेरे पास कुछ साधारण आंकड़ों को स्टोर करने के लिए एक साधारण मोंगोडीबी कनेक्शन के लिए Django के विचारों में एक db = pymongo.Connection() कॉल है।django + Pymongo पूलिंग का सबसे अच्छा अभ्यास?

इसे ऑटो समर्थन मोंगोडीबी कनेक्शन पूलिंग करने का सबसे अच्छा अभ्यास क्या है?

मुझे end_request() कोड कहां रखने की आवश्यकता है?

मैं कनेक्शन के दौरान max_pool_size पैरामीटर कैसे चुनूं?

उत्तर

7

How does connection pooling work in PyMongo?

हर कनेक्शन उदाहरण में निर्मित कनेक्शन पूलिंग गया है। डिफ़ॉल्ट रूप से, प्रत्येक थ्रेड को अपना पहला सॉकेट अपने पहले ऑपरेशन पर आरक्षित करता है। उन सॉकेट तब तक आयोजित किए जाते हैं जब तक कि end_request() को उस थ्रेड द्वारा नहीं कहा जाता है।

कॉलिंग end_request() सॉकेट को पूल में वापस करने की अनुमति देता है, और नई सॉकेट बनाने के बजाय अन्य धागे द्वारा उपयोग किया जा सकता है। कई धागे के साथ या लंबे समय तक चलने वाले धागे वाले अनुप्रयोगों के लिए इस विधि का न्यायसंगत उपयोग महत्वपूर्ण है जो PyMongo संचालन के लिए कुछ कॉल करता है।

वैकल्पिक रूप से, auto_start_request = गलत के साथ बनाया गया कनेक्शन सभी धागे के बीच सॉकेट (सुरक्षित रूप से) साझा करेगा।

मुझे लगता है कि यह आपके पास मौजूद एप्लिकेशन के प्रकार और कनेक्शन पर कितने समय तक पहुंच जाएगा। end_request पर कॉल करने का विचार लंबे समय तक सॉकेट पर लंबे समय तक चलने वाले अनुरोधों के साथ मदद करता है और कई सॉकेट बनने का कारण बनता है। यदि कोई अनुरोध कनेक्शन को तब रिलीज़ कर सकता है जब इसे अब इसकी आवश्यकता नहीं है, तो सॉकेट को अन्य अनुरोधों के लिए पुनर्स्थापित किया जा सकता है।

यदि वे तेज़ अनुरोध हैं, तो मुझे लगता है कि auto_start_request=False सॉकेट का पुन: उपयोग करके काम करता है।

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

+0

हाय @jdi, उत्तर के लिए धन्यवाद, क्या आप अपनी टिप 'max_pool_size' पैरामीटर के साथ साझा कर सकते हैं? – est

+1

आपके लिए एक कनेक्शन की संख्या को प्रबंधित करने का एक तरीका है जो एक कनेक्शन की अनुमति देगा। यदि आपका ऐप सिंगल थ्रेडेड है तो यह पूल में केवल 1 का उपभोग करेगा। यदि यह एक भारी थ्रेडेड ऐप है, तो प्रति थ्रेड एक होगा और आप यह सोचने की क्षमता चाहते हैं कि यह एक सर्वर पर कितनी अनुमति देगा – jdi

+1

PyMongo 3 में, "auto_start_request" विकल्प चला गया है। – Mithril

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