我找到了一个非常好的模块(node-mysql)来连接到Mysql数据库。
该模块非常好,我只有一个关于“WHEN”打开与Mysql连接的问题。
我在使用node之前总是使用php-mysql,对于每个请求我打开了一个连接...然后查询....然后关闭。
与节点相同吗?对于每个请求,我是否必须打开连接然后关闭它?或者我可以使用持久连接吗?
谢谢
答案 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的回答一样):最好的情况是利用池来管理连接。