2016-07-18 11 views
2

私はMongoDBデータベースが新しく、私のアプリケーションの1つでは、その一部をMongoDBに移行する予定です。楽観的同時実行性を処理する必要があるところ。 MongoDBで利用できるベストプラクティスは何ですか?MongoDBの並行性を管理するには?

MongoDBは並行性を必要とするアプリケーションに適していますか?

答えて

4

はいMongoDBは並行処理に適しています。

MongoDBのロックは、RDBMSのロックとは異なります。

MongoDBは、オペレーションをグローバルレベル、データベースレベル、またはコレクションレベルでロックできるマルチグラニュラリティロック(wired tigerを参照)を使用し、個々のストレージエンジンがコレクションレベル以下の独自の同時実行制御を実装できるようにしますWiredTigerのドキュメントレベル)。

MongoDBは、データベースまたはコレクションなどのリソース(MMAPv1など)への同時アクセスを許可するリーダライタロックを使用して、単一の書き込み操作に排他的にアクセスします。

WiredTigerは、楽観的同時実行制御を使用します。 WiredTigerは、グローバルレベル、データベースレベル、コレクションレベルでインテントロックのみを使用します。ストレージエンジンが2つの操作間の競合を検出すると、書き込み競合が発生し、MongoDBはその操作を透過的に再試行します。

MongoDBには、データベースごとに読み取り/書き込み可能なラッチがあります。

ラッチはマルチリーダ、シングルライタであり、ライタが貪欲であるため、データベースには同時読者の数は無制限です( )が、一度に1つのライタしか存在できませんいずれかのデータベースに保存する。

"writer-greedy"は書き込みを優先しますので、書き込み要求が発生すると、書き込みが完了するまですべての読み取り要求がブロックされます。

ここのロックは、ロックよりも軽く、マイクロ秒以内にジョブを実行するため、ラッチと呼ばれます。

MongoDBは、多くの同時クエリを実行できます。

希望に役立ちます!

参照

https://docs.mongodb.com/manual/faq/concurrency/

https://docs.mongodb.com/manual/reference/command/findAndModify/

関連する問題