【问题标题】:Connection pooling issue in nodeJS and MySqlnodeJS和MySql中的连接池问题
【发布时间】:2019-03-03 07:46:11
【问题描述】:

我正在使用 NodeJs 和 Mysql。 我有一个查询将 mysql 表中的一个字段更新为:

Update messaging SET count = count + 1 WHERE msgId = 10;

我正在使用连接池。配置为:

var pool = mysql.createPool({
connectionLimit : 100,
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database,
port: 3306,
debug: false,
multipleStatements: true});

使用此查询的 API 在将消息传递给 500 万用户时工作。 它使连接保持打开状态。这导致服务器处理非常缓慢。 是否有任何替代解决方案可以提高服务器性能

【问题讨论】:

    标签: javascript mysql node.js concurrency connection-pooling


    【解决方案1】:

    自相矛盾的是,减少连接数通常会提高性能。池连接是可串行重用的资源,并且有一个连接请求队列。因此,DBMS 不会一次尝试执行大量查询,而是一次处理较少数量的查询,并串行处理负载。

    因此,对于像您这样应该在短时间内运行的查询,请创建一个具有较小 connectionLimit 的池。试试 10。如果效果不错,试试 5。

    如果您有其他需要更长时间的查询,您可能需要为这些查询使用不同的连接池。

    更不用说集群节点应用程序将为集群的每个成员打开该数量的连接。对于几乎所有 MySQL 部署来说,400 个连接太多了。 (如果您有一个处理数百个连接的部署,您的采购经理就会知道,因为这样的部署非常昂贵。)

    但是,您可能会遇到这个问题:如果数百万用户正在更新完全相同的行msgId = 10,您将在该行上发生 DBMS 争用。在这种情况下,您可能希望存储该行的点击次数,然后每隔几秒执行一次UPDATE... SET count = count + n,而不是每次点击一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多