Saya penulis node-postgres. Pertama, saya minta maaf dokumentasi gagal memperjelas opsi yang tepat:itu salah saya. Saya akan mencoba untuk meningkatkannya. Saya baru saja menulis Intisari untuk menjelaskan hal ini karena percakapan menjadi terlalu panjang untuk Twitter.
Menggunakan
pg.connect
adalah cara yang harus ditempuh dalam lingkungan web.Server PostgreSQL hanya dapat menangani 1 kueri pada satu waktu per koneksi. Artinya jika Anda memiliki 1 global
new pg.Client()
terhubung ke backend Anda, seluruh aplikasi Anda terhambat berdasarkan seberapa cepat postgres dapat merespons kueri. Ini benar-benar akan mengatur semuanya, mengantre setiap kueri. Ya, ini asinkron dan tidak apa-apa...tapi bukankah Anda akan mengalikan throughput Anda dengan 10x? Gunakanpg.connect
setelpg.defaults.poolSize
untuk sesuatu yang waras (kami melakukan 25-100, belum yakin angka yang tepat).
new pg.Client
adalah ketika Anda tahu apa yang Anda lakukan. Ketika Anda membutuhkan satu klien berumur panjang untuk beberapa alasan atau perlu mengontrol siklus hidup dengan sangat hati-hati. Contoh bagusnya adalah saat menggunakanLISTEN/NOTIFY
. Klien yang mendengarkan harus ada dan terhubung dan tidak dibagikan sehingga dapat menanganiNOTIFY
pesan.Contoh lainnya adalah ketika membuka klien 1-off untuk membunuh sesuatu yang tergantung atau dalam skrip baris perintah.
Satu hal yang sangat membantu adalah memusatkan semua akses ke database Anda di aplikasi Anda ke satu file. Jangan buang sampah sembarangan pg.connect
panggilan atau klien baru di seluruh. Memiliki file seperti db.js
yang terlihat seperti ini:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
Dengan cara ini Anda dapat mengubah implementasi Anda dari pg.connect
ke kumpulan klien khusus atau apa pun dan hanya perlu mengubah banyak hal di satu tempat.
Lihat modul node-pg-query yang melakukan hal ini.