当前位置: 首页 > 知识库问答 >
问题:

使用pgpromise的连接池

韶镜
2023-03-14

我正在使用Node js和Postgresql,并试图在连接实现中达到最高效率。< br >我看到pg-promise构建在node-postgres之上,node-postgres使用pg-pool来管理池。< br >我还读到“一次超过100个客户端是一件非常糟糕的事情”(node-postgres)。

我正在使用pg-promise,想知道:

  1. 对于非常大的数据负载,推荐的poolSize是什么。
  2. 如果poolSize=100并且应用程序同时(甚至更多)收到101个请求会发生什么?Postgres是否处理订单并让101个请求等待它可以运行?

共有2个答案

卫弘懿
2023-03-14

对,请求将被排队。但不是由Postgres本身处理,而是由你的app (pg-pool)处理。因此,每当您用完免费连接时,应用程序将等待连接释放,然后执行下一个挂起的请求。这就是泳池的作用。

    < li >对于非常大的数据负载,建议的池大小是多少?

这真的取决于很多因素,没有人会真的告诉你确切的数字。为什么不在巨大的负载下测试你的应用程序,看看它在实践中表现如何,并找到瓶颈。

此外,我发现< code>node-postgres文档在这个问题上相当混乱和误导:

一旦你得到

https://github.com/brianc/node-postgres

这并不完全正确。如果达到Postgres端的连接限制,那么在关闭任何以前的连接之前,您将无法建立新的连接。如果您在节点应用程序中处理此情况,则不会发生任何中断。

牟波
2023-03-14

我是pgpromise的作者。

我正在使用Node js和Postgresql,并试图在连接实现中最有效。

数据库通信有多个级别的优化。其中最重要的是最大限度地减少每个HTTP请求的查询数,因为IO成本高昂,连接池也是如此。

    < li >如果您必须对每个HTTP请求执行多个查询,请始终通过task方法使用tasks。 < li >如果您的任务需要事务,请通过方法tx将其作为事务执行。 < li >如果您需要执行多次插入或更新,请始终使用多行操作。请参见Node.js中带有pg-promise和PostgreSQL多行更新的多行插入。

我看到pg-promise构建在node-postgres之上,node-postgres使用pg-pool来管理池。

节点 postgres 从版本 6.x 开始使用 pg 池,而 pg promise保留在使用内部连接池实现的 5.x 版本上。原因如下。

我还读到“一次超过100个客户是一件非常糟糕的事情”

我在这方面的长期实践表明:如果您无法将服务放入20个连接的池中,那么您将无法通过增加连接来节省成本,而是需要修复您的实现。此外,如果超过20,CPU就会承受额外的压力,这就意味着速度会进一步减慢。

对于非常大的数据负载,建议的poolSize是多少。

数据的大小与池的大小无关。无论下载或上传的内容有多大,通常只使用一个连接。除非您的实现是错误的,并且最终使用了多个连接,否则如果您希望应用程序具有可伸缩性,则需要修复它。

如果poolSize=100并且应用程序同时收到101个请求会发生什么?

它将等待下一个可用连接。

另请参见:

    < li >链接查询 < li >性能提升
 类似资料:
  • 我正在用vaadin和spring开发一个Web应用程序java,比如容器和eclipse链接,比如持久化框架。现在我想在我的应用程序中使用一个连接池。我在谷歌上读了一些我还没读到的东西。这是我的应用程序配置: 我的春日文脉 我的persistence.xml 但我得到以下异常:

  • 我想用命名参数实现一个UPDATE SET语句?可能吗? 对于这样的对象: 这是我的猜测: 对象字段可能会根据发送的请求而有所不同,因此我不想对中的参数进行“硬编码”。

  • 问题内容: 如何使用HttpClient创建连接池? 我必须经常连接同一台服务器。值得建立这样一个游泳池吗? 是否可以保持实时连接并将其用于各种请求,如果可以,我该如何做? 我正在使用Apache HTTP Client在Java中进行开发。 问题答案: [假设Java和Apache的HttpClient] 使用ThreadSafeClientConnManager。将单个全局实例传递给每个Htt

  • 另一个宽大处理--B: 这里要注意,实体A和B之间没有隐式关系,B表中的a_id是手工处理的,因此--关系类似于一对多(A-->B),但不是jpa-hibernate关系。而且,我的FullDto有A的所有属性和B的列表: 现在,我想从A的存储库接口中提取所有内容(A和B表一次完成),如下所示:

  • 本文向大家介绍sqlalchemy 使用连接,包括了sqlalchemy 使用连接的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用上下文管理器打开连接(即从池中请求一个连接): 有无,但必须手动将其关闭:            

  • 我正在尝试使用google cloud sql和云endpoint开发一个应用程序,从google cloud sql文档中我发现google loud sql的连接器不提供任何连接池机制,我尝试在线搜索以获得任何可能的教程或文档,这些教程或文档提供了池机制,但没有结果,google文档只是指出,您应该在finally块中关闭连接,而不需要任何连接池配置。我还遇到了BoneCp、TomcatDbC