Tôi là tác giả của node-postgres. Đầu tiên, tôi xin lỗi vì tài liệu đã không đưa ra được lựa chọn phù hợp rõ ràng:đó là lỗi của tôi. Tôi sẽ cố gắng cải thiện nó. Tôi đã viết một Gist ngay bây giờ để giải thích điều này vì cuộc trò chuyện đã quá dài đối với Twitter.
Sử dụng
pg.connect
là con đường để đi trong môi trường web.Máy chủ PostgreSQL chỉ có thể xử lý 1 truy vấn tại một thời điểm trên mỗi kết nối. Điều đó có nghĩa là nếu bạn có 1 toàn cầu
new pg.Client()
được kết nối với yourbackend toàn bộ ứng dụng của bạn bị tắc nghẽn dựa trên tốc độ phản hồi của postgrescan đối với các truy vấn. Theo nghĩa đen, nó sẽ xếp hàng mọi thứ, xếp hàng đợi truy vấn. Vâng, nó không đồng bộ và vì vậy không sao cả ... nhưng bạn sẽ không nhân thông lượng của mình với 10 lần sao? Sử dụngpg.connect
đặtpg.defaults.poolSize
đến một cái gì đó lành mạnh (chúng tôi làm 25-100, chưa chắc chắn là con số thích hợp).
new pg.Client
là khi bạn biết mình đang làm gì. Khi bạn cần một khách hàng duy nhất tồn tại lâu dài vì lý do nào đó hoặc cần kiểm soát rất cẩn thận vòng đời. Một ví dụ điển hình về điều này là khi sử dụngLISTEN/NOTIFY
. Ứng dụng khách lắng nghe cần phải ở xung quanh và được kết nối và không được chia sẻ để nó có thể xử lý đúng cáchNOTIFY
Một ví dụ khác sẽ là khi mở một ứng dụng khách để giết một số thứ hoặc trong các tập lệnh dòng lệnh.
Một điều rất hữu ích là tập trung tất cả quyền truy cập vào cơ sở dữ liệu trong ứng dụng của bạn vào một tệp. Đừng xả rác pg.connect
cuộc gọi hoặc khách hàng mới trong suốt. Có một tệp như db.js
trông giống như sau:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
Bằng cách này, bạn có thể thay đổi cách triển khai của mình từ pg.connect
đến một nhóm khách hàng tùy chỉnh hoặc bất cứ thứ gì và chỉ phải thay đổi mọi thứ ở một nơi.
Hãy xem mô-đun node-pg-query thực hiện điều này.