在一个mongo数据库中,我有大约400万个文档(每个文档由一个时间戳和一个值组成)。
我有一个需要能够通过rest api查询所有文档的用例。我在控制器中使用sails-mongo或直接使用node-mongodb-native对sailsjs进行了几个测试,但这两个解决方案都不起作用,进程挂起,再也不会返回。
第一个案例:来自mongo shell
var v= db.data.find()
v.length() => returns 4280183 in something like 30 sec在mongodb.log中,我可以看到所有的'getmore‘行和返回的项目数
第二种情况:从我的sails控制器(使用node-mongodb-native)
// TEST WITH MONGODB NATIVE
native_find: function(req, res){
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/jupiter';
MongoClient.connect(url, function(err, db) {
console.log("Connected correctly to server");
var collection = db.collection('data');
// Find all data
collection.find({}).toArray(function(err, d) {
db.close();
res.json(d);
});
});
}该过程被触发,mongo似乎可以工作,但过了一段时间后,我出现了以下错误:
$ curl 'http://192.168.1.143:8000/native_find'
curl: (52) Empty reply from server如果我检查mongo日志,我可以看到一些getmore,但不足以查询整个集合。
第三种情况:从sails控制器到sails-mongo ORM
// TEST WITH SAILS-MONGO
sailsmongo_find: function(req, res){
Data.find().exec(function(err, d){
return res.json(d);
});
}似乎一旦从mongo中检索到结果,就会对整个结果(4.000.000次...)进行几次循环(在rewriteID中映射并调用toJSON方法)。耗费了大量的时间,导致这个过程永远挂起。
你知道如何让node / mongo对这些海量数据进行查询吗?
发布于 2014-10-27 08:02:35
这是一个单一操作中要检索的大量数据,尝试以异步方式,在批处理过程中获取数据。
也许你可以将结果限制在100.000或200.000,然后将它们保存到一个数组中,然后你可以要求更多的结果。
您可以使用async来实现这一点。
https://stackoverflow.com/questions/26550604
复制相似问题