connectionLimit如何在节点mysql中工作?

时间:2017-08-05 14:16:57

标签: mysql node.js express node-mysql

我完全不了解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 将获得错误/无响应。他们将不得不再次请求获取数据。

是这样还是其他什么?

1 个答案:

答案 0 :(得分:4)

  

是这样还是其他什么?

这是别的东西。

如果connectionLimit为10,则驱动程序对数据库的最大连接数为10.

假设默认驱动程序选项,如果所有这些连接都处于活动状态(即,它们已从池中获取以执行查询,但它们尚未被释放),那么下一个请求connection(pool.getConnection())将排队:驱动程序将等待其中一个活动连接释放回池中。您的用户只会注意到一点延迟,但他们不会收到错误或没有回复;只是一个延迟的响应。

所有这一切都可以使用记录的here选项进行微调。例如,如果您更喜欢而不是等待,则驱动程序返回错误,设置waitForConnections : false

或者,如果您希望驱动程序返回错误,例如,如果有25个请求排队等待接收连接,请设置queueLimit : 25