डेटाबेस पूलिंग क्या है?


133

मैं सिर्फ डेटाबेस कनेक्शन पूलिंग की अवधारणा जानना चाहता था और यह कैसे हासिल किया जाता है।

जवाबों:


217

डेटाबेस कनेक्शन पूलिंग एक तरीका है जो डेटाबेस कनेक्शन को खुला रखने के लिए उपयोग किया जाता है ताकि उनका उपयोग दूसरों द्वारा किया जा सके।

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

अगले कुछ पैराग्राफ के लिए निम्नलिखित आरेख देखें:

  +---------+
  |         |
  | Clients |
+---------+ |
|         |-+  (1)   +------+   (3)    +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
|         |    |     +------+          +----------+
+---------+    |         ^
               |         | (2)
               |     /------\
               |     | Pool |
               |     \------/
           (4) |         ^
               |         | (5)
               |     +-------+   (6)   +-----------+
               #===> | Close | ======> | RealClose |
                     +-------+         +-----------+

यह सबसे सरल रूप में है, यह एक ओपन-कनेक्शन एपीआई कॉल के लिए सिर्फ एक समान एपीआई कॉल (1) है जो "वास्तविक" के समान है। यह पहले उपयुक्त कनेक्शन (2) के लिए पूल की जांच करता है और, यदि कोई उपलब्ध है, तो वह क्लाइंट को दिया जाता है। अन्यथा एक नया (3) बनाया जाता है।

एक "उपयुक्त कनेक्शन" सिर्फ एक है जो पहले से ही है सही जानकारी (जैसे डेटाबेस उदाहरण, क्रेडेंशियल्स, और संभवतः अन्य चीजों) का उपयोग करके डेटाबेस तक पहुंच रखता है।

इसी तरह, एक करीबी एपीआई कॉल (4) है जो वास्तव में वास्तविक करीबी कनेक्शन को कॉल नहीं करता है , बल्कि यह बाद में उपयोग के लिए पूल (5) में कनेक्शन डालता है। कुछ बिंदु पर, पूल में कनेक्शन वास्तव में बंद हो सकते हैं (6)।

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


9
आपके पास अच्छा सा ग्राफ़ कहां से है?
एड्रियन ग्रिगोर

19
मैंने इसे स्क्रैच (मुझे मूर्खतापूर्ण) से बनाया है। यदि आप कुछ अच्छे ग्राफिक्स देखना चाहते हैं, तो ज़ेनग्रे के उत्तर पर एक नज़र डालें।
पैक्सडिब्लो

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

@ यिन, अच्छा नहीं लगता। पूल में बचे हुए 1000 कनेक्शनों के बारे में अपने प्रश्न को फिर से लिखें, जो कि हो सकता है लेकिन आम तौर पर केवल तभी जब आप 1000 समवर्ती सक्रिय कनेक्शनों के साथ किसी बिंदु पर समाप्त होते हैं। अन्यथा, इसका फिर से उपयोग होगा और यह 1000 तक नहीं पहुंचेगा। ऐसा होने के संदर्भ में, मेरे पारमार्थिक पैराग्राफ को देखें, विशेष रूप से "वास्तव में पुराने कनेक्शन बंद कर सकते हैं जब उपयोग पैटर्न थोड़ा शांत हो जाता है।"
paxdiablo

1
@DiegoMariani, अगर मैंने इसे हाथ से किया है, तो इससे भी तेज अगर मैं एमएस वर्ड को आसान बनाने की कोशिश करूंगा तो इससे भी तेज होगा :-)
paxdiablo

105

छवियां एक हजार शब्द बोलती हैं (पैक्सिडैब्लो ने एक भयानक विवरण दिया):

वैकल्पिक शब्द

स्रोत


35
और जाहिर है, अच्छी छवियां ASCII कला के कुछ सौ टुकड़े बोलती हैं :-)
paxdiablo

@ सागर कृपया उस उत्तर का चयन करें जो आपको सबसे अधिक उपयोगी लगा। आपका कोई रिकॉर्ड स्वीकार नहीं है।
zengr

1
मैंने पूल में 4 कनेक्शन देखे हैं। पूल में टाइपिंग द्वारा इस कनेक्शन नंबर को प्रतिबंधित किया गया है ?? या क्या होगा जब कनेक्शन पूल में मुफ्त नहीं है? क्लाइंट को कनेक्शन मुफ्त में इंतजार करना होगा ??
ये विन

1
@ कोड वास्तव में यह निर्भर करता है कि कनेक्शन पूल कैसे लागू किया जाता है। जब कनेक्शन अधिकतम क्षमता तक पहुंच जाता है, तो अधिकांश पूल एक नया कनेक्शन बनाते हैं। यह तब तक बढ़ता रह सकता है जब तक db एक सीमा तक नहीं पहुंच जाता। कुछ मामलों में (जैसे oracle jdbc) आप पूल निर्माण के दौरान "प्रारंभिक आकार" और "अधिकतम आकार" निर्दिष्ट कर सकते हैं।
18

2
दुर्भाग्य से, छवि सबसे महत्वपूर्ण बात नहीं कहती है। यह है: क्यों 10, 20, 30, रखा ... कनेक्शन की संख्या स्मृति के लिए कम खर्चीली है और आवश्यकता पड़ने पर एक कनेक्शन खोलने की तुलना में समग्र सिस्टम प्रदर्शन के लिए? यह कैसे हो सकता है? 30 बनाम 1 कम महंगा है? कैसे?
ग्रीन

16

जैसा कि नाम सुझाव देता है। यदि कुछ लोग तैरना चाहते हैं, तो वे उसी स्विमिंग-पूल में तैर सकते हैं, क्या वास्तव में हर बार जब कोई व्यक्ति इसमें शामिल होता है तो एक नया स्विमिंग-पूल बनाने का कोई मतलब नहीं है? समय और लागत एक प्राथमिकता है।


7

डेटाबेस कनेक्शन पूलिंग बस डेटाबेस के लिए कनेक्शन को कैशिंग कर रहा है ताकि अगली बार जब हम डेटाबेस से कनेक्ट करना चाहते हैं तो हर बार एक नया कनेक्शन स्थापित करने की लागत को कम किया जा सके।



1

कनेक्शन पूलिंग अवधारणा न केवल जावा में बल्कि कई प्रोग्रामिंग भाषाओं में। एक नया कनेक्शन ऑब्जेक्ट बनाना महंगा है, इसलिए एक निश्चित संख्या में कनेक्शन बनाए गए हैं और जीवनचक्र में बनाए हुए हैं एक वर्चुअल पूल जावा जस्ट बना रहे हैं ( http://javajust.com/javaques.html ) इस पृष्ठ पर प्रश्न 14 देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.