2009-01-16 8 views
5

मुझे यह जानने में दिलचस्पी है कि डाटाबेस कनेक्शन कैसे संभालते हैं जो कनेक्शन शुरू करने वाली इकाई द्वारा स्पष्ट रूप से बंद नहीं होते हैं।डाटाबेस और कनेक्शन

  1. कहें कि मेरे पास एक डेटाबेस है जो एक समय में केवल 2 समवर्ती कनेक्शन स्वीकार कर सकता है। मेरे पास कोड का एक टुकड़ा है जो एक कनेक्शन खोलता है और इसे कभी बंद नहीं करता है। कोड का यह टुकड़ा हमेशा के लिए चलता है, लेकिन यह केवल अपने जीवनकाल में कनेक्शन का उपयोग करता है लेकिन कनेक्शन ऑब्जेक्ट कभी भी गुंजाइश से बाहर नहीं जाता है, इसलिए यह कचरा नहीं है। मान लें कि मैं इस कोड के 2 उदाहरण चलाता हूं। क्या इसका मतलब यह है कि जब तक प्रोग्राम समाप्त नहीं हो जाता है या कनेक्शन के समय (निष्क्रियता के कारण) डेटाबेस अब और कनेक्शन स्वीकार नहीं कर सकता है?

  2. उपरोक्त परिदृश्य में यदि कनेक्शन ऑब्जेक्ट कचरा एकत्रित किया गया है, तो क्या कनेक्शन स्वचालित रूप से समाप्त हो गया है या क्या यह उस डेटाबेस ड्राइवर पर निर्भर करता है जिसका मैं उपयोग कर रहा हूं या जब तक मैं इसे स्पष्ट रूप से बंद नहीं करता तब तक कनेक्शन समाप्त नहीं होता है?

  3. यदि मैं कोड के टुकड़े में कनेक्शन खोलता हूं और मैं कनेक्शन को स्पष्ट रूप से बंद नहीं करता हूं, लेकिन प्रोग्राम समाप्त हो जाता है तो डेटाबेस उस कनेक्शन को पुनः प्राप्त कैसे करता है?

उत्तर

4

डेटाबेस कनेक्शन के लिए अंतर्निहित प्रोटोकॉल आम तौर पर टीसीपी/आईपी आधारित होता है। कनेक्शन को कई तरीकों से समाप्त किया जा सकता है:

  1. सर्वर इसे सुंदरता से बंद कर देता है और ग्राहक से एक पावती प्राप्त करता है;
  2. क्लाइंट बंद हो जाता है और सर्वर से एक पावती प्राप्त करता है;
  3. कनेक्शन समय बाहर। क्लाइंट और सर्वर दोनों को अलग-अलग अपने ऑपरेटिंग सिस्टम द्वारा बताया जाता है कि कनेक्शन बंद कर दिया गया है;
  4. कनेक्शन किसी भी तरफ मजबूती से बंद है।

(3) के मामले में, टीसीपी कनेक्शन को टाइमआउट से बचने के लिए हर बार डमी संदेशों को भेजकर जिंदा रखा जाना चाहिए। आपका कनेक्शन टाइमआउट हो सकता है क्योंकि न तो पक्ष यह कर रहा है (और डेटाबेस कनेक्शन के लिए यह ऐसा कुछ नहीं है जिसे आप आम तौर पर करना चाहते हैं)।

यह एक तरफ से एक कनेक्शन के लिए पूरी तरह से संभव है कि कनेक्शन बंद हो गया है और दूसरी तरफ एचटीई अभी भी विश्वास है कि यह खुला है। संदेश उन मामलों में भेजे जा सकते हैं (और आमतौर पर त्याग दिया गया)।

प्रत्येक कनेक्शन ("सॉकेट") एक ऑपरेटिंग सिस्टम संसाधन का उपयोग करता नामक एक फ़ाइल वर्णनकर्ता (यूनिक्स की भाषा में, अपने OS यह कुछ और ही कह सकते हैं) है, जो एक आई/ओ संसाधन और एक ही बात करने के लिए एक संभाल है एक खुली फ़ाइल के लिए प्रयोग किया जाता है (फिर से, ओएस भिन्न हो सकते हैं)।

अपने डेटाबेस पर कनेक्शन पर सीमा के निम्नतम होगा: ओएस के लिए

  • कॉन्फ़िगर किया गया सीमा;
  • उस फ़ाइल के लिए अधिकतम फ़ाइल डिस्क्रिप्टरों को अनुमति दी गई है (किसी भी I/O गतिविधि के लिए उपयोग किया जा रहा है); और
  • (संभवतः) सिस्टम सेटिंग्स या कनेक्शन सीमाओं पर नीतियां।

यदि कनेक्शन टीसीपी आधारित नहीं है (उदाहरण के लिए एक फाइल सिस्टम सॉकेट जिसे अक्सर यूनिक्स सिस्टम पर MySQL के साथ प्रयोग किया जाता है) सिद्धांत वास्तव में बहुत ही सरल हैं।

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

यह बाहरी संसाधन (और आपके क्लाइंट का उपयोग करने वाला कोड नहीं है) जो कनेक्शन को खोलता है और किसी सीमा को चलाता है।

4

क्रम में आपके सवालों के जवाब के लिए:

  1. हाँ, शायद। जब तक "समवर्ती कनेक्शन" द्वारा आप वास्तव में "समवर्ती प्रश्न" का अर्थ नहीं लेते हैं। यदि आप डेटाबेस कनेक्शन खोल रहे हैं, तो यह खुला है।

  2. कचरा संग्रह कनेक्शन को साफ या साफ़ नहीं कर सकता है। इस्तेमाल की जाने वाली भाषा और डेटाबेस चालक पर निर्भर करता है। (कचरा संग्रह स्मृति को पुनः प्राप्त करने तक ही सीमित हो सकता है, टीसीपी कनेक्शन जैसे संसाधन नहीं।)

  3. जब आपका प्रोग्राम समाप्त हो जाता है, आम तौर पर ओएस इसका उपयोग किए जाने वाले सभी संसाधनों को साफ करने के लिए जिम्मेदार होता है। इसमें बंद टीसीपी, आदि कनेक्शन शामिल हैं। इसलिए, अधिकांश कनेक्शन प्रकारों के लिए, डेटाबेस को सूचित किया जाएगा कि दूसरी तरफ कनेक्शन बंद हो गया है।

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

  • कोई संबंधित समस्या नहीं^_^