курсор мангуста замедляется, пока не остановится

У меня есть приложение 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 )


person JoaoFilipeClementeMartins    schedule 01.02.2018    source источник


Ответы (1)


Похоже, что произошло то, что время ожидания курсора истекло.

Решением было установить для запроса find() значение {timeout:false} следующим образом:

mongoose.model(job.data.dataset).find({},{timeout: false}).lean().cursor()
person JoaoFilipeClementeMartins    schedule 02.02.2018