我有一个Node.js
脚本和一个PostgreSQL
数据库,我将使用一个维护数据库连接池的库。
假设我有一个脚本在脚本的不同部分多次查询数据库(不 事务),我怎么知道我是否应该获取一个连接/客户端并在整个*中重用它,或者从池中为每个查询获取一个新客户端? (两者都有效但性能更好?)
<{1}}库中的{p> *task
,pg-promise
库中的connect
。
node-postgres
或
...
// Acquire connection from pool.
(Database query)
(Non-database-related code)
(Database query)
// Release connection to pool.
...
答案 0 :(得分:0)
您可以使用node-postgres模块,让您更轻松地完成任务。 关于你何时在这里使用游泳池的问题是简短的答案。
PostgreSQL服务器每个连接一次只能处理1个查询。 这意味着如果你有1个全局新的pg.Client()连接到你的 后端你的整个应用程序是基于postgres的速度瓶颈 可以回复查询。它确实会排列一切,排队 每个查询。是的,它是异步的,所以没关系...但不是你 而是将您的吞吐量乘以10倍?使用pg.connect设置 pg.defaults.poolSize到理智的东西(我们做25-100,不确定 正确的数字)。
新的pg.Client是为了你知道自己在做什么。当你需要一个 单身长寿客户因某种原因或需要非常小心 控制生命周期。一个很好的例子就是使用时 LISTEN / NOTIFY。监听客户端需要四处连接 并且不共享,因此它可以正确处理NOTIFY消息。其他 例如,当打开一个客户端来杀死一些挂起的时候 东西或命令行脚本。
这是该模块的链接。 希望这会有所帮助。 https://github.com/brianc/node-postgres
您可以在那里查看文档以及有关池的信息。谢谢:))
关于关闭池,它提供了回调,当你想关闭那个池时可以调用它。
答案 1 :(得分:0)
我不确定,您使用的池如何工作,但通常他们应该重用连接(在使用后不要断开连接),因此您不需要关心缓存连接。