私はnode-postgresの作者です。まず、ドキュメントが正しいオプションを明確にできなかったことをお詫びします。それは私のせいです。私はそれを改善しようとします。会話がTwitterには長すぎたため、これを説明するためにGistを作成しました。
pg.connectを使用する 進むべき道 Web環境で。PostgreSQLサーバーは、接続ごとに一度に1つのクエリしか処理できません。つまり、グローバルな
new pg.Client()が1つある場合です。 バックエンドに接続すると、postgrescanがクエリに応答する速度に基づいてアプリ全体がボトルネックになります。それは文字通りすべてを並べ、各クエリをキューに入れます。ええ、それは非同期なので大丈夫です...しかし、あなた自身はあなたのスループットを10倍にしませんか?pg.connectを使用しますpg.defaults.poolSizeを設定します 正気の何かに(私たちは25-100を行いますが、正しい数はまだわかりません)。
new pg.Client自分が何をしているのかを知っているときのためです。何らかの理由で単一の長寿命のクライアントが必要な場合、またはライフサイクルを非常に注意深く制御する必要がある場合。この良い例は、LISTEN/NOTIFYを使用する場合です。 。リスニングクライアントは、NOTIFYを適切に処理できるように、周囲に接続され、共有されていない必要があります メッセージ。他の例としては、1回限りのクライアントを開いて、ハングしたものを強制終了したり、コマンドラインスクリプトを使用したりする場合があります。
非常に役立つことの1つは、アプリ内のデータベースへのすべてのアクセスを1つのファイルに一元化することです。 pg.connectをポイ捨てしないでください 全体を通して電話または新しいクライアント。 db.jsのようなファイルがあります これは次のようになります:
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
このようにして、pg.connectから実装を変更できます。 クライアントのカスタムプールなどに移動し、1か所で変更するだけで済みます。
これを実行するnode-pg-queryモジュールを見てください。