长levelup查询

时间:2014-03-16 19:55:02

标签: node.js express leveldb

我有这条明确的路线......

app.get('/:grp/:time', function(req, res){
  var out = [];
  var grp = grpmap[req.param('grp')];
  var time = timemap[req.param('time')];
  leveldb.createReadStream({start:'HEM!' + grp + '!' + time + '!', end:'HEM!' + grp + '!' + time + '!\xff', keys: false})
    .on('data',function(data){
      out.push(JSON.parse(data));
    })
    .on('close',function(){
      res.send(out);
    })
});

它按预期工作,但需要花时间填充,客户端在收到响应之前会停留几秒钟。必须有一个更好的方法..一些提示?

感谢名单。

1 个答案:

答案 0 :(得分:0)

这需要很长时间,因为你在发送任何内容之前都要缓冲整个结果集。

您要做的是流式传输数据而不是缓冲。你会想要像JSONStream那样使用像这样的模块:

var JSONStream = require('JSONStream')

app.get('/route', function (req, res) {
  db.createReadStream({...}).pipe(JSONStream.stringify()).pipe(res);
})

整个请求可能需要相同的时间,但您应该开始非常快速地接收数据,因为这不会等到所有结果都被缓冲后再发送任何内容。