【问题标题】:Node js mysql works syncronous (strange behaviour)节点 js mysql 工作同步(奇怪的行为)
【发布时间】:2021-06-27 18:05:22
【问题描述】:

好的,需要一些帮助。

在 node js 和 mysql 上有一个应用程序。我不完全了解连接的行为。

这是我的代码(部分)。

let connection = mysql.createConnection({
    host: "localhost",
    database: "mans",
    user: 'root',
    password: '',
}).promise();

let results = [
    // array of objects
];

await Promise.all(
    results.map(r=>{
        return connection.query("UPDATE `table` SET `name` = ?, WHERE `id` = ?", [r.name, r.id]).then(r=>{
            console.log('end iteration');
        }).catch(err=>{
            console.log('err: ', err);
        });
    })
)   

现在,当map 函数启动时(当然是 aync,正如预期的那样),然后query 就像简单的同步函数一样工作!好吧,也许是因为我没有使用游泳池。所以我重写了。

let pool = mysql.createPool({
    connectionLimit: 100,
    host: "localhost",
    database: "mans",
    user: 'root',
    password: '',
}).promise();

let results = [
    // array of objects
];

await Promise.all(
    results.map(r=>{
        return pool.getConnection().then(connection=>{
            console.log('opened connection');
            return connection.query("UPDATE `table` SET `name` = ?, WHERE `id` = ?", [r.name, r.id]).then(r=>{
                connection.release();
                console.log('end iteration');
                return;
            }).catch(err=>{
                console.log('err: ', err);
            });
        }).catch(err=>{
            console.log('err: ', err);
        });
    })
)   

打开连接事件异步触发并成功,但更新仍然相互等待。我做错了什么?

【问题讨论】:

  • 好的,一些更新。尝试使用START TRANSACTION 和COMMIT 命令。在我的本地 Windows 服务器上它可以工作,所有操作都异步了。没有它,它是同步的。但它不适用于 Ubuntu 18.04 和 mysql 5.7 的服务器。操作仍然同步。更新后更新。检查引擎,它是InnoDB

标签: mysql node.js asynchronous


【解决方案1】:

最后,我得到了一些结果。但这对我来说没有任何意义。如果有人可以澄清这一点,请这样做。

在WHERE 语句中添加INDEX 到ID 字段(没有它)解决了我的问题。借助 START TRANSACTION 和 COMMIT 功能,它开始异步工作。

同样,没有它或没有 id 上的索引,更新工作同步 - 仅当前一个结束时。

【讨论】:

  • 它可能不会更改为异步,但现在更新速度如此之快,您无法区分。
  • 好吧,你是对的。我做了另一个基准测试,是的,速度很快,但还是一个接一个。但是,我的问题仍然悬而未决,为什么它不能按我的意愿异步工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2015-06-09
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
相关资源
最近更新 更多