我完全不了解mysql模块中connectionLimit
的工作原理。
我已按以下方式创建了一个connectionPool:
var connPool = mysql.createPool({
host: config.get('database.host'),
user: config.get('database.user'),
password: config.get('database.password'),
database: config.get('database.dbname'),
connectionLimit: 5
});
现在,限制5在这里做了什么?
这就是我的想法:
假设有5个用户使用我的REST api从表中选择数据。现在在我的api中,我从池获得连接,执行操作,然后释放连接。
现在假设有 12位用户同时向此api发送请求。因此,首先 5 应该可以访问数据,而其他 7 将获得错误/无响应。他们将不得不再次请求获取数据。
是这样还是其他什么?
答案 0 :(得分:4)
是这样还是其他什么?
这是别的东西。
如果connectionLimit
为10,则驱动程序对数据库的最大连接数为10.
假设默认驱动程序选项,如果所有这些连接都处于活动状态(即,它们已从池中获取以执行查询,但它们尚未被释放),那么下一个请求connection(pool.getConnection()
)将排队:驱动程序将等待其中一个活动连接释放回池中。您的用户只会注意到一点延迟,但他们不会收到错误或没有回复;只是一个延迟的响应。
所有这一切都可以使用记录的here选项进行微调。例如,如果您更喜欢而不是等待,则驱动程序返回错误,设置waitForConnections : false
。
或者,如果您希望驱动程序返回错误,例如,如果有25个请求排队等待接收连接,请设置queueLimit : 25
。