web-dev-qa-db-ja.com

MongoDBは同時更新をどのように処理しますか?

私はこれまでのところ、仕事でMongoDBを使い始めました。 MongoDBは同時更新をどのように処理するのでしょうか? MongoDBにはロック機能がないことを読んだので、これに対処するための一般的な方法は何であるか疑問に思いました。

ありがとう。

23
lollancf37

MongoDBは、プロセス全体の書き込みロックを使用して、一度に1つの書き込み操作(更新/挿入/削除)のみを実行できることを保証しました。そのため、書き込みの同時実行は単に許可されていないため、同時実行の問題は自動的に解決されます。

4つのスレッドが更新操作を試行すると、そのうちの1つが書き込みロックを取得し、更新を実行してロックを解放します。その後、残りの3つのうちの1つがロックを取得し、更新などを行います。

同時実行性は、操作を1回の書き込み操作でラップできない場合にのみ機能します。最も一般的なユースケース(ドキュメントを検索し、それを更新して、新しいバージョンをアトミックに取得する)の場合、MongoDBはまさにそれを行う「findAndModify」コマンドを提供することに注意してください: http://www.mongodb.org/display/DOCS/findAndModify + Command

更新:最近、ロックはよりきめ細かくなりました。

32
Remon van Vliet

使用 修飾子​​操作

$inc $set $unset $Push $pushAll $addToSet $pop $pull $pullAll $rename $bit

それらはすべてアトミックです。

6
Karoly Horvath