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

我需要澄清一下游泳池是什么以及它的function。 文档说Sequelize将在初始化时build立一个连接池,所以你应该只在每个数据库创build一个实例。

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' }); 

当您的应用程序需要从数据库中检索数据时,它会创build一个数据库连接。 创build这个连接涉及到应用程序和数据库的一些时间和机器资源开销。 许多数据库库和ORM将尝试在可能的情况下重新使用连接,以免它们一次又一次地build立数据库连接。 pool是这些保存的可重用连接的集合,在你的情况下,Sequelize从这个连接中抽取。 您的configuration

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

反映你的游泳池应该:

  1. 永远不要超过五个打开的连接( max: 5
  2. 至less有零开连接/不保持最小数量的连接( min: 0
  3. 连接空闲(未使用)10秒钟后,从池中删除连接( idle: 10000

tl; dr:池对数据库和整体应用程序性能有帮助,但如果您对池configuration过于积极,则可能会对整体性能产生负面影响。

池正在排水错误

我发现这个线程在我的searchSequalize错误是给我的node.js应用程序: 池正在耗尽 。 我不能为了我的生活而弄明白。 所以对于那些追随我的脚步的人来说:

问题是我正在closures数据库比我想象的要早,用命令sequelize.closeConnections() 。 出于某种原因,而不是像“数据库已closures”这样的错误,而是给出了不明确的错误“池正在耗尽”。

似乎你可以尝试把pool变成false以避免创build游泳池。 以下是API详细信息表: http : //sequelize.readthedocs.org/en/latest/api/sequelize/

[options.pool = {}]对象应该继续使用连接池。 默认是真的