Node.js 我应该保持数据库连接打开吗?

Node.js 我应该保持数据库连接打开吗?,node.js,titan,rexster,Node.js,Titan,Rexster,当我用Grex连接到Rexster graph server时,我应该保持数据库连接打开吗 var grex = require('grex'); var client = grex.createClient(); client.connect({ graph: 'graph'}, function(err, client) { if (err) { console.error(err); } ... }); 我想我应该这样做,因为nodejs是单线程的,所以不可能有不同的

当我用Grex连接到Rexster graph server时,我应该保持数据库连接打开吗

var grex = require('grex');
var client = grex.createClient();

client.connect({ graph: 'graph'}, function(err, client) {
    if (err) { console.error(err); }

    ...
});

我想我应该这样做,因为nodejs是单线程的,所以不可能有不同的请求试图同时使用一个连接。

是的,你应该这样做。没有理由在每个请求上都有连接开销。不会有任何“混乱”的问题,因为您的代码将在一个线程中运行


此外,您甚至可以有一个连接池等待为您的请求提供服务,以防您的应用程序使用量过大。一些适配器会自动为您执行此操作,例如,它有一个默认的5个连接池。

JavaScript对于普通代码是单线程的。对于异步代码(回调或事件),JS是多线程的。我认为它是在不同代码块之间切换的单个线程。因此,如果您有一些等待回调的代码,Javascript会在其他地方启动,然后在完成等待某个内容并完成运行的任何其他内容后返回回调。但是它从来不会同时运行超过一位的代码。@IanWarburton谢谢:)想想,这不就是单线程的http请求位吗?异步操作(如数据库访问)交给线程,因此您肯定可以同时运行多个查询?@IanWarburton On Nodejs,您编写的代码在单个线程上运行。所有IO操作都被发送到“循环”,这是一个线程池,以特定的方式执行任务。这就是为什么你有回调-IO说“准备好!”,回调启动。您可以在IO端同时运行大量查询,并由“循环”处理,在您的代码上,它们都会逐个启动各自的回调。。。。如果您对所有数据库工作都使用一个连接,那么每个线程不是都使用同一个事务吗?@IanWarburton为了更好地理解事件循环在nodejs上的工作方式,这是一篇精彩的文章:-您将学到比您所希望的更多:)