繁体   English   中英

Node.js PostgreSQL

[英]Node.js PostgreSQL

我看到了包作者对stackoverflow发布的评论( 使用node.js postgresql模块的正确方法是什么? )说最好的方法是每次都使用pg.connect。 我想知道该方法是否与他在npm网站( https://www.npmjs.com/package/pg )上提到的示例不同?

在我看来,如果我按照您在stackoverflow上的帖子进行操作,那么如果在高峰时段有1000个不同客户端访问数据库,那么将创建1000个不同的数据库客户端连接,并且可能存在数据库崩溃的风险(RAM不足) 。 而且,这种方法(每次都只使用pg.connect)是否有一个连接池,其中连接被重用并且pg.defaults.poolSize仅设置了最大连接数。 如果我错了,请纠正我?

原则上-是的。 但是请记住,驱动程序不能同时执行多个查询。 这就是为什么建议使用多个连接的原因-但由于其他原因(如套接字过多,Postgres的打开连接的最大数量等),这可能会降低性能。此外,您可能会遇到一些可能不太明显但很可能会遇到的问题根据您的用例-查看一些相关问题:

您可能需要查看一些模块:

  • pooled-pg- “与pg兼容的PostgreSQL驱动程序,具有更有效的池化策略。”
  • ppooled-pg- “承诺的PostgreSQL驱动程序,具有更有效的池策略”。

为每个查询建立新连接将为每个查询产生不必要的开销。

使用node.js postgres模块的正确方法是拥有一个连接池,并在每次查询时从该池获取连接。

原因不是因为缺少ram而导致数据库崩溃。 postgres数据库可以打开的连接数量最大。 该数量将在postgresql.conf中设置,并且通常比使ram崩溃的数量低得多(除非您有意将其设置为可笑的东西)。

保持连接池对以下方面有好处:

  1. 它减少了响应时间,因为您不必花费不必要的时间来打开(和关闭)数据库连接。
  2. 您总是知道在给定时间打开了多少个连接。 即使您告诉连接已关闭,连接也不会空闲等待30秒或类似的时间再关闭。
  3. 使用连接池而不是为每个查询打开新连接时,应用程序中处于不可预测状态的可能性大大降低。

另外,我倾向于为应用程序分配最大连接数的80%。 保留20%的空间用于复制内容和需要查询数据库以查找其自身工作的数据团队。 分配100%还可能导致应用程序中的状态无法预测。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM