2017-04-06 125 views
1

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

我使用的是PG-承诺,并想知道:

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

回答

0
  • 会发生什么,如果poolSize = 100和应用同时得到101请求(或甚至更多)? Postgres是否处理了这个订单,并且让这个请求等到它可以运行?
  • 对,请求将被排队。但它不是由Postgres自己处理,而是由您的应用程序(pg-pool)处理。因此,无论您何时用完免费连接,应用程序都会等待连接释放,然后执行下一个挂起的请求。这就是泳池的用途。

    1. 什么是推荐poolSize为一个非常大的数据负载。

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


    而且我觉得node-postgres文档相当混乱和误导对此事:

    一旦你> 100个同时请求您的Web服务器将尝试打开PostgreSQL后端和你” 100个连接会在PostgreSQL服务器上耗尽内存,您的数据库将无法响应,您的应用程序似乎会挂起,并且一切都会中断。 Boooo!

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

    这并不完全正确。如果您在Postgres方面达到连接限制,则只有在任何以前的连接关闭之后,您才能建立新的连接。如果你在节点应用中处理这种情况,没有什么会打破。

    2

    我是pg-promise的作者。

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

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

    我看到PG-承诺是建立在节点的Postgres和节点的Postgres的顶部采用PG-池来管理池。

    node-postgres开始使用版本6.x中的pg-pool,而pg-promise保留在使用内部连接池实现的版本5.x上。 Here's the reason why

    我也读了“超过100个客户端同时是一个非常糟糕的事情”

    我在这方面的长期实践表明:如果不能满足您的服务于20个连接池,您不会因为进行更多连接而被保存,您需要修改实施。而且,如果超过20,则会给CPU带来额外的压力,并导致进一步的减速。

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

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

    如果poolSize = 100和应用程序获取同时

    101请求,它会等待下一个可用的连接会发生什么。


    参见: