मैं नोड-पोस्टग्रेज का लेखक हूं। सबसे पहले, मुझे खेद है कि दस्तावेज़ीकरण सही विकल्प को स्पष्ट करने में विफल रहा है:यह मेरी गलती है। मैं इसे सुधारने की कोशिश करूंगा। मैंने इसे समझाने के लिए अभी एक सार लिखा है क्योंकि बातचीत ट्विटर के लिए बहुत लंबी हो गई है।
<ब्लॉकक्वॉट>
pg.connect
. का उपयोग करना जाने का रास्ता है वेब वातावरण में।
PostgreSQL सर्वर प्रति कनेक्शन एक समय में केवल 1 क्वेरी को संभाल सकता है। इसका मतलब है कि यदि आपके पास 1 वैश्विक new pg.Client()
है आपके बैकएंड से कनेक्टेड आपका पूरा ऐप इस बात पर आधारित है कि प्रश्नों का उत्तर कितनी तेजी से पोस्टग्रेज कर सकता है। यह सचमुच सब कुछ पंक्तिबद्ध करेगा, प्रत्येक क्वेरी को कतारबद्ध करेगा। हाँ, यह async है और इसलिए यह ठीक है...लेकिन क्या आप अपने थ्रूपुट को 10x से गुणा नहीं करेंगे? pg.connect
. का उपयोग करें pg.defaults.poolSize
. सेट करें कुछ समझदार के लिए (हम 25-100 करते हैं, अभी तक सही संख्या सुनिश्चित नहीं है)।
new pg.Client
के लिए है जब आप जानते हैं कि आप क्या कर रहे हैं। जब आपको किसी कारण से एक लंबे समय तक रहने वाले ग्राहक की आवश्यकता होती है या जीवन-चक्र को बहुत सावधानी से नियंत्रित करने की आवश्यकता होती है। इसका एक अच्छा उदाहरण LISTEN/NOTIFY
. का उपयोग करते समय है . सुनने वाले क्लाइंट को आस-पास और कनेक्टेड होना चाहिए और साझा नहीं करना चाहिए ताकि वह NOTIFY
को ठीक से हैंडल कर सके संदेश। अन्य उदाहरण तब होगा जब 1-ऑफ क्लाइंट को कुछ लटका सामान या कमांड लाइन स्क्रिप्ट में खोलने के लिए खोलें।
एक बहुत उपयोगी बात यह है कि अपने ऐप में अपने डेटाबेस तक सभी पहुंच को एक फ़ाइल में केंद्रीकृत करना है। pg.connect
में गंदगी न फैलाएँ कॉल या नए क्लाइंट भर में। db.js
. जैसी फ़ाइल रखें जो कुछ इस तरह दिखता है:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
इस तरह आप अपने कार्यान्वयन को pg.connect
. से बदल सकते हैं ग्राहकों के एक कस्टम पूल के लिए या जो कुछ भी और केवल एक ही स्थान पर चीजों को बदलना है।
नोड-पीजी-क्वेरी मॉड्यूल पर एक नज़र डालें जो ऐसा करता है।