ฉันเขียนของโหนด postgres ก่อนอื่นฉันต้องขออภัยที่เอกสารประกอบไม่สามารถทำให้ตัวเลือกที่ถูกต้องชัดเจนได้นั่นคือความผิดของฉัน ฉันจะพยายามปรับปรุงให้ดีขึ้น ตอนนี้ฉันเขียนGistเพื่ออธิบายเรื่องนี้เนื่องจากการสนทนายาวเกินไปสำหรับ Twitter
การใช้pg.connect
เป็นวิธีที่จะไปในสภาพแวดล้อมเว็บ
เซิร์ฟเวอร์ PostgreSQL สามารถจัดการได้ครั้งละ 1 แบบสอบถามต่อการเชื่อมต่อ นั่นหมายความว่าหากคุณมี 1 global ที่new pg.Client()
เชื่อมต่อกับแบ็กเอนด์ของคุณทั้งแอปของคุณจะถูกทำให้เป็นขวดโดยขึ้นอยู่กับว่า postgres สามารถตอบคำถามได้รวดเร็วเพียงใด มันจะจัดเรียงทุกอย่างตามลำดับโดยเข้าคิวแต่ละแบบสอบถาม ใช่มันไม่ตรงกันแล้วก็ไม่เป็นไร ... แต่คุณจะไม่คูณปริมาณงานของคุณด้วย 10x หรือไม่? ใช้การpg.connect
ตั้งค่าเป็น
pg.defaults.poolSize
สิ่งที่มีเหตุผล (เราทำ 25-100 ยังไม่แน่ใจว่าจำนวนที่ถูกต้อง)
new pg.Client
มีไว้สำหรับเมื่อคุณรู้ว่าคุณกำลังทำอะไรอยู่ เมื่อคุณต้องการลูกค้าที่มีอายุยืนยาวด้วยเหตุผลบางประการหรือจำเป็นต้องควบคุมวงจรชีวิตอย่างรอบคอบ LISTEN/NOTIFY
เป็นตัวอย่างที่ดีของที่นี่คือเมื่อใช้
ไคลเอนต์ที่รับฟังต้องอยู่ใกล้ ๆ และเชื่อมต่อและไม่แชร์เพื่อให้สามารถจัดการกับNOTIFY
ข้อความได้อย่างถูกต้อง ตัวอย่างอื่น ๆ คือเมื่อเปิดไคลเอนต์แบบ 1-off เพื่อฆ่าสิ่งที่ค้างหรือในสคริปต์บรรทัดคำสั่ง
สิ่งที่มีประโยชน์มากอย่างหนึ่งคือการรวมการเข้าถึงฐานข้อมูลทั้งหมดในแอปไว้ที่ไฟล์เดียว อย่าทิ้ง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
เป็นกลุ่มลูกค้าที่กำหนดเองหรืออะไรก็ได้และต้องเปลี่ยนสิ่งต่างๆในที่เดียวเท่านั้น
ดูที่โมดูล node-pg-queryที่ทำสิ่งนี้ได้