PostgreSQL:使用相同的连接或从池中获取另一个连接?

时间:2017-07-16 10:03:47

标签: node.js postgresql node-postgres pg-promise

我有一个Node.js脚本和一个PostgreSQL数据库,我将使用一个维护数据库连接池的库。

假设我有一个脚本在脚本的不同部分多次查询数据库( 事务),我怎么知道我是否应该获取一个连接/客户端并在整个*中重用它,或者从池中为每个查询获取一个新客户端? (两者都有效但性能更好?)

<{1}}库中的{p> * taskpg-promise库中的connect

node-postgres

...
// Acquire connection from pool.
(Database query)
(Non-database-related code)
(Database query)
// Release connection to pool.
...

2 个答案:

答案 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)

我不确定,您使用的池如何工作,但通常他们应该重用连接(在使用后不要断开连接),因此您不需要关心缓存连接。