【问题标题】:Is it a good practice to close my connection after Sequelize operations?在 Sequelize 操作之后关闭我的连接是一个好习惯吗?
【发布时间】:2021-11-26 04:28:42
【问题描述】:

目前我正在使用 NodeJS/TypeScript 在 Sequelize 之上设计一个应用程序,我想知道它是否会导致不关闭连接的性能问题。

例如,在微服务中,我需要来自 1 个实体的数据。

const resolver = async (,,{db}) => {
  const entity1 = await db.models.Entity1.findOne()
  return entity1
}

调用findOne后是否需要关闭连接?

我的理解是,下面的配置定义了多个并发连接,idle是一个参数,使连接管理器关闭空闲的连接:

module.exports = {
  development: {
    host: 'db.sqlite',
    dialect: 'sqlite',
    pool: {
        max:5,
        min:0,
        idle:10000
    }
  },
  test: {
    host: 'test.sqlite',
    dialect: 'sqlite',
    pool: {
        max:5,
        min:0,
        idle:10000
    }
  }
}

欢迎任何建议

【问题讨论】:

    标签: node.js database sequelize.js pool


    【解决方案1】:

    Sequelize 维护一个内部database connection pool,这就是pool 参数的用途,所以这不是必需的。每个调用实际上都是临时借用一个连接,然后在完成后将其返回到池中。

    手动关闭该连接可能会使池中毒并导致性能问题。

    【讨论】:

      【解决方案2】:

      如果你不关闭 Sequelize 连接,微服务仍然会运行直到连接超时(空闲时间池参数).. 我建议关闭 Sequelize 连接,至少在微服务中..

      【讨论】:

      • 这会产生更多成本(例如:lambda 执行时间).. 并且可能导致 lambda 服务超时..
      • 但我想知道在操作完成后连接是否没有被 sequelize 自动关闭,我没有注意到该特定用例的超时
      猜你喜欢
      • 2020-05-09
      • 2020-08-25
      • 2014-08-11
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 2018-08-09
      相关资源
      最近更新 更多