connectionLimit如何在节点mysql中工作?

Vik*_*kas 3 mysql node.js express node-mysql

我挺不理解如何connectionLimitmysql的模块工作。

我通过以下方式创建了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
  });
Run Code Online (Sandbox Code Playgroud)

现在,极限5在这里做什么?

我的想法是:

假设有5个用户使用我的REST api从表中选择数据。现在,在我的api中,我从pool获得连接,进行处理,然后释放连接。

因此,现在假设有12个用户同时向该api发送请求。因此,它们中的前5个应该访问数据,而其他7个将获得错误/无响应。他们将不得不再次请求以获取数据。

是这样还是其他?

rob*_*lep 5

是这样还是其他?

这是另一回事。

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

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

所有这些都可以使用此处记录的选项进行微调。例如,如果您宁愿等待而不是等待,驱动程序将返回错误set waitForConnections : false

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

  • 当然,这取决于情况,但如果您的服务器上 200 个并发请求很常见,那么我认为将“connectionLimit”设置为该数字似乎最有意义。 (2认同)