【问题标题】:nodeJS mysql library how to serially execute querynodeJS mysql库如何串行执行查询
【发布时间】:2018-03-05 00:39:53
【问题描述】:

举例来说,如果我有如下代码,它会串行执行还是并行执行?

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'me',
  password : 'secret',
  database : 'my_db'
});

connection.connect();

let transaction = 'START TRANSACTION; //DO SOMETHING COMMIT;'

connection.query(transaction, function (error, results, fields) {
  if (error) throw error;
  console.log(results);
});

connection.query(transaction, function (error, results, fields) {
  if (error) throw error;
  console.log(results);
});

connection.end();

确实如此

MySQL 协议是顺序的,这意味着你需要多个 连接以并行执行查询。您可以使用 Pool 来 管理连接,一种简单的方法是创建一个连接 每个传入的 http 请求。

在网站上,但我想知道“顺序”是否意味着查询按顺序发送到数据库但“并行”执行,或者是否意味着在第一个查询完全执行之前永远不会发送下一个查询(这就是我的意思是串行)。

如果它们在数据库中并行“执行”,我如何确保每个查询都作为单独的transaction 提供?我问是因为我必须处理多个查询(可能同时向服务器请求)以在数据库中串行执行。当然这在多个连接下是可能的(多个连接到具有不同终端实例的 mysql 服务器)但是我如何使用这个 mysql nodejs 库模拟那个环境?

我不能使用承诺或回调,因为我不知道有多少或何时执行查询。每次从客户端向服务器进行查询时,我只能调用connection.query

【问题讨论】:

    标签: mysql sql node.js database transactions


    【解决方案1】:

    您可以利用 javascript 承诺来解决您的问题。您可以查看https://github.com/tuhinpaul/syp-model/wiki/Programmatic-(Dynamic)-Chaining-and-Recursive-Functions-with-JavaScript-or-Node.js-Promises 了解如何串行执行任务。

    syp-model 包提供了顺序执行查询的能力,尽管此时文档需要更多工作;而且它还没有集成事务支持。

    有帮助吗?

    【讨论】:

    • 我忘了说我不能使用 Promise,因为我不知道会同时执行多少个查询。所以对于 ex,我只会为从客户端到服务器的每个请求执行 connection.query,所以我不知道哪个承诺链接到哪个承诺
    猜你喜欢
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2014-03-05
    • 1970-01-01
    • 2014-09-25
    相关资源
    最近更新 更多