В базе данных mongo у меня есть что-то вроде 4 миллионов документов (каждый документ состоит из отметки времени и значения).
У меня есть прецедент, где мне нужно иметь возможность запрашивать все документы через rest api. Я сделал sevreral тесты с sailsjs, используя паруса-монго или непосредственно node-mongodb-native в контроллере, но ни один из этих двух решений не работает, процесс зависает и никогда не возвращается.
Если я использую непосредственно оболочку mongo, я могу запросить всю коллекцию (конечно, она немного длинная, но это много данных).Не удается запросить всю коллекцию через паруса (sails-mongo или mongodb-native)
первый случай: от Монго оболочки
var v= db.data.find()
v.length() => returns 4280183 in something like 30 sec
В mongodb.log я могу видеть все «getmore» строки с числом элементов, возвращенных
2-й случай: от моего контроллера парусами (с помощью узла -mongodb родной)
// 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);
});
});
}
процесс запускается, монго, кажется, работает, но через некоторое время у меня есть следующее сообщение об ошибке:
$ curl 'http://192.168.1.143:8000/native_find'
curl: (52) Empty reply from server
Если я зарегистрирую журнал монго, я могу увидеть некоторые getmore, но запросов для всей коллекции недостаточно.
третьего случая: от парусов контроллера через паруса-Монго ОРМ
// TEST WITH SAILS-MONGO
sailsmongo_find: function(req, res){
Data.find().exec(function(err, d){
return res.json(d);
});
}
Кажется, когда результаты полученные из Монго, несколько петель (карты в rewriteIDs и призыв к toJSON метода) на целом результатов (4,000 .000 раз ...) берут loooot времени и заставляют процесс зависать вечно ...
Любая идея о том, как иметь узел/монго для запроса на этот большой объем данных?