连接池和按小时计费的实例
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 */
}});
我正在尝试更好地了解连接池在 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 */
}});