MongoDB MultiProcessの使用に関する問題の問題を検討します
質問
Python 2.6.6、Pymongo 1.9、Mongodb 1.6.5、Ubuntu 10.10を使用しています
findandModifyコマンドに奇妙な問題があります。
同時に2つの同一のプロセスが実行されています。 findandModifyを使用してDBからレコードを取得します(何らかのキューを実装します)。
そのため、1つのプロセスのみを記録するために、私はこれを行います:
find_and_modify({query:{"status":"loaded"},update:{"$set": {"status":"analyzing"}})
これはそうです:
1プロセスの使用FindAndModifyを使用するジョブ2プロセスの使用FindAndModifyの使用
したがって、プロセスステータスを「ロード」してレコードを取得し、「分析」に変更します。また、この操作がアトミック2番目のプロセスである場合、クエリを満たしていないため、このレコードは表示されません。
しかし、2つのプロセスが同時に同じレコードを取得することもありますが、これは問題です。
なぜそれが起こるのか、そしてMongodbでキューを実装する方法を誰かが伝えることができます。
ありがとう。
解決
スタンドアロンスクリプトでこのバグを再現しようとしている間、問題はMongodbではないことを発見しました。 Mongodbはマニュアルで述べたように機能するため、質問は現在閉じられています。
同じバグを見つけたThousの場合 - 実行時にキューデータを変更するために別のスレッド/プロセスを確認することを忘れないでください。
他のヒント
SnapShot = Trueフラグを使用して、この種の複製を取得しないようにすることができます。
所属していません StackOverflow