何时使用node-mysql模块打开连接?

时间:2011-07-07 08:57:52

标签: mysql node.js

我找到了一个非常好的模块(node-mysql)来连接到Mysql数据库。

该模块非常好,我只有一个关于“WHEN”打开与Mysql连接的问题。

我在使用node之前总是使用php-mysql,对于每个请求我打开了一个连接...然后查询....然后关闭。

与节点相同吗?对于每个请求,我是否必须打开连接然后关闭它?或者我可以使用持久连接吗?

谢谢

2 个答案:

答案 0 :(得分:6)

open-query-close模式通常依赖连接池来表现良好。 Node-mysql没有任何内置的连接池,因此如果你使用这种模式,你将支付每次运行查询时建立新连接的成本(在你的情况下可能会或可能不会很好)。

因为节点是单线程的,所以你可以使用单个持久连接(特别是因为如果连接中断,node-mysql将尝试重新连接),但如果你打算使用事务,那么这种方法可能存在问题(因为节点客户端的所有用户共享相同的连接,因此共享相同的事务状态)。此外,单个连接可能是吞吐量的限制,因为一次只能执行一个sql命令。

因此,对于事务安全性和性能,最好的情况是使用某种池。您可以在应用程序中自己构建一个简单的池,或者调查其他包以提供该功能。但是,无论是open-query-close还是持久连接方法都可能适用于您的情况。

答案 1 :(得分:4)

felixge / node-mysql现在有连接池(在撰写本文时)。

https://github.com/felixge/node-mysql#pooling-connections

以下是上述链接中的示例代码:

var mysql = require('mysql');
var pool  = mysql.createPool(...);

pool.getConnection(function(err, connection) {
  // Use the connection
  connection.query( 'SELECT something FROM sometable', function(err, rows) {
    // And done with the connection.
    connection.end();

    // Don't use the connection here, it has been returned to the pool.
  });
});

所以回答你的问题(和@Geoff Chappell的回答一样):最好的情况是利用池来管理连接。