【发布时间】:2020-01-16 23:21:22
【问题描述】:
我有一个处理时间打孔 API 调用的路由。其中一个调用是“clock_in”。
router.route('/clock_in').post(managerCheck, startTimeCheck, isClockedIn, clockIn);
这些函数中的每一个都会执行它自己的数据库连接,查询数据库以获取一些信息,然后响应用户或转到 next() 函数。
我正在使用来自 'pg-poll' 的池。
我的连接看起来像这样。
export const **isClockedIn** = (request, response, next) => {
const query = `select * from....`;
const values = [value1, value2];
pool.connect((err, client, release) => {
client.query(query, values, (err, result) => {
//do stuff
}
所有功能的连接基本相同。
我想做的是只有 1 个 pool.connect 实例,然后 api 调用中的每个函数都将使用该连接来执行它们的 client.query .我只是不确定我会如何设置它。
希望我的问题很清楚。我的所有代码都有效,只是效率不高,因为它为 1 个 api 调用建立了多个数据库连接。
【问题讨论】:
-
使用连接池是正确的做法。如果您必须进行任何并发查询,则需要多个连接。池通过保持连接打开和空闲来优化您的代码,因为连接打开和关闭是该交易中昂贵的部分。如果 with 连接池的性能很差,可能是您需要更多或更少的空闲连接,或者必须调整一些其他设置,例如最大空闲、最大打开、ttl 等。
-
这是否意味着当我的应用程序启动时,它已经与打开的数据库建立了连接。当我使用“池”时,我只是在使用那些已经打开的连接之一?
-
是的。假设您在启动期间创建了池。
-
我认为这就是我所缺少的。我正在看这个npmjs.com/package/pg-pool#a-note-on-instances,它认为这几乎就是你刚刚指出的。只需要弄清楚如何在启动时创建一个池即可。
-
我的应用中有这个,我的所有查询都导入了这个文件。 //本地测试 const pool = new Pool({ user: 'postgres', host: 'localhost', database: 'database', password: 'password', port: 5000, });导出默认池;
标签: node.js postgresql express pgpool node-pg-pool