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

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

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

我总是使用php-mysql之前开始使用节点,每个请求我打开一个连接…然后查询….然后closures。

和节点一样吗? 对于每个请求我必须打开一个连接,然后closures它? 或者我可以使用持久连接?

谢谢

开放查询closures模式通常依赖连接池来执行。 Node-mysql没有任何内置的连接池,所以如果你使用这个模式,你将在每次运行一个查询(在你的情况下可能会或可能不会)都支付build立一个新连接的开销。

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

所以,对于事务安全和性能来说,最好的情况就是使用某种联合。 您可以自己在应用程序中创build一个简单的游戏池,或者调查其他软件包以提供该function。 但是无论是开放查询closures还是持久连接方法都可能适用于您的情况。

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的回答相同):最好的情况是利用池来pipe理连接。