我试图更好地了解连接池在knex
中的工作原理。
将来,我希望将我的应用程序部署到一个带有每小时计费的MySQL数据存储区的PaaS。我担心的是,使用连接池(如knex
所做的那样)将导致我保持对我不再需要的数据存储区的连接打开,从而导致我花费实例时间。
因此,我的问题是:knex
在长时间不使用后会自动删除池中的连接吗?此外,如果没有缩小连接的情况,我该怎么做才能确保当池中的所有连接都处于非活动状态时,我没有为未使用的实例小时付费?< / p>
我想,如果没有自动缩小,我需要能够访问池中的活动连接,以确保我知道所有连接何时处于非活动状态,然后销毁池。不幸的是,我并不完全确定如何做到这一点(我无法在文档中找到它)。
答案 0 :(得分:0)
Knex使用Pool2进行池化,默认值为2个最小连接打开(请参阅knex.js pooling)。因此,如果使用这些默认值,您的担忧是有效的。
要更改行为,请尝试以下操作:
var knex = require('knex')({
client: '<your driver, mysql?>',
connection: { <your connection parameters> },
pool: {
min: 0 /* no connections if idle */,
idleTimeout: 10*1000 /* 10 secs idle connections are closed */
}});