Saya adalah penulis node-postgres . Pertama, saya minta maaf karena dokumentasi gagal memperjelas opsi yang benar: itu salah saya. Saya akan mencoba memperbaikinya. Saya baru saja menulis Gist untuk menjelaskan hal ini karena percakapan menjadi terlalu panjang untuk Twitter.
Menggunakan pg.connect
adalah cara untuk masuk ke lingkungan web.
Server PostgreSQL hanya dapat menangani 1 kueri pada satu waktu per koneksi. Itu berarti jika Anda memiliki 1 global yang new pg.Client()
terhubung ke backend Anda, seluruh aplikasi Anda akan mengalami bottlekneck berdasarkan seberapa cepat postgres dapat menanggapi kueri. Ini benar-benar akan berbaris semuanya, mengantri setiap kueri. Ya, ini asinkron dan tidak apa-apa ... tetapi bukankah Anda lebih suka mengalikan throughput Anda dengan 10x? Gunakan pg.connect
set the
pg.defaults.poolSize
ke sesuatu yang waras (kami lakukan 25-100, belum yakin nomor yang benar).
new pg.Client
adalah untuk saat Anda tahu apa yang Anda lakukan. Bila Anda membutuhkan satu klien berumur panjang karena alasan tertentu atau perlu mengontrol siklus hidup dengan sangat hati-hati. Contoh bagusnya adalah saat menggunakan
LISTEN/NOTIFY
. Klien mendengarkan harus ada dan terhubung dan tidak dibagikan sehingga dapat menangani NOTIFY
pesan dengan benar . Contoh lain adalah ketika membuka klien 1-off untuk mematikan beberapa hal yang macet atau dalam skrip baris perintah.
Satu hal yang sangat membantu adalah memusatkan semua akses ke database Anda di aplikasi Anda ke satu file. Jangan membuang-buang pg.connect
telepon atau klien baru. Buat file seperti db.js
itu 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
menjadi kumpulan klien khusus atau apa pun dan hanya perlu mengubah berbagai hal di satu tempat.
Lihat modul node-pg-query yang melakukan hal ini.