2009-07-14 14 views
15

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

+0

+1 उत्कृष्ट प्रश्न – Tyler

उत्तर

13

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

+0

+1 अच्छा जवाब। –

+0

आप एक दिए गए कनेक्शन को कब बंद करेंगे? – Tyler

+1

संक्षेप में, जैसे ही आप इसके साथ काम कर रहे हैं, डेटाबेस कनेक्शन बंद करें। मेरे वर्तमान एप्लिकेशन में, हमारे पास एक सुंदर साफ पृष्ठ पीढ़ी की प्रक्रिया है: हम डेटाबेस से हमें आवश्यक सभी डेटा लेते हैं, इसे उस रूप में मालिश करते हैं जिसकी हमें आवश्यकता होती है, इसे टेम्पलेट ऑब्जेक्ट में फेंक दें, डेटाबेस_ से डिस्कनेक्ट करें, और फिर वास्तव में जेनरेट करें और पेज के लिए एचटीएमएल आउटपुट। –

2

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

यदि आपके पास php.ini फ़ाइल में संसाधन सीमाएं सेट नहीं हैं, तो यह बुरा हो सकता है, अनुरोध हमेशा के लिए लाइव हो सकता है और कनेक्शन को कभी बंद नहीं कर सकता है।

यदि आपके पास मध्यम से उच्च ट्रैफ़िक साइट है, तो आपको mysql_pconnect का उपयोग करने के बारे में सोचना चाहिए, इसलिए हमेशा एक कनेक्शन खुला रहता है और आपको प्रत्येक अनुरोध पर एक खोलने के ऊपरी हिस्से की आवश्यकता नहीं होती है।

1

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

यह मामला होने पर, आपको अपने प्रश्नों को चलाने से पहले कनेक्शन खोलना चाहिए। यदि आपके पास बड़ी संख्या में प्रश्न हैं, तो संभवतः प्रक्रिया में देर से अपना कनेक्शन खोलने का प्रयास करें।

बेहतर है कि एकाधिक कनेक्शन खोलने और बंद करने की तुलना में लंबी अवधि के लिए एक कनेक्शन खुला रहता है।

+0

हाँ, कनेक्शन खोलना महंगा है। –

0

यदि आपका कोड प्रदर्शन-संवेदनशील है, तो पसंदीदा तकनीक कनेक्शन पूलिंग और/या लगातार प्रक्रियाओं के कुछ रूपों का उपयोग करने के लिए होती है ताकि आप एक डेटाबेस कनेक्शन खोल सकें और फिर उस कनेक्शन का उपयोग कई पेज अनुरोधों के बजाय कर सकें प्रत्येक अनुरोध के लिए एक नया कनेक्शन खोलने से पहले एक की आवश्यकता है।

यदि आपका कोड प्रदर्शन-संवेदनशील नहीं है, तो यह वास्तव में किसी भी तरह से कोई फर्क नहीं पड़ता।

किसी भी तरह से, जब किसी विशिष्ट अनुरोध को संभालने के दौरान डेटाबेस का उपयोग किया जाता है तो सटीक समय चिंता का कारण नहीं है।

मेरा व्यक्तिगत अभ्यास एक नया हैंडलर प्रक्रिया उत्पन्न होने पर तुरंत डेटाबेस कनेक्शन खोलना है, फिर सत्यापित करें कि जब भी मैं प्रत्येक अनुरोध को संसाधित करना शुरू करता हूं तब भी यह जीवित है। शेष कोड तब यह मानने के लिए स्वतंत्र होता है कि जब उपयोगकर्ता प्रतिक्रिया के लिए प्रतीक्षा कर रहा है तो कनेक्ट होने की लागत के बिना कनेक्शन उपलब्ध हो जाता है।

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