2016-04-27 7 views
7

私はMongoDBのドキュメントをたくさん読んでいましたが、readConcernオプションとreadPreferenceオプションの違いを理解できませんでした。MongoDBのreadPreferenceとreadConcernの違いは何ですか?

たとえば、読者の関心度オプションで「多数」を、読み込み設定オプションとして「プライマリ」を設定した場合の結果はどうですか?これらの2つの選択肢は対立しているようです。

クエリレベルで私はreadConcernプリファレンスしか設定できませんが、クライアントレベルではreadPreferenceも設定できることを知っています。

答えて

8

レプリカセットでは、プライマリMongoDBインスタンスがすべての書き込み操作を受け取るマスターインスタンスです。

プライマリデフォルトは読み取りモードで、MongoDBクライアントに関係します。 ドライバ/クライアントオプションです。つまり、最初に書き込まれたマスターインスタンスから(他のレプリカセットメンバーにレプリケートされる前に)データを読み込むことを意味します。
プライマリの読取り設定以外のモードを使用すると、失効したデータを読み取る危険性があります。

お読みくださいレプリケーションセットのクエリオプションです。デフォルトでは、読み取りの問題はローカルです。これは、クエリの実行時に利用可能な最新のデータを返します。データはレプリカセットメンバーの大多数に保持されておらず、ロールバックされている可能性があります。このオプションは、の大文字に設定することができます。これにより、レプリカセットメンバーの大部分に永続化され、ロールバックされない最新のデータがクエリで読み取られます。しかし、あなたはそれを正しく設定しなければなりません(WiredTigerエンジンといくつかの他の要件でのみ動作します...)、レプリカセットのメンバーの大部分には書き込まれても保存されていない最新のデータが欠落する可能性があります。

既定のオプションを使用して、読み取りの優先順位と読み取りの問題が発生したとします。次に、MongoDBドライバはプライマリ・レプリカ・セット・メンバ(マスター・インスタンス)に読取り要求をルーティングし、そのインスタンスはその時点で使用可能な最新のデータを戻します。そのデータは、レプリカセットメンバーの大多数に保持されず、ロールバックされる可能性があります。

同様に、読者の関心と読書の設定オプションの異なる組み合わせを使用するユースケースを考えることができます。

  • ローカル/ primaryPreferred
  • ローカル/二次
  • ローカル/ secondaryPreferred
  • ローカル/最寄り
  • 過半数/ primaryPreferred
  • 過半数/二次
  • 過半数/ secondaryPreferred
  • 過半数/最寄りの

オプションについては、MongoDB Doc。いくつかの組み合わせはいくつかの状況で意味をなさないかもしれませんし、他の組み合わせでは他の状況では意味をなさないかもしれません私は完全性のためにここにそれらを単に列挙しました。 (queryオプション) 読み取り懸念オプションに従って実行される読み取り優先オプション(ドライバオプション)

  • 、第2の要求に応じて

    1. 要求がルーティングされます。そして、私は次のようにすることを解釈したいです
  • +0

    清潔にしてくれてありがとう、Elyasin。 – Krock

    1

    readConcernは - 私たちはモンゴからデータを読みたい方法です - 私たちは、レプリカセットを持っている場合は、readConcern大半は保存されたデータを取得できるようになりますことを意味し、レプリカセットの大多数に(持続)ので、私たちはすることができ複製に問題がある場合、この文書はロールバックされません。

    readPreferenceは - 負荷分散に役立ちますので、私たちは常に、二次からのデータを読み取り、オンラインユーザーのためのデータを提供するプライマリサーバを残してレポート生成プロセスを持つことができます。

    +1

    こんにちはプロフェッサー、まずはお返事ありがとうございます。 私はreadPreferenceは負荷だけではなく、readPreferenceが一貫性と可用性についても話していると思います。 – Krock

    関連する問題