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.
Saya adalah penulis pg-promise , yang menyederhanakan penggunaan node-postgres melalui promise .
Ini membahas masalah tentang cara yang benar untuk menghubungkan ke dan memutuskan dari database, menggunakan kumpulan koneksi yang diimplementasikan oleh node-postgres , antara lain, seperti transaksi otomatis.
Permintaan individu di pg-promise bermuara pada apa yang relevan dengan logika bisnis Anda:
yaitu Anda tidak perlu berurusan dengan logika koneksi saat menjalankan kueri, karena Anda mengatur koneksi hanya sekali, secara global, seperti ini:
Anda dapat menemukan lebih banyak contoh di tutorial Belajar dengan Contoh , atau di halaman beranda proyek .
sumber
pg
hal ini ditentukan olehpg.defaults.ssl = true;
. Bagaimana Anda melakukan inipg-promise
?pgp.pg.defaults.ssl = true;
Kolam renang adalah cara untuk pergi sekarang. Beberapa hal seperti ini
itu bisa digunakan sebagai
db.query('<BEGIN,COMMIT,ROLLBACK,your query,anything')
sumber
Lebih baik membuat pg pool secara global dan setiap kali Anda perlu melakukan operasi db, gunakan klien dan kemudian lepaskan kembali ke pool. Setelah semua operasi db selesai, akhiri penggunaan pool
pool.end()
Kode sampel -
Untuk lebih jelasnya, Anda dapat merujuk ke posting blog saya - Sumber
sumber
Seperti yang Anda lihat dari dokumentasi, kedua opsi tersebut valid, jadi pilih mana yang Anda inginkan. Seperti Anda, saya akan memilih pilihan kedua.
sumber
Saya tertarik dengan handler yang sangat sederhana untuk ini jadi saya membuatnya sendiri tanpa membuatnya terlalu rumit. Saya tidak berangan-angan bahwa ini super dasar tetapi dapat membantu beberapa orang untuk memulai. Pada dasarnya, ini menghubungkan, menjalankan kueri dan menangani kesalahan untuk Anda.
Maka Anda akan menggunakan dengan menyebutnya seperti ini:
sumber
node-postgres
halaman lebih baik dari ini.Begini cara saya melakukannya, semacam "semua pendekatan di atas"
sumber