私はかなりmongoを新しくしているので、私がここで達成しようとしていることは不可能かもしれません。私の研究はこれまでのところ決定的ではありません...mongoでの原子の読み込みと削除
私のシナリオは次のとおりです。複数のインスタンスを実行している可能性のあるアプリケーションがあります。これらのインスタンスはいくつかのデータを処理しており、その処理が失敗すると、失敗したアイテムのIDをmongoコレクションに書き込みます(「エラー」)。
時々、これらのアイテムの処理を再試行したいと思います。したがって、一定の間隔で、アプリケーションはコレクションからすべてのIDを読み取り、その後すべてのレコードを削除します。さて、これは明らかな競合状態です。 2つのインスタンスが同じデータを読み取る可能性があり、実行する作業が2倍になります。このように一部のIDも見落とされる可能性があります。
私の質問は次のようなものです:これらのレコードを分散原子的に読んだり削除したりする方法はありますか?私はコレクションをロックすることを考えていましたが、これについてはこれまでのところjavaドライバのドキュメントでサポートされていませんでした。私はまた、方法のようなfindAndDrop()
を探してみましたが、これまでの運はありません。
私はリーダー選挙のような技術を知っていますが、これはおそらくこの問題を解決する可能性がありますが、もっと簡単な方法で解決できるかどうかを見たいと思っていました。
['.findAndModify()'](https://docs.mongodb.com/manual/reference/command/findAndModify/)とバリアントがあります。その意図は "単数形"なので、基本的には単一の文書を一度に読んだり修正したり読んだり削除したりすることができます。それは暴動のビットと考えられているので、一括して "読む" **と** "変化する"ことは何もありません。 –