gpt4 book ai didi

javascript - nodeJS 和 MySql 中的连接池问题

转载 作者:行者123 更新时间:2023-11-30 21:39:13 25 4
gpt4 key购买 nike

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

更新消息 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 起作用。它使连接保持打开状态。这导致服务器处理速度非常慢。是否有任何替代解决方案来提高服务器性能

最佳答案

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

因此,对于像您这样应该运行很短时间的查询,请创建一个连接限制较小的池。尝试 10。如果效果不错,请尝试 5。

如果您有其他需要更长时间的查询,您可能需要一个不同的连接池。

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

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

关于javascript - nodeJS 和 MySql 中的连接池问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52536228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com