質問

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フラグを使用して、この種の複製を取得しないようにすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top