この種の構造を持つジョブキュー(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% に達します)。したがって、私のサーバーは、このようなシナリオでは新しいジョブを配信できません。
誰かがこのクエリのより効率的な方法を提案できますか??
前もって感謝します :)