2012-08-16 6 views
6

में डेटाबेस कनेक्शन पूलिंग मैंने अभी रूबी के साथ शुरुआत की और मैं सिनात्रा के साथ खेल रहा हूं, लेकिन अनुरोधों के बीच डेटाबेस कनेक्शन साझा करने का कोई तरीका नहीं मिला।रूबी

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

ActiveRecord और DataMapper इस सुविधा की पेशकश करते हैं लेकिन मुझे ORM की आवश्यकता नहीं है और केवल नियमित SQL क्वेरी बनाना चाहते हैं।

क्या सिनात्रा के लिए कुछ विशिष्ट दृष्टिकोण है या सभी रैक-आधारित अनुप्रयोगों के सामान्य तरीके हैं?

उत्तर

4

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

@db = Mysql2::Client.new #... 

या एक वैश्विक चर:

$db = Mysql2::Client.new #... 

कनेक्शन पूलिंग आवेदन के जीवन काल के लिए एक से अधिक थ्रेड/फाइबर भर में कनेक्शन की एक छोटी संख्या साझा करने के लिए सिर्फ एक तरीका है। जावा, जेवीएम, जहां तक ​​मुझे पता है प्रक्रियाओं के बीच कनेक्शन साझा नहीं करता है।

हालांकि, एक सामान्य उद्देश्य Connection Pool library for Ruby है।

+0

धन्यवाद, लेकिन अगर मैं एक आवृत्ति चर बना देता हूं, हर बार जब एप्लिकेशन ऑब्जेक्ट बनाया जाता है, तो नया कनेक्शन भी बनाया जाता है, है ना? तो कनेक्शन जोड़ने के साथ यह कैसे मदद करता है? – Nikoi

+1

एप्लिकेशन अनुरोधों के बीच बंद नहीं है जबतक कि आप इसे मैन्युअल रूप से बंद नहीं करते। आवेदन लोड हो गया है और अनुरोधों का जवाब देगा और अपने जीवनकाल में अपने कनेक्शन को जारी रखेगा। रुबी में कनेक्शन पूलिंग के लिए मुझे सबसे अच्छा पता है। –

+1

शायद किसी भी ओआरएम जैसे [सेक्वेल] (http://sequel.rubyforge.org), [डेटामैपर] (http://datamapper.org) या [ActiveRecord] (http: //) के बिना सीधे MySQL 2 का उपयोग करना एक बुरा विचार है। rubygems.org/gems/activerecord)। ये ज्यादातर मामलों में स्वचालित रूप से आपके लिए पूलिंग करेंगे। यदि आप "बस SQL ​​क्वेरी कर रहे हैं" तो आपका एप्लिकेशन जल्दी ही एक गड़बड़ी खत्म कर देगा। क्वेरी जेनरेटर वास्तव में काफी अच्छा है क्योंकि वास्तव में वहां जाकर एसक्यूएल के करीब होने के लिए सीक्वेल सबसे अच्छा विकल्प है। – tadman