如何在Sequelize.js中使用数据库连接池

时间:2016-02-20 16:02:19

标签: node.js sequelize.js

我需要澄清游泳池是什么以及游戏的作用。文档说Sequelize会在初始化时设置一个连接池,所以理想情况下你应该只为每个数据库创建一个实例。

var sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'|'mariadb'|'sqlite'|'postgres'|'mssql',

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },

// SQLite only
   storage: 'path/to/database.sqlite'
});

3 个答案:

答案 0 :(得分:23)

当您的应用程序需要从数据库中检索数据时,它会创建数据库连接。创建此连接涉及应用程序和数据库的一些时间和机器资源开销。许多数据库库和ORM将尝试在可能的情况下重用连接,这样它们就不会产生一遍又一遍地建立数据库连接的开销。 pool是这些保存的,可重复使用的连接的集合,在您的情况下,Sequelize来自。

的配置
pool: {
    max: 5,
    min: 0,
    idle: 10000
  }

反映出您的游泳池应该:

  1. 永远不要超过五个开放式连接(max: 5
  2. 至少具有零打开连接/维持最小连接数(min: 0
  3. 在连接空闲(未使用)10秒后从池中删除连接(idle: 10000
  4. tl; dr:池有助于提高数据库和整体应用程序性能,但如果您对池配置过于激进,则可能会对整体性能产生负面影响。

答案 1 :(得分:1)

池正在排除错误

我在搜索Sequalize错误时发现此帖子正在给我的node.js应用:池正在耗尽。我不能为我的生活弄清楚。那些追随我的脚步的人:

问题是我使用命令sequelize.closeConnections()比我想象的更早关闭数据库。由于某种原因,而不是像“数据库已被关闭”这样的错误,而是给出了模糊的错误'池正在耗尽'。

答案 2 :(得分:0)

似乎您可以尝试将pool放到false以避免创建池bing。以下是API详细信息表:http://sequelize.readthedocs.org/en/latest/api/sequelize/

  

[options.pool = {}]   宾语   应该是sequelize使用连接池。   默认为真