2016-04-30 29 views
2

MongoDBデータベースでストリーミング、一時停止、処理、および再開してデータを処理しようとしています。処理は各文書につき最大2〜3分かかることがあり、それぞれがクラスタ内の作業者によって実行されます。私はmasterで文書をストリーミングし、workersに文書を送信して処理されます。問題は、ストリーム(または約10以上のドキュメント)にエラーMongoError: cursor killed or timed outが20-30分入っていることです。処理時間がこれよりも遅くなる前に、このメソッドを正常に使用しました。MongoError:カーソルが強制終了またはタイムアウトしました

構成: [email protected]mongodb version 3.0.5node 0.10

MongoClient.connect(config.mongodb, function(err, db) { 
    if (err) helper.logError(err) 
    var collection = db.collection('collectionName'); 
    stream = collection.find(condition).stream(); 
    stream.on("data", function(doc) { 
    stream.pause(); 
    doSomeProcessing().then(function(){ 
     stream.resume() 
    }); 
    }); 
}); 
+0

こんにちは、あなたをしましたあなたの問題を解決する? – DaTebe

+0

いいえ、代わりにどのようにクエリするか再設計します。 – harinsa

答えて

0

あなたはaddCursorFlagを呼び出すことによってfind()によって返されたカーソルに'noCursorTimeout'フラグを追加することにより、カーソルのタイムアウトを無効にすることができます

stream = collection.find(condition).addCursorFlag('noCursorTimeout', true).stream(); 
+0

ドライバのバージョン1.4にはそのフラグはありませんが、タイムアウトオプションがありますが動作しません。 – harinsa

関連する問題