gpt4 book ai didi

javascript - Node.js、Express、MongoDB 和流

转载 作者:IT老高 更新时间:2023-10-28 23:27:40 25 4
gpt4 key购买 nike

我正在寻找通过我的 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() 回调?使用后一个示例,我可以轻松实现这一点,但我不清楚如何使用流示例来做到这一点(n.b. stream.end 似乎没有像我预期的那样工作,因为.pipe)

第三,我试图尽可能快地将我的数据从 MongoDB 获取到我的客户端,并且我的 Node.js 不需要做太多(如果有的话)数据处理,因为数据是按要求存储在数据库中的。我是否正在以实现这一目标的书面方式去做事情?

最佳答案

每次有数据要写入时,它都会写入 res:

var stream = collection.find({'day_timestamp':{'$gte':from, '$lte':to}})
.sort({day_timestamp:1})
.stream();

stream.on('data', function(data) {
res.write(JSON.stringify(data));
});

stream.on('end', function() {
res.end();
});

关于javascript - Node.js、Express、MongoDB 和流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21885352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com