【发布时间】:2017-12-20 23:47:59
【问题描述】:
我有一个Node.js 脚本和一个PostgreSQL 数据库,我将使用一个库来维护与数据库的连接池。
假设我有一个脚本在脚本的不同部分多次查询数据库(不是 事务),我如何判断我是否应该获取单个连接/客户端并在整个过程中重用它*,还是从池中为每个查询获取一个新客户端? (两者都有效,但哪个性能更好?)
*task 在pg-promise 库中,connect 在node-postgres 库中。
...
// Acquire connection from pool.
(Database query)
(Non-database-related code)
(Database query)
// Release connection to pool.
...
或
...
// Acquire connection from pool.
(Database query)
// Release connection to pool.
(Non-database-related code)
// Acquire connection from pool.
(Database query)
// Release connection to pool.
...
【问题讨论】:
-
你读过这个吗? - Chaining Queries.
-
@vitaly-t 为什么第二种方法会“耗尽池子”?每次查询后客户端不会重新释放吗?
-
高并发导致的耗尽,即尝试并行执行的查询多于池中可用连接的总数。新的将被卡住,等待池中的连接可用。这就是为什么在繁忙的系统中使用任务很重要的原因。
-
@vitaly-t 我不明白。无论使用哪种方法,脚本的每个实例一次最多只能执行一个查询。没有?
-
在 HTTP 服务中,查询是并发执行的,HTTP 处理程序也是如此,因此可以有任意数量的并发查询。
标签: node.js postgresql node-postgres pg-promise