मैं हाल ही में कई अलग-अलग ग्राहकों द्वारा कई लगातार कनेक्शनों की सेवा के लिए टोरनाडो वेब ढांचे की खोज कर रहा हूं।टोरनाडो वेब फ्रेमवर्क MySQL कनेक्शन हैंडलिंग
मेरे पास एक अनुरोध हैंडलर है जो मूल रूप से एक आरएसए एन्क्रिप्टेड स्ट्रिंग लेता है और इसे डिक्रिप्ट करता है। डिक्रिप्ट टेक्स्ट एक एक्सएमएल स्ट्रिंग है जिसे मैंने लिखा है एक एसएक्स दस्तावेज़ हैंडलर द्वारा पार्स किया जाता है। सब कुछ पूरी तरह से ठीक काम करता है और निष्पादन समय (प्रति HTTP अनुरोध) लगभग 100 मिलीसेकंड (डिक्रिप्शन और पार्सिंग के साथ) था।
एक्सएमएल में उपयोगकर्ता का उपयोगकर्ता नाम और पासवर्ड हैश है। मैं यह सत्यापित करने के लिए एक MySQL सर्वर से कनेक्ट करना चाहता हूं कि उपयोगकर्ता नाम एप्लिकेशन द्वारा प्रदान किए गए पासवर्ड हैश से मेल खाता है।
जब मैं मूल रूप से निम्न कोड जोड़ें:
conn = MySQLdb.connect (host = "192.168.1.12",
user = "<useraccount>",
passwd = "<Password>",
db = "<dbname>")
cursor = conn.cursor()
safe_username = MySQLdb.escape_string(XMLLoginMessage.username)
safe_pass_hash = MySQLdb.escape_string(XMLLoginMessage.pass_hash)
sql = "SELECT * FROM `mrad`.`users` WHERE `username` = '" + safe_username + "' AND `password` = '" + safe_pass_hash + "' LIMIT 1;"
cursor.execute(sql)
cursor.close()
conn.close()
समय यह निष्पादित करने के लिए HTTP अनुरोध 4 तक चढ़ जाता है लेता है - 5 सेकंड! मेरा मानना है कि यह माइस्क्ल डेटाबेस डेटाबेस से कनेक्ट होने में लगने वाले समय में किया जाता है।
मेरा सवाल यह है कि मैं इसे कैसे गति दे सकता हूं? क्या मैं वैश्विक दायरे में MySQL कनेक्शन घोषित कर सकता हूं और अनुरोधकर्ता हैंडलर में नया कर्सर बनाकर एक्सेस कर सकता हूं, या टोरनाडो के असीमित डिजाइन के कारण यह समवर्ती मुद्दों में भाग लेगा?
असल में, मुझे एक MySQL सर्वर को हर एचटीपी अनुरोध के लिए नया कनेक्शन क्यों नहीं लेना पड़ सकता है, इसलिए इसे लागू करने के लिए कई सेकंड के बजाय केवल एक सेकंड का अंश लेता है।
और कृपया ध्यान रखें, एसक्यूएल सर्वर तूफान वेब सर्वर उदाहरण
अद्यतन
मैं बस एक साधारण MySQL क्वेरी एक प्रोफाइलर के माध्यम से एक ही कोड के नीचे भाग गया, के रूप में एक ही भौतिक मशीन पर वास्तव में है।
'कनेक्शन.py' init फ़ंक्शन को अकेले निष्पादित करने के लिए 4.944 सेकेंड लग गए। यह सही प्रतीत नहीं होता है, है ना?
अद्यतन 2
मुझे लगता है कि एक कनेक्शन (या एक बहुत ही सरल डीबी Conn पूल के साथ भी कुछ) के साथ चल काफी तेजी से प्रवाह मैं प्रति बवंडर वेब सर्वर उदाहरण की उम्मीद कर रहा हूँ संभालने के लिए किया जाएगा।
1,000 ग्राहकों एक प्रश्न का उपयोग करने की जरूरत है, विशिष्ट क्वेरी बार सेकंड के हजारों में जा रहा है, unluckiest ग्राहक केवल एक दूसरे प्रतीक्षा करने के लिए डेटा पुनः प्राप्त करने के लिए होगा।
5 सेकंड डेटाबेस कनेक्शन से संबंधित हो सकते हैं, न कि वास्तविक क्वेरी, यदि आप टॉरनाडो का उपयोग कर रहे हैं तो आप वैश्विक स्तर पर डीबी से कनेक्शन कर सकते हैं और फिर अनुरोध के साथ डीबी पैरामीटर पास कर सकते हैं। – chuseuiti