【发布时间】:2014-03-20 01:41:43
【问题描述】:
我正在寻找通过我的 Node.js 服务器层将数据从 MongoDB 流式传输到我的 Web 客户端的最佳方式。我请求每个查询大约 10MB 的数据,并且查询已经在 day_timestamp 上建立了索引。注意,I have already read this post.
我正在使用的唯一Mongo相关模块如下(我需要其他人来实现我的目标吗?):
MongoClient = require('mongodb').MongoClient;
目前我的代码如下所示:
MongoClient.connect('mongodb://host:port/myDatabase', function(err, db) {
if(err) throw err;
console.log("Connected to Database");
// Server picks up URL requests made by browser
app.get("/:type/:category/:resolution/:from/:to/", function (req, res){
var start = moment();
var type = String(req.params.type)
,category = String(req.params.category)
,resolution = String(req.params.resolution)
,from = moment.utc(req.params.from).toDate()
,to = moment.utc(req.params.to).toDate()
,options = {
parse : true,
accept : 'application/json'
};
res.set('Content-Type', 'application/json'); // Required?
res.writeHead(200, { 'Content-Type': 'application/json'}); // Required?
var collection = db.collection(category);
var stream = collection.find({'day_timestamp':{'$gte':from, '$lte':to}})
.sort({day_timestamp:1})
.stream()
.pipe(JSONStream.stringify())
.pipe(res)
});
});
这可行,但与“正常”collection.find() 回调嵌套res.json(...);相比似乎没有提供任何性能提升@
我想了解一些事情。
首先,我想将数据从 MongoDB 直接流式传输到我的 Nods.js 服务器……一旦它到达我的服务器,就直接将其流式传输到客户端。如果需要,这可以一直是 BSON,我可以在客户端反序列化它。这可能吗?
其次,我将如何添加一个示例来计时此流性能与正常的 collection.find() 回调?使用后一个示例,我可以轻松实现这一点,但我不清楚如何使用流示例来实现(由于.pipe,nb stream.end 似乎无法正常工作,因为.pipe)
第三,我试图尽可能快地将我的数据从 MongoDB 获取到我的客户端,并且我的 Node.js 不需要做太多(如果有的话)数据处理,因为数据是按要求存储在数据库中的。我是否正在以实现这一目标的书面方式来处理事情?
【问题讨论】:
-
21 次观看?这是一个如此热门的话题,没有答案:(?
-
为什么使用 JSONStream?直接管:mongoosejs.com/docs/api.html#querystream_QueryStream-pipe
-
感谢您在 30 个月后发表评论;)不记得我现在是如何解决这个问题的。
-
你真的应该调查它并自己回答问题以将其标记为已回答......并回馈社区!
-
我经常这样做,我只是忘记了这个
标签: javascript node.js mongodb express stream