У меня есть приложение node.js, которое использует задания kue для просмотра больших коллекций с помощью курсоров мангуста.
конфигурация задания kue:
function childJob(cid, name, dataset, type, link, line, market, done) {
var deferred = Q.defer();
mongoose.model(dataset).count({processed:{$ne:1}}, function(err, total){
console.log('total', total);
var job = jobs.create('child', {
type: 'CHILD',
cid: cid,
title: name,
dataset: dataset,
kind: type,
link: link,
line: line,
market: market,
current: 0,
total: total
});
job
.on('complete', function() {
deferred.resolve({
done: true,
job: job.data,
success: true
});
})
.on('failed', function() {
deferred.resolve({
done: true,
job: job.data,
success: false
});
})
job.save();
return deferred.promise;
});
}
При каждом запуске дочернего задания:
jobs.process('child', 10, function(job, done) {
var count = 0;
mongoose.model(job.data.dataset).find({processed:{$ne:1}}).lean().batchSize(1000).cursor().eachAsync(function(record){
functions.workRecord(record, job.data.link, job.data.line, job.data.market, myStats[job.data.line+job.data.market], function(stats){
count++;
job.data.current = count;
job.update();
job.progress(count, job.data.total, record);
if( count == job.data.total ){
myStats[job.data.line + job.data.market] = stats;
done();
}
});
});
})
Со временем количество записей, которые cursor().eachAsync()
резко уменьшаются. Переход от обработки 100 записей в секунду к примерно 1 или 2 записям в течение нескольких секунд, а затем полная остановка.
Это проблема конфигурации? Как я могу настроить запрос на постоянный поток записей в курсоре с течением времени?
EDIT1: в конце концов я получаю следующую ошибку:
(узел: 61193) UnhandledPromiseRejectionWarning: MongoError: Курсор не найден, идентификатор курсора: 90600322391 в Function.MongoError.create(/home/sigma/SigmaCWCDataAnalysis/node_modules/mongoose/node_modules/mongodb-core/lib/error.js:31:11 )