nodejs和mysql中的javascript连接池问题

klsxnrf1  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(659)

我正在使用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});

当消息传递给500万用户时,使用这个查询的api就可以工作了。它使连接保持打开状态。这导致服务器处理速度非常慢。是否有其他解决方案来提高服务器性能?

svmlkihl

svmlkihl1#

矛盾的是,减少连接的数量通常会提高性能。池连接是可串行重用的资源,并且有一个连接请求队列。因此,dbms将不尝试一次执行大量查询,而是一次处理较少数量的查询,并按顺序处理负载。
因此,对于像您这样应该运行很短时间的查询,请创建一个具有小connectionlimit的池。试试10个。如果效果好,试试5。
如果有其他需要更长时间的查询,则可能需要为这些查询使用不同的连接池。
更不用说集群节点应用程序将为集群的每个成员打开相同数量的连接。400个连接对于几乎所有mysql部署来说都太多了(如果您的部署可以处理数百个连接,那么您的采购经理就会知道,因为这样的部署非常昂贵。)
但是,您可能会遇到这个问题:如果数百万用户正在更新完全相同的行 msgId = 10 您将在该行上有dbms争用。在这种情况下,您可能需要将命中数存储到行中,然后执行以下操作 UPDATE... SET count = count + n 每几秒钟一次,而不是每次击中。

相关问题