connectionLimit 在节点 mysql 中如何工作?
How does connectionLimit work in node mysql?
我完全不明白 mysql 模块中的 connectionLimit
是如何工作的。
我通过以下方式创建了一个连接池:
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 从 table 中选择一些数据。现在在我的 API 中,我从 池 获得一个连接,做一些事情然后 释放 连接。
那么现在,假设有 12 个用户 同时向这个 API 发送请求。因此,他们中的第一个 5 应该可以访问数据,其他 7 将收到错误/无响应。他们将不得不再次请求以获取数据。
是这样还是别的什么?
Is this like so or something else?
这是另外一回事。
如果 connectionLimit
为 10,则驱动程序与数据库建立的最大连接数为 10。
假设默认驱动程序选项,如果所有这些连接都处于活动状态(也就是说,它们已从池中获取以执行查询,但尚未释放),那么下一个请求连接 (pool.getConnection()
) 将排队:驱动程序将等待,直到其中一个活动连接被释放回池中。您的用户只会注意到一点延迟,但他们不会收到错误或没有响应;只是 延迟 响应。
所有这些都可以使用记录的选项 here 进行微调。例如,如果您更喜欢等待而不是等待,驱动程序 return 出现错误,请设置 waitForConnections : false
.
或者,如果您希望驱动程序 return 出错,例如,有 25 个请求排队等待接收连接,请设置 queueLimit : 25
。
我完全不明白 mysql 模块中的 connectionLimit
是如何工作的。
我通过以下方式创建了一个连接池:
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 从 table 中选择一些数据。现在在我的 API 中,我从 池 获得一个连接,做一些事情然后 释放 连接。
那么现在,假设有 12 个用户 同时向这个 API 发送请求。因此,他们中的第一个 5 应该可以访问数据,其他 7 将收到错误/无响应。他们将不得不再次请求以获取数据。
是这样还是别的什么?
Is this like so or something else?
这是另外一回事。
如果 connectionLimit
为 10,则驱动程序与数据库建立的最大连接数为 10。
假设默认驱动程序选项,如果所有这些连接都处于活动状态(也就是说,它们已从池中获取以执行查询,但尚未释放),那么下一个请求连接 (pool.getConnection()
) 将排队:驱动程序将等待,直到其中一个活动连接被释放回池中。您的用户只会注意到一点延迟,但他们不会收到错误或没有响应;只是 延迟 响应。
所有这些都可以使用记录的选项 here 进行微调。例如,如果您更喜欢等待而不是等待,驱动程序 return 出现错误,请设置 waitForConnections : false
.
或者,如果您希望驱动程序 return 出错,例如,有 25 个请求排队等待接收连接,请设置 queueLimit : 25
。