में establish_connection काम करता है यह कोड ActiveRecord 2.3.14 के मणि वर्ग ConnectionHandler
के तरीके को समझना ActiveRecord
def establish_connection(name, spec)
@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)
end
से लिया गया है यह हर बार माणिक मॉडल पर establish_connection
कहता है, यह एक नया कनेक्शन पूल बनाने है लगता है।
मेरा प्रश्न:
अगर मैं 5 मॉडल है कि एक ही डेटाबेस के लिए establish_connection
उपयोग किया है, रेल बल्कि एक ही कनेक्शन पहचान के साथ एक नया बनाने पहले से मौजूद पूल लेने के लिए बहुत चालाक है? क्या यह तब भी होता है जब मेरे 5 मॉडल कुछ अमूर्त वर्ग के उप-वर्ग हैं जो establish_connection
का उपयोग करते हैं? यदि यह मौजूद है तो क्या यह हमेशा @connection_pools
से कनेक्शन लेगा?
अद्यतन 1
मैं एक ठोस उदाहरण के बारे में बात कर रहा हूँ। आपके पास 5 अलग-अलग कनेक्शन वाले 5 मॉडल हैं, प्रत्येक बार रेल एक मॉडल का उपयोग करता है जो इसे establish_connection
निष्पादित करता है। ActiveRecord में कोड को देखते हुए, जब यह establish_connection
निष्पादित करता है तो यह उस विशिष्ट कनेक्शन से कनेक्शन के साथ एक नया पूल बनाता है। मैं क्या सोच रहा हूं कि क्या हर बार रेल मॉडल के establish_connection
पर कॉल करता है, क्या यह एक नया पूल बनाता है या मौजूदा लेता है।
उदाहरण: आप मेरी साइट पर आते हैं और एक उत्पाद सूची देखते हैं। आपने अभी एक ऐसी क्रिया को मारा है जो Product.all
पर कॉल करता है, जो अमेज़ॅन पर कुछ डेटाबेस में establish_connection
निष्पादित करता है। फिर, मैं उत्पाद सूची में आया, क्या होता है? क्या मैं स्थापित कनेक्शन लेता हूं या क्या मैं उस कनेक्शन के साथ एक नया पूल बना रहा हूं?
अद्यतन 2
मेरा अनुमान है कि पहली बार रेल अपने मॉडल यह अलग कनेक्शन के साथ पूल बनाने है लोड करता है। उसके बाद, जब मैं कुछ Model.method
का उपयोग करता हूं, तो यह मॉडल से जुड़े कनेक्शन को पकड़ता है और विधि को निष्पादित करता है।
मुझे यकीन नहीं है कि क्या होता है जब 2 मॉडल के दो बराबर कनेक्शन होते हैं (सार वर्ग में नहीं बल्कि स्वयं वर्ग में)। क्या यह दो समान कनेक्शन पूल उत्पन्न करेगा, या ActiveRecord इस मामले को पकड़ने के लिए पर्याप्त स्मार्ट है?
बीटीडब्ल्यू, बहुत अच्छा सवाल। – bor1s