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 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à cách để đ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 chương trình phụ trợ của mình, toàn bộ ứng dụng của bạn sẽ bị tắc nghẽn dựa trên tốc độ các postgres có thể phản hồi các truy vấn. Theo nghĩa đen, nó sẽ xếp hàng mọi thứ, xếp hàng mỗi truy vấn. Vâng, nó không đồng bộ và vì vậy không sao cả ... nhưng bạn có muốn nhân thông lượng của mình lên 10 lần không? Sử dụng pg.connect
đặt thành
pg.defaults.poolSize
một cái gì đó lành mạnh (chúng tôi làm 25-100, không chắc chắn là số đúng).
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 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ụng
LISTEN/NOTIFY
. Ứng dụng khách lắng nghe cần ở xung quanh và được kết nối và không được chia sẻ để nó có thể xử lý NOTIFY
các thông điệp một cách chính xác . Ví dụ khác sẽ là khi mở một ứng dụng khách để giết một số thứ bị treo 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
trong suốt cuộc gọi hoặc khách hàng mới. Có một tệp giống db.js
như thế này:
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 việc triển khai của mình từ pg.connect
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.