1

この種の構造を持つジョブキュー(Nodejs + Mongodb)を構築しています:

{
    "_id" : ObjectId("53e09abd23bbaeea776598e1"),
    "createDate" : ISODate("2014-08-05T08:50:05.643Z"),
    "status" : "new",
    ......
}

システムで 4 つのステータスを次のように定義しました: 新規、待機中、作業中、失敗、完了

要件: ステータスが「新規」のジョブ キューで最新のジョブを選択する必要があります。

現在、私はこれを使用してこれを行っています

jobQueue.findAndModify(
        {
          status: 'new',
        },
        {date: 1},
        {$set: { ... } },
        {remove: false},
        function (err, job) {......

これは、ジョブ ドキュメントが少ない場合にうまく機能します。しかし、文書番号が異なる状況がありました。50kまで上がります。次に、ロック期間 (mongostat を使用) が 100% を超えます (時には 200% に達します)。したがって、私のサーバーは、このようなシナリオでは新しいジョブを配信できません。

誰かがこのクエリのより効率的な方法を提案できますか??

前もって感謝します :)

4

0 に答える 0