【问题标题】:How does connectionLimit work in node mysql?connectionLimit 在节点 mysql 中如何工作?
【发布时间】:2018-01-13 08:13:54
【问题描述】:

我很不明白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 从表中选择一些数据。现在在我的 API 中,我从 pool 获得一个连接,做一些事情,然后 release 连接。

所以现在,假设有 12 个用户同时向这个 API 发送请求。所以首先 5 应该可以访问数据,其他 7 将得到错误/无响应。他们将不得不再次请求以获取数据。

是这样还是别的什么?

【问题讨论】:

    标签: mysql node.js express node-mysql


    【解决方案1】:

    是这样还是别的什么?

    这是另一回事。

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

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

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

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

    【讨论】:

    • 好的。所以假设我的服务器上有 200 个并发请求,我应该去connectionLimit: 200 还是只要没有大队列就可以等待? (例如,设置类似connectionLimit: 100queueLimit: 100
    • 当然,这取决于,但如果 200 个并发请求在您的服务器上很常见,那么我会说将 connectionLimit 设置为该数字似乎最有意义。
    • 设置200个连接对我的mysql服务器会不会不好! (默认为 10)。节点mysql可以处理这个吗?
    • 我认为它没有被自动发布的唯一可能是因为mysql 模块中的错误,这不太可能。
    • @VikasKumar 那里的 cmets 有意义:使用 pool.query() 而不是 pool.getConnection/connection.release
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 2023-04-06
    • 2019-04-24
    • 1970-01-01
    相关资源
    最近更新 更多