私は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モジュールを見てください。