【问题标题】:1 db connection for all functions in API callAPI 调用中所有函数的 1 db 连接
【发布时间】: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


【解决方案1】:

当我从 API 进行调用时,通过观察我的数据库连接,我学到了很多东西。

当您第一次调用 pg.pool 时,将与数据库建立连接。查询完成后,连接将进入空闲状态,如果运行另一个 pg.pool 命令,它将使用该空闲连接。连接将在空闲 10 秒后关闭(您可以对此进行配置)。

您还可以设置最大连接数(默认为 10)。因此,如果您同时运行 10 个查询,它们都会打开一个连接并运行。完成后,他们的连接将处于空闲状态。如果您同时运行另外 10 个,它们将重用这些连接。

如果您只想强制 1 个永远不会关闭的连接(并不是说您想这样做),您可以将空闲超时设置为 0,并且最多设置 1 个连接。然后,如果您一次运行 10 个查询,它们将排成一行,一次运行一个。

const pool = new pg.Pool({
  user: 'postgres',
  host: 'localhost',
  database: 'database',
  password: 'password',
  port: 5000,
  idleTimeoutMillis: 0,
  max: 1,
});

这个页面非常有帮助,虽然直到我看到我的 API 运行时的数据库连接,我才明白其中的大部分内容。

https://node-postgres.com/api/pool

注意:上面的代码应该在它自己的js文件中,所有的连接都应该引用它。如果您创建新的 pg.Pools,我相信它们会打开自己的连接,这可能不是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2020-09-11
    相关资源
    最近更新 更多