2012-03-26 4 views
4

MongoDBマップは、操作を実行するときにコレクションのロックを減らしますか?MongoDB - Map Reduceのロックはどのように機能しますか?

私は、アプリケーションによって幅広く集中的に使用されるコレクションをいくつか持っています。 Map/Reduceは、広く広く集中して使用されているコレクションで、cronジョブを使用して10分ごとにバックグラウンドで実行されます。

Map/Reduceが他の操作が進行中(挿入、更新、主に読み込み)であるため、Map/Reduceがうまく機能しない可能性が高いかどうかを知りたいです。特に、Map/Reduceがユーザーのコレクションで実行される通常の操作と干渉するかどうかを知りたい

+0

可能な複製:http://stackoverflow.com/questions/5563172/does-mongodb-mapreduce-lock-the-database – beny23

+0

okありがとうございますので、少し推測してください。 – paganotti

答えて

1

MapReduceコレクションに出力すると、書き込み時に複数の書き込みロックが発生します(コレクションの作成/更新を行う操作の場合と同じです)。インラインMRを実行している場合は、ロックを回避します(結果サイズには制限があります)。それでも、まだ読み取りロックとJavascriptロックがあります(mongoDB上のサーバー側JSのシングルスレッド)。

これは、ここでは全ての説明されている(そしてそれが変化した場合に更新されます):

http://www.mongodb.org/display/DOCS/How+does+concurrency+work#Howdoesconcurrencywork-MapReduce

注:マルチスレッドはあなたが何かあればSpiderMonkeyのV8 JSエンジンの移行の問題には見るべきものですを懸念。

+0

mapreduceが正常に終了し、 "temp_result_collection"の出力に進行中で、その即時のmongodbロックで同時にmapreduceの出力が終了したので、他の操作の要求がキューに入っていますか?出力に数秒かかる場合(大きな出力であるため、例10秒)問題ではありません。しかし、mapreduceがそれを処理するためにコレクションからデータを読み取ると(emitとreduce funcionを実行すると)、最初のコレクションのロックが保持されますか?私はmongodbで投票システムを実装しているので、diffコレクションの各オブジェクトのネストされたドキュメントとして投票を保存しています。 – paganotti

+0

"コレクションから読み取ります(100個のドキュメントごとにロックが読み込まれます)。したがって、ロックされたユーザーのレコードのうちの1つが100個のドキュメントに解放されるまで待機します。したがって、読み込み操作はキューに入れられたユーザーによって実行されるため、エラーは戻されません。 – paganotti

+1

まず、完全に収穫することを利用するには、収穫が改善された2.xバージョン(現在2.0.4)にいることを確認してください。 100個のドキュメントはロックの単位ではなく、代わりにMRジョブが読み取りロック(複数の読み取りロックが許可されている)を取り出し、100個の文書ごとにそれを生成します。どうして?書き込みロックは排他的であるため、書き込みが待機している場合は、その書き込みによってその書き込みが実行されます。 10gen.comのDwightのプレゼンテーションをご覧ください。これはどのように動作するかについての詳細で有益な説明です。 –

関連する問題