sql >> データベース >  >> RDS >> PostgreSQL

node.js postgresqlモジュールを使用する適切な方法は何ですか?

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



    1. Oracleを使用して、3つのテーブルをPIVOTで1つに結合します

    2. Cosh()がPostgreSQLでどのように機能するか

    3. 外部サーバーに参加/プッシュダウンする前にサブクエリの評価を強制する方法

    4. パスワードプロンプトなしでmysqldumpを実行する方法は?