连接池和按小时计费的实例

Connection Pools and Billed-Hourly Instances

我正在尝试更好地了解连接池在 knex 中的工作原理。

将来,我想将我的应用程序部署到具有按小时计费的 MySQL 数据存储的 PaaS。我担心的是,使用连接池(如 knex 所做的那样)会导致我保持对我不再需要的数据存储的连接打开,从而耗费我的实例小时数。

因此,我的问题是:knex 是否会在长时间不使用后自动删除池中的连接?此外,如果没有缩减连接,当池中的所有连接都处于非活动状态时,我应该怎么做才能确保不会因未使用的实例小时数向我收费?

我想,如果没有自动缩小规模,我将需要能够访问池中的活动连接,以确保我知道所有连接何时都处于非活动状态,然后销毁池.不幸的是,我不完全确定该怎么做(我在文档中找不到它)。

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 */ 
}});