标签: node-mysql

为什么Node.js中的MySQL如此之慢?

我的Node.js代码如下所示

CODE1:下面

var http=require('http');
var MySQL = require('mysql');

mysql = MySQL.createConnection(...)

http.createServer(function(req, res){
    // the query will take several seconds
    mysql.query("SELECT SLEEP(1)", function....)
});
http.listen(...);
Run Code Online (Sandbox Code Playgroud)

问题是当我刷新页面太快时服务器将崩溃.我认为是node-mysql模块的问题,它在队列中处理查询.所以我尝试创建一个连接池.

CODE2:下面

....
var pool = require('generic-pool');
var mp   = pool.Pool({
    ...
    create: function(cb){
        client = MySQL.createConnection(...);
        cb(null, client)
    },
    max: 10, // up to 10 connection
    min: 2,
    ...
});
....
    mp.acquire(function(err, mysql){

        // the query will take several seconds
        mysql.query("SELECT SLEEP(1)", function....)
        mp.release(mysql);
    });
....
Run Code Online (Sandbox Code Playgroud)

但问题还存在,为什么?我怎样才能解决这个问题.

编辑:我发出100个并发100个请求,预计10秒.但它需要20秒.为什么?该池最多只支持5个连接吗?

mysql node.js node-mysql

7
推荐指数
1
解决办法
4213
查看次数

node-mysql - 何时将连接释放回池中

我正在使用node-mysql连接池的驱动程序.

当只有一个查询时,将连接释放回池中很容易:

pool.getConnection(function(err, connection) {
  if (err) {
    throw err;
  }

  query = "SELECT * FROM user WHERE id = ?";
  connection.query(query, [id], function(err, users) {
    connection.release();

    if (err) {
      throw err;
    }

    // ...
  });
});
Run Code Online (Sandbox Code Playgroud)

如果我需要再次使用该连接怎么办?我不得不release()向下移动几行.但是如果抛出错误会发生什么?连接是否永远不会返回池中?

我是否必须使用一些控制流程库来获得"最终"时刻才能释放它?
有更好的想法吗?

mysql connection-pooling node.js node-mysql

7
推荐指数
1
解决办法
4948
查看次数

使用node-mysql,NodeJS和Q更新多行

我正在使用node-mysql,node-js和Q promises.

我已使用上面的内容成功更新,删除和插入了单行.以及在我的测试用例场景中的单个语句中插入多行.

但是,我需要在单个查询或for循环中更新具有不同值(批处理模式)的多个行.

有关如何在mysql2中使用预处理语句的信息(应该在node-mysql上进行改进)非常稀疏且没有示例,尽管这应该是自然的选择,同时还有补偿node-js异步性质的承诺.

另外,我已经在各种测试场景中成功使用了defered.makeNodeResolver().

我试图使用where子句和更改条件更新单个查询中的多个行.

当我更新单行时,它正在工作.但是,当我尝试使用单个查询更新多个行时,记录不会更新.

我准备切换到使用for循环执行多个更新,然后聚合结果并将其从服务器发送回客户端,这将是我的第二选择.如果没有太多的性能影响,我不明白为什么不应该这样做.但我没有找到任何这样做的例子.

var values = [
    { users: "tom", id: 101 },
    { users: "george", id: 102 }
    ];

    // var params = [values.users, values.id ];

    var sql = 'UPDATE tabletest SET users = ? WHERE id = ?;';


    connection.query(sql, [{users: values[0].users}, {id: values[0].id }], defered.makeNodeResolver());
Run Code Online (Sandbox Code Playgroud)

上面显示的代码实际上并没有更新多行.我想我的语法有错误.

但无论如何,在这种特殊情况下,最好的方法是什么?准备好的语句,for循环中的重复查询或存储过程?

node.js promise node-mysql angularjs

7
推荐指数
2
解决办法
1万
查看次数

Node-Mysql抛出连接超时

由于连接超时,我的node.js应用程序给出了5xx.这是我连接和查询的方式:

var mysql = require('mysql');
var config = {  
            host: '172.10.1.1',
            port: 3306,
            user: 'user',
            password: 'pwd',
            database: 'mydb',
            connectionLimit: 15,
            queueLimit: 30
        }

var poolCluster = mysql.createPool(config);

var queryDB = function(query, cb) {
    poolCluster.getConnection(function(err, connection) {
        if(err) {
            cb(err, null);
        }
        else {
            connection.query(query, function (err, rows) {
                connection.release();
                cb(err, rows);
            });
        }
    });
};
Run Code Online (Sandbox Code Playgroud)

此外,在另一个备用版本中,禁用连接池,代码如下所示:

queryDB = function(query, cb) {
    var connection = mysql.createConnection(config);
    connection.query(query, function(err, rows) {
        connection.end();
        cb(err, rows);
    });
};
Run Code Online (Sandbox Code Playgroud)

但这两个设置都给出了错误:在Connection._handleConnectTimeout连接ETIMEDOUT

可以在此处看到与我当前设置类似的项目:https://github.com/hay-wire/NodeBootstrap/blob/master/models/UsersUtils.js …

javascript mysql amazon-rds node.js node-mysql

7
推荐指数
2
解决办法
2万
查看次数

什么是最好的Node.js mysql模块通过ssl连接到mysql?

到目前为止,我使用node-mysql构建了我的应用程序.我只是使用AWS RDS服务建立了一个安全可访问的mysql数据库,并使用mysql命令行客户端成功测试了SSL连接.我有亚马逊的公钥.pem文件.node-mysql似乎没有SSL连接选项的api.

到目前为止,我发现的唯一一个是Node-mysql-libmysqlclient,但是我尝试连接它时遇到错误,关于绑定依赖项为null的事情,所以我不确定我是否应该相信它.建议使用哪个模块/ api?或者,如果你知道我需要在node-mysql中修改什么,我会愿意修改一下,但看起来它正在使用较低级别的套接字连接到MySQL所以我不确定它有多难以获得SSL部分已添加.

mysql ssl node.js node-mysql

6
推荐指数
2
解决办法
5164
查看次数

避免 Node.js 中 EPIPE 错误的最大查询长度

我正在使用felixge/node-mysql模块从 node.js 与 MySQL 数据库进行交互。我在一次请求中向数据库插入大量数据时遇到了问题INSERT

尽管这里描述了如何使用大型 INSERT 查询向数据库添加 500,000 条记录,但我的脚本因数据量更小而失败,并出现以下错误:

{ [Error: write EPIPE] code: 'EPIPE', errno: 'EPIPE', syscall:
'write', fatal: true }
Run Code Online (Sandbox Code Playgroud)

我认为这个错误在某种程度上与mysql-node 的 github Load data infile failed with EPIPE for large files中的问题#359有关,该问题自创建以来的最后 5 个月内尚未分配给某人。

那么保证交付的查询的实际大小是多少?

bulkinsert load-data-infile node.js node-mysql

6
推荐指数
1
解决办法
4308
查看次数

为什么 Node JS 中的 Mysql 查询执行比直接的 Mysql 查询执行慢得多?

询问: select id, event_time from events where event_time > 1395797406712 and event_time < 1398389406712 order by event_time asc

此查询返回约 25k 行(总大小 500KB)。

当我使用驱动程序在 Node.js 中查询上述查询时node-mysql,执行大约需要 3-4 秒。(我使用console.time和console.timeEnd)

当我直接在 mySql 中查询它时,它说需要大约 200 毫秒。

是什么造成了这种巨大的差异,以及如何改进 Node.js 实现以与直接 Mysql 查询内联?

mysql performance database-performance node.js node-mysql

6
推荐指数
1
解决办法
3682
查看次数

通过node.js向mysql中插入多行

我想通过 node.js mysql 模块将多行插入到 mysql 中。我拥有的数据是

var data = [{'test':'test1'},{'test':'test2'}];
Run Code Online (Sandbox Code Playgroud)

我正在使用游泳池

 pool.getConnection(function(err, connection) {
     connection.query('INSERT INTO '+TABLE+' SET ?', data,   function(err, result) {
          if (err) throw err;
            else {
                console.log('successfully added to DB');
                connection.release();
            }
      });
 });
}
Run Code Online (Sandbox Code Playgroud)

这失败了。

有没有办法让我进行批量插入并在所有插入完成后调用函数?

问候锤子

mysql node.js node-mysql

6
推荐指数
3
解决办法
3万
查看次数

使用Node JS将记录数组插入mysql

我有一些类似的数据

var records = [
               {Name: '', Id: 1},
               {Name: '', Id: 2},
               {Name: '', Id: 3},
               {Name: '', Id: 4},
               {Name: '', Id: 5},
               {Name: '', Id: 6}
              ];
Run Code Online (Sandbox Code Playgroud)

记录数组中可能有数千个项目......

问题1:我们可以创建一个存储过程来接受mysql中的对象数组吗?

问题2:有没有办法用Node JS将这些数据批量插入mysql?

mysql bulkinsert node.js bulkloader node-mysql

6
推荐指数
1
解决办法
7562
查看次数

node-mysql 重新抛出非 MySQL 错误

我刚刚将我的节点 api 切换为使用node-mysql。它不断抑制我的错误/堆栈跟踪,使开发和调试成为一场噩梦。例如,我正在编写一个新功能,但出现此错误:

/opt/figo/banking/node_modules/mysql/lib/protocol/Parser.js:78
    throw err; // Rethrow non-MySQL errors
          ^
TypeError: string is not a function
Run Code Online (Sandbox Code Playgroud)

mysql模块是必不可少的重新措辞我的原始错误消息。我怎样才能让它停止这样做?我只想确切地看到它失败的地方,而不是node-mysql决定重新抛出我的错误的地方。

node.js node-mysql

6
推荐指数
1
解决办法
1万
查看次数