2017-06-30 15 views
0

パッケージの作成者(What is the proper way to use the node.js postgresql module?)がstackoverflowの投稿にコメントしたところ、毎回pg.connectを使用することをお勧めします。その方法がnpmのウェブサイト(https://www.npmjs.com/package/pg)で言及した例と異なるのだろうか?Node.js PostgreSQL

ピーク時に異なるクライアントから1000のデータベースアクセスがあった場合、1000の異なるデータベースクライアント接続が作成され、データベースクラッシュのリスクがある可能性があります。 RAM不足)。また、このメソッドは(毎回pg.connectを使用するだけで)、接続が再利用される接続のプールと、pg.defaults.poolSizeによって設定された接続の最大数が存在するところにあります。私が間違っていたら私を修正してください?

+0

'pg.connect'は廃止され、現在のバージョンでは廃止予定の警告が表示されます。どこにどのように接続するかの問題を避けるには、代わりに[pg-promise](https://github.com/vitaly-t/pg-promise)を試してみてください; –

答えて

0

1つのクエリごとに新しい接続を作成すると、1つのクエリごとに不要なオーバーヘッドが生成されます。

node.js postgresモジュールを使用する適切な方法は、接続プールを用意し、クエリを行うたびにプールから接続を取得することです。

理由は、RAMの不足のためにデータベースがクラッシュするためではありません。 Postgresデータベースが開くことができる接続の最大量があります。その金額はpostgresql.confに設定され、一般的にはRAMをクラッシュさせるものよりもはるかに低くなります(意図的に何かばかげたものに設定しない限り)。接続プールを最新の状態に保つ

は、いくつかのために良いです:

  1. あなたは不必要な時間の開口部(およびクローズ)データベース接続を費やすことはありませんので、応答時間が短縮されます。
  2. 特定の時刻に開いている接続の数は、常に知っています。あなたは、接続を閉じるように指示した後でさえ、30秒間待たされているコネクション、またはクローズ前にそのようなものを持っていません。
  3. アプリケーションで予期しない状態が発生する確率は、クエリごとに新しい接続を開くのではなく、接続プールを使用すると大幅に低下します。

また、私は、アプリケーションへの接続の最大数の80%を割り当てる傾向があります。 20%はレプリケーションスタッフと自分の仕事のためにデータベースに問い合わせる必要があるデータチームに予約されています。 100%を割り当てても、アプリケーションに予測できない状態が発生する可能性があります。

+0

この方法をstackoverflow post(pg .connect()のたびに)pg.defaults.poolSizeに達するまで新しい接続を開き、それらの接続を再利用するか、npmのウェブサイトでメソッドを使うべきですか? – Ben

+0

node-postgresモジュールにはpg.poolまたは同等のものが必要です。あなたはそれを使うことができます。それが我々が生産で使用しているものです。私たちの製品はあまりにも大きなスケールではありませんが、プールはゼロ問題を引き起こしました。 – ardilgulez

1

原則として - はい。しかし、ドライバは同時に複数のクエリを実行することはできません。それが複数の会合が推奨される理由です - しかし、それはあまりにも多くのソケット、Postgresのオープンな接続の最大数などの他の理由でパフォーマンスを低下させる可能性があります。

ご覧になりたいモジュール:

  • pooled-pg - 「pgと互換性があり、より効果的なプーリング戦略を備えたPostgreSQLへのドライバ」
  • ppooled-pg - 「効果的なプーリング戦略を備えたPromisified PostgreSQLドライバ」
関連する問題