使用node.js从mysql查询大量数据时,网页呈现失败

时间:2013-08-12 16:52:08

标签: mysql node.js

我正在尝试从node.js查询mysql数据库并在网页上显示其结果。当mysql表的大小很小时,我的代码可以工作。但是当mysql表的大小很大,大约4GB时,执行查询需要相当长的时间。虽然数据是从mysql表中提取的,但是我可以在节点控制台中看到它,因为我将其打印出来, 网页不呈现数据。我假设发生了一些超时,因此,它不会呈现任何内容,只是说'网页不可用'。

这是我的代码:

    var connection = mysql.createConnection({
         host: 'localhost',
         user: 'xxxx',
         password: 'xxxxxx',
         debug: true
       });
       connection.connect(function (err) {
          if (err) {
          console.log('error in connection is :' + err);
          res.send(500);
          } else {

          connection.query(query, function (err1, rows) {
          // connected! (unless `err` is set)
          if (err1) {
            console.log('error' + err1);
            var model = [{
                "error": "No data matching the query"
            }];
            res.json(model);

           } else {
            console.log('result of query' + rows);
            res.json(rows);
        }

    });
}

});

我正在使用dust.js来渲染数据。

任何有关我缺少的内容都会有所帮助。

1 个答案:

答案 0 :(得分:0)

你可能不会错过很多,而且可能是你提到的超时。这实际上取决于您希望客户的行为方式:

1)你可以增加客户端的超时时间(也许它是一个内部应用程序,可以增加?也许它是一个XHR对象,你可以控制超时,让它在后台“等待”,同时用户正忙着做页面上的其他内容?)。

2)您可以在后台更改客户端代码,一旦获得结果就更新DOM。

3)您可以拥有一个包含结果的服务器端队列,立即向客户端返回“作业ID”并让客户端对其进行轮询。或者也许使用“彗星”并在作业完成后向客户发送通知。

正如我所说,你真的需要定义你希望客户的行为方式。