本当に少し広いですが、広いストロークを提供できます。 MongoDBの時点では、コレクションレベルのロック を使用しています。 デフォルトのストレージエンジンを使用します。 を実装するWiredTigerストレージエンジンも利用できます。ドキュメントレベルのロック 。ただし、基本的にすべてのリリースで、各リクエストで発生する「ロック」のレベルがあります。実際のスループットのニーズに応じて、レベルが細かいほど良いです。
解放されるまで行われるロックを「ブロック」するため、基本的に2つの要求が実際に同時に発生することはありません。したがって、返される値(たとえば、 findAndModify()
request)、そのリクエストが行われたときの「現在の状態」の時点になります。
したがって、このような要求では、最初に実行されたステートメントは2の値を返し、次に実行されたステートメントは3の値を返します。データベースの最後の位置は、値が現在3になることです。
したがって、何かが同時に「変更」できる方法はありません。最終状態は、「すべての」要求が発行された後に発生する状態になります。つまり、$inc
および他のオペレーターは、必要に応じて正確に実行し、実際にドキュメントにアクセスできたときのドキュメントの状態に基づいてコンテンツを変更します。