【问题标题】:NodeJS: Where to connect to the database in code?NodeJS:在哪里连接到代码中的数据库?
【发布时间】:2011-07-24 21:22:33
【问题描述】:

我有一个在 NodeJS 上运行的简单快速服务器,我想在接收请求时执行数据库查询。我的设置与此类似

var srv = require('express').createServer();
var db = new DbConnection(dsn);

srv.get('/', function (req, res) {
    var result = db.query(query);

    res.send(result);
});

srv.listen(80);

我会遇到并发问题吗?如果同时处理两个请求并因此同时进行查询怎么办?

我也想过这个办法

srv.get('/', function (req, res) {
    var db = new DbConnection(dsn);

    var result = db.query(query);

    res.send(result);
});

您认为最好的方法/做法是什么?

【问题讨论】:

    标签: mysql database concurrency asynchronous node.js


    【解决方案1】:

    node.js 性能的关键是永远不要阻塞线程。

    var result = db.query(query);
    

    是一个很大的禁忌。

    db.query(query, function(result) {
      res.send(result);
    });
    

    是处理请求查询的方式

    连接一次应该没问题,大多数数据库都没有队列问题。

    【讨论】:

    • 我知道 NodeJS 的优势在于它的异步行为。但是我错过了这种行为将在不隐含并发的线性方法中提高性能的观点(类似于我的)。与我的相比,我并没有真正看到您的异步方法的意义(和好处)。事实上,同步行为还具有线性异常传播的好处,我利用了这一点。
    • 但是感谢您对数据库并发访问的解释。我希望将来我不会在使用单个连接时偶然发现任何问题。
    • @Christian Toma 您错过了关于节点的要点。每个 IO 都是非阻塞和异步处理的原因是因为它只是一个事件循环,一个单线程。如果您像这样使其同步,您将无法在 db 服务器返回之前处理另一个请求,并且您的节点服务器将处于空闲状态。正是事件循环和非阻塞 IO 的结合使节点如此之快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 2016-12-03
    • 2018-07-22
    • 2013-10-22
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多