1
2人のエージェントがMongoクラスタ上でこの更新クエリを同時に実行する場合、最後に期待値はどのくらいですかupdateVersion
?Mongo DB並行動作のfindAndModify(インクリメント操作あり)
db.Task.findAndModify(
{
query:{"updateVersion":21},
update:{$inc:{"updateVersion":1}}
}
);
答えが "23"の場合、保証された読み取り/書き込み同期操作を行う方法はありますか?
答えは? 22または23?私は既にFAQセクションを読んでいました。あなたの見積もりは本当に答えません。まず最初に、2つのオペレーションは競合を起こさないかもしれません:最初にバージョン21を見つけて22に増分し、2番目に22を見つけ、更新する文書がなくなり、誰もが幸せになります。 :https://docs.mongodb.com/manual/reference/method/db.collection.findAndModify/。また、クラスタ環境では、同時クライアントが異なるインスタンスでコマンドを発行するとどうなりますか? – Deroude
あなたは矛盾がないと言ったので、最初の操作の更新版のみが答えられるので、答えは22になるはずです。競合が発生すると、MongoDBは完全な操作(検索も)を再試行し、期待通りに最初のシナリオと同じ動作をします。 –
それは私の(希望的な)思考すぎです:)しかし、もし両方のopsがドキュメントを見つけたら(読み込みロックなし)、次にバージョンフィールドを増やして(書き込みロック)、最終結果が23の場合はどうなりますか?紛争が起こっているとどう結論しましたか? – Deroude