2015-11-16 11 views
8

レプリカモードでは、任意のDB内の任意のコレクションへの書き込み操作が行われ、oplogコレクションにも書き込みが行われます。MongoDB 3.0レプリカモードのoplogコレクションに対する書き込みロック

これで、複数のDBに並列で書き込みを行うと、これらの書き込み操作はすべてoplogに書き込まれます。 私の質問:これらの書き込み操作はoplogをロックする必要がありますか? (私はw:1書込み問題を使用しています)。そうであれば、これはすべての異なるDBに対するすべての書き込み操作の間にグローバルロックを持つようなものですか?

私はこれについて何かヒントを得ることを嬉しく思います。

答えて

4

documentationによると、MongoDBはプライマリのコレクションに書き込みを行うと、ローカルデータベースの特別なコレクションであるプライマリのoplogにも書き込みを行います。したがって、MongoDBはコレクションのデータベースとローカルデータベースの両方をロックする必要があります。 mongodは、両方のデータベースを同時にロックして、データベースの一貫性を保ち、レプリケーションを使用しても書き込み操作が「すべてかどうか」操作でないことを保証する必要があります。

これは、プライマリで複数のデータベースに同時に書き込みを行うと、すべての書き込み操作の間にグローバルロックが発生する可能性があることを意味します。これはセカンダリには適用されません。MongoDBはセカンダリに連続して書き込みを適用せず、代わりにoplogエントリをバッチで収集し、それらのバッチを並列に適用します。

+0

私はドキュメントを読んだが、それでも信じられない。 oplogのエントリは冪等で、データベースはアプリケーションでロックされているので、実際には必要ありません...私は実際にそれを取得しません。 –

+1

このブログの投稿も読む価値があります。作者はリアルタイムメトリックシステムを開発するときにこの「グローバルロック」に遭遇しました。 – Jaco

+1

リンクを忘れた場合:リンク:http://daprlabs.com/blog/blog/2014/04/19/mongodb/。ブロガーはマイクロソフトのために働き、彼の結論のいくつかは幾分偏っているように見えることに注意してください。 – Jaco

3

免責事項これは私の頭の中で一番上にあるので、間違いがあれば私を十字架にしてはいけません。しかし、私を修正してください。

なぜでしょうか?

  1. 前提:データベースは、定義により、
  2. oplog entries are always idempotent
  3. を相互に接続されていないOplogはcapped collection, with a guarantee of preserving the insert order

が適用されているのは、クエリの真の並列処理を想定してみましょうです。ですから、同時に2つのクエリが到着し、最初にoplogに挿入するクエリを決定する必要があります。ロックを取った最初の人が最初に書きます。ただし、問題があります。最初のクエリが単純なものであると仮定しましょうdb.collection.update({_id:"foo"},{$set:{"bar":"baz"}})もう一方のクエリはより複雑であり、そのために正しいかどうかの評価に時間がかかります。だから、それを防ぐために、到着時にロックをにして、偶発的なoplogエントリが書き込まれた後にリリースする必要がありました。私はしかし、クエリが並列で適用されていない私の記憶

に依存する必要がどこここ

です。クエリはがキューに登録され、到着順に評価されます。データベースgetは、クエリオプティマイザを実行した後、クエリの適用時にロックされます。そのロック中に、冪等級のoplogクエリがoplogに書き込まれます。データベースは相互接続されておらず、常に1つのクエリしかデータベースに適用できないため、データベースのロックで十分です。 とにかく、同じデータベースに2つのデータ変更クエリを同時に適用することはできません。なぜ、oplogでロックを設定する必要がありますか? 明らかに、ロックはローカルデータベースを占有しています。しかし、すでにデータにロックがかけられているので、その理由はわかりません。* scratchingMyHead *

+2

このブログの記事も読む価値があります。レプリカセットで発生する可能性のある「実質的にグローバルなロック」については、より詳細な技術的な説明があります。http://daprlabs.com/blog/blog/2014/04/19/mongodb/ – Jaco

+0

@ジャコの面白い読書、私は彼の結論を続けることはできません。しかし、ダブルロックの問題は調査する価値があるかもしれません。 –

関連する問題