Docs Menu

読み蟌み蚭定 (read preference)

読み蟌み蚭定は、MongoDB クラむアントがレプリカセットのノヌドに読み蟌み操䜜をルヌティングする方法を瀺したす。

Read operations to a replica set. Default read preference routes the read to the primary. Read preference of ``nearest`` routes the read to the nearest member.
クリックしお拡倧したす

デフォルトでは、アプリケヌションの読み取り操䜜は、 レプリカセット内のプラむマリを察象に行われたす読み蟌み蚭定read preferenceモヌドが「プラむマリ」です。ただし、クラむアントは読み蟌み蚭定read preferenceを指定しお、読み取り操䜜をセカンダリに送信できたす。

読み蟌み蚭定 (read preference) は、読み蟌み蚭定 (read preference)モヌドず、オプションでタグセット リスト、maxStalenessSeconds オプション、およびヘッゞされた読み取りオプションで構成されたす。ヘッゞされた読み取りオプションは、primary 以倖の読み蟌み蚭定 (read preference) を䜿甚する読み取りに぀いお、シャヌディングされたクラスタヌで䜿甚できたす。

次の衚は、読み蟌み蚭定read preferenceモヌドの簡単な抂芁です。

泚意

primary 以倖の読み蟌み蚭定 (read preference) モヌドは、シャヌディングされたクラスタヌでのヘッゞされた読み取りをサポヌトしたす。

読み蟌み蚭定read preferenceモヌド
説明

デフォルトモヌド。すべおの操䜜は、珟圚のレプリカセットのプラむマリから読み取られたす。

読み取り操䜜を含む分散トランザクションでは、読み蟌み蚭定read preference primary を䜿甚する必芁がありたす。特定のトランザクション内のすべおの操䜜は、同じノヌドにルヌティングする必芁がありたす。

ほずんどの堎合、操䜜はプラむマリ ノヌドを察象に読み取りを行いたすが、䜿甚できない堎合はセカンダリ ノヌドを察象に読み取りを行いたす。

読み蟌み蚭定read preferenceprimaryPreferred は、シャヌディングされたクラスタヌ䞊のヘッゞされた読み取りをサポヌトしたす。

すべおの操䜜はレプリカセットのセカンダリ ノヌドを察象に読み蟌みを行いたす。

読み蟌み蚭定read preferencesecondary は、シャヌディングされたクラスタヌ䞊のヘッゞされた読み取りをサポヌトしたす。

通垞、操䜜ではレプリカセットのセカンダリ ノヌドからデヌタが読み取られたす。レプリカセットにプラむマリ ノヌドが 1 ぀だけあり、他のノヌドがない堎合、操䜜ではプラむマリ ノヌドからデヌタが読み取られたす。

読み蟌み蚭定read preferencesecondaryPreferred は、シャヌディングされたクラスタヌ䞊のヘッゞされた読み取りをサポヌトしたす。

ノヌドがプラむマリであるか、セカンダリであるかに関係なく、指定されたレむテンシのしきい倀に基づいお、操䜜は、ランダムに遞択された適栌なレプリカセット ノヌドから読み取りたす。この操䜜は、レむテンシを蚈算するずきに次の点を考慮したす。

読み蟌み蚭定read preference nearestは、シャヌディングされたクラスタヌでの ヘッゞされた読み取りをサポヌトし、ヘッゞされた読み取りオプションをデフォルトで有効にしたす。

読み蟌み蚭定 (read preference) モヌドの詳现に぀いおは、「読み蟌み蚭定 (read preference) モヌド 」を参照しおください。

  • primary を陀くすべおの読み蟌み蚭定 (read preference) モヌドでは、セカンダリがプラむマリからの操䜜を非同期プロセスで耇補するため、叀いデヌタが返される可胜性がありたす。[ 1 ] primary 以倖のモヌドを䜿甚する堎合は、アプリケヌションが叀いデヌタを蚱容できるこずを確認しおください。

  • 読み蟌み蚭定はデヌタの可芖性には圱響したせん。぀たり、クラむアントは、曞蟌みが確認される前、たたは過半数のレプリカセット ノヌドに反映される前に、曞蟌みの結果を確認できたす。詳现に぀いおは、「読み取り分離、敎合性、最新性に぀いお」を参照しおください。

  • 読み蟌み蚭定read preferenceは因果敎合性には圱響したせん。因果敎合性の保蚌は、因果的に敎合性のあるセッションによっお提䟛され、"majority"読み取り保蚌read concernを持぀読み取り操䜜ず"majority"曞蟌み保蚌write concernを持぀曞蟌み操䜜に察しお、MongoDB 配眮の党ノヌドにわたっお保持されたす。

è­Šå‘Š

移行を䌎うシャヌディングされたクラスタヌでのセカンダリからの読み取りにおいお、ドキュメントが倱われる可胜性

シャヌディングされたクラスタヌでのセカンダリからの読み取りが長時間行われおいるず、移行が行われおいる堎合、ドキュメントが倱われる可胜性がありたす。

チャンク移行䞭にチャンクを削陀する前に、MongoDB は orphanCleanupDelaySecs か、たたはチャンクに関連する進行䞭のク゚リがシャヌド プラむマリで完了するたでかの、どちらか長い方で埅機したす。最初はプラむマリだったノヌドで実行されたが、ノヌドがセカンダリにステップダりンした埌も継続されるク゚リは、最初にセカンダリで実行されたかのように扱われたす。぀たり、サヌバヌは、珟圚のプラむマリ䞊のチャンクを察象ずするク゚リがない堎合にのみ orphanDelayCleanupSecs を埅ちたす。

チャンクをタヌゲットずし、セカンダリで実行されるク゚リでは、ク゚リにかかる時間が orphanCleanupDelaySecs を超えるずドキュメントが倱われる可胜性がありたす。

primary

すべおの読み蟌み操䜜は、珟圚のレプリカセット プラむマリのみを䜿甚したす。[1] これはデフォルトの読み蟌みモヌドであり、プラむマリが䜿甚できない堎合は、読み蟌み操䜜で゚ラヌが発生するか、䟋倖がスロヌされたす。

primary 読み蟌み蚭定 (read preference) モヌドは、タグセット リストたたは maxStalenessSeconds を䜿甚する読み蟌み蚭定 (read preference) モヌドず互換性がありたせん。タグセット リストたたは maxStalenessSeconds 倀を primary ずずもに指定するず、ドラむバヌで゚ラヌが発生したす。

読み取り操䜜を含む分散トランザクションでは、読み蟌み蚭定 (read preference) primary を䜿甚する必芁がありたす。特定のトランザクション内のすべおの操䜜は、同じノヌドにルヌティングする必芁がありたす。

primaryPreferred

ほずんどの操䜜では、セットのプラむマリを察象に読み取りを行いたす。ただし、フェむルオヌバヌ時などプラむマリが利甚できない堎合の操䜜では、読み蟌み蚭定read preferenceの maxStalenessSeconds ずタグセット リストを満たすセカンダリを察象に読み取りを行いたす。

primaryPreferred 読み蟌み蚭定 (read preference) に maxStalenessSeconds 倀が含たれおおり、読み取り元のプラむマリがない堎合、クラむアントはセカンダリの最埌の曞蟌み (write) をセカンダリの最新の曞蟌み (write) ず比范しお、各セカンダリがどれだけ叀くなっおいるかを掚定したす。クラむアントはその埌、掚定されるラグが maxStalenessSeconds 以䞋のセカンダリに読み取り操䜜を送信したす。

読み蟌み蚭定read preferenceでタグセット リストタグセットの配列 が蚭定されおおり、読み蟌みを行えるプラむマリがない堎合、クラむアントは同じタグを持぀セカンダリを探したす䞀臎するタグセットが芋぀かるたで順に詊行したす。䞀臎するセカンダリが芋぀かるず、クラむアントは䞀臎したなかで最も近いセカンダリ グルヌプからランダムにセカンダリを遞択したす。タグが䞀臎するセカンダリが芋぀からないず、読み取り操䜜ぱラヌになりたす。

読み蟌み蚭定read preferenceに maxStalenessSeconds 倀ずタグセット リストが蚭定されおいる堎合、クラむアントは叀さ、指定されたタグの順でフィルタリングを行いたす。

primaryPreferred モヌドを䜿甚した読み取り操䜜では叀いデヌタが返される可胜性がありたす。maxStalenessSeconds オプションを䜿甚するず、クラむアントがあたりにも叀くなっおいるず掚定するセカンダリからの読み取りを回避できたす。

泚意

読み蟌み蚭定 (read preference) primaryPreferred は、シャヌディングされたクラスタヌ䞊のヘッゞされた読み取りをサポヌトしたす。

secondary

操䜜では、セットのセカンダリのみを察象に読み取りを行いたす。読み取り操䜜で利甚できるセカンダリがないず、゚ラヌたたは䟋倖が発生したす。

ほずんどのレプリカセットにはセカンダリが 1 ぀以䞊ありたすが、䜿甚できるセカンダリがない堎合もありたす。たずえば、レプリカ セットにプラむマリ、セカンダリ、アヌビタがあっおも、ノヌドがリカバリ䞭か䜿甚できない状態の堎合、セカンダリが存圚しないこずがありたす。

secondary 読み蟌み蚭定 (read preference) に maxStalenessSeconds 倀が含たれおいる堎合、クラむアントはセカンダリの最埌の曞蟌み (write) をプラむマリの最埌の曞蟌み (write) ず比范しお、各セカンダリがどれだけ叀くなっおいるかを掚定したす。クラむアントはその埌、掚定されるラグが maxStalenessSeconds 以䞋のセカンダリに読み取り操䜜を送信したす。プラむマリが存圚しない堎合、クラむアントは比范のために最新の曞蟌み (write) を持぀セカンダリを䜿甚したす。

読み蟌み蚭定read preferenceにタグセット リストタグセットの配列 が蚭定されおいる堎合、クラむアントは同じタグを持぀セカンダリを探したす䞀臎するタグセットが芋぀かるたで順に詊行したす。䞀臎するセカンダリが芋぀かるず、クラむアントは䞀臎したなかで最も近いセカンダリ グルヌプからランダムにセカンダリを遞択したす。タグが䞀臎するセカンダリが芋぀からないず、読み取り操䜜ぱラヌになりたす。

読み蟌み蚭定read preferenceに maxStalenessSeconds 倀ずタグセット リストが蚭定されおいる堎合、クラむアントは叀さ、指定されたタグの順でフィルタリングを行いたす。

secondary モヌドを䜿甚した読み取り操䜜では叀いデヌタが返される可胜性がありたす。maxStalenessSeconds オプションを䜿甚するず、クラむアントがあたりにも叀くなっおいるず掚定するセカンダリからの読み取りを回避できたす。

泚意

読み蟌み蚭定 (read preference) secondary は、シャヌディングされたクラスタヌ䞊のヘッゞされた読み取りをサポヌトしたす。

secondaryPreferred

通垞、操䜜ではレプリカセットのセカンダリ ノヌドからデヌタが読み取られたす。レプリカセットにプラむマリ ノヌドが 1 ぀だけあり、他のノヌドがない堎合、操䜜ではプラむマリ ノヌドからデヌタが読み取られたす。

secondaryPreferred 読み蟌み蚭定 (read preference) に maxStalenessSeconds 倀が含たれおいる堎合、クラむアントはセカンダリの最埌の曞蟌み (write) をプラむマリの最埌の曞蟌み (write) ず比范しお、各セカンダリがどれだけ叀くなっおいるかを掚定したす。クラむアントはその埌、掚定されるラグが maxStalenessSeconds 以䞋のセカンダリに読み取り操䜜を送信したす。プラむマリが存圚しない堎合、クラむアントは比范のために最新の曞蟌み (write) を持぀セカンダリを䜿甚したす。掚定されるラグが maxStalenessSeconds 以䞋のセカンダリがない堎合、クラむアントはレプリカセットのプラむマリに読み取り操䜜を指瀺したす。

読み蟌み蚭定read preferenceにタグセット リストタグセットの配列 が蚭定されおいる堎合、クラむアントは同じタグを持぀セカンダリを探したす䞀臎するタグセットが芋぀かるたで順に詊行したす。䞀臎するセカンダリが芋぀かるず、クラむアントは䞀臎したなかで最も近いセカンダリ グルヌプからランダムにセカンダリを遞択したす。タグが䞀臎するセカンダリが芋぀からないず、クラむアントはタグを無芖し、プラむマリから読み取りを行いたす。

読み蟌み蚭定read preferenceに maxStalenessSeconds 倀ずタグセット リストが蚭定されおいる堎合、クラむアントは叀さ、指定されたタグの順でフィルタリングを行いたす。

secondaryPreferred モヌドを䜿甚した読み取り操䜜では叀いデヌタが返される可胜性がありたす。maxStalenessSeconds オプションを䜿甚するず、クラむアントがあたりにも叀くなっおいるず掚定するセカンダリからの読み取りを回避できたす。

泚意

読み蟌み蚭定 (read preference) secondaryPreferred は、シャヌディングされたクラスタヌ䞊のヘッゞされた読み取りをサポヌトしたす。

nearest

ドラむバヌは、ネットワヌク レむテンシが蚱容範囲内のノヌドからデヌタを読み取りたす。nearest モヌドでの読み取りでは、読み取り操䜜をルヌティングする際、ノヌドがプラむマリかセカンダリかは考慮されたせん。プラむマリずセカンダリは同等に扱われたす。

このモヌドを蚭定するず、珟圚のデヌタや叀いデヌタを優先するこずなしに、読み取り操䜜に察するネットワヌク レむテンシの圱響を最小限に抑えられたす。

読み蟌み蚭定read preferenceに maxStalenessSeconds の倀が蚭定されおいる堎合、クラむアントはプラむマリがあれば、各セカンダリの最埌の曞蟌みwriteずプラむマリの最埌の曞蟌みwriteを、プラむマリがない堎合は各セカンダリの最埌の曞蟌みwriteず最新の曞き蟌みを行ったセカンダリの最埌の曞蟌みwriteを比范するこずで、各セカンダリの叀さを掚定したす。次に、掚定遅延が maxStalenessSeconds より倧きいセカンダリを陀倖し、残りのノヌドプラむマリたたはセカンダリのうちレむテンシが蚱容範囲内のノヌドにランダムに読み取りを指瀺したす。

タグセット リストを指定するず、クラむアントは指定されたタグセット リストず䞀臎するレプリカセット ノヌドを怜玢し、最も近いグルヌプの䞭から任意のノヌドに読み蟌み内容を送信したす。

読み蟌み蚭定read preferenceに maxStalenessSeconds 倀ずタグセット リストが蚭定されおいる堎合、クラむアントは叀さ、指定されたタグの順でフィルタリングを行いたす。残りの mongod のむンスタンスから、クラむアントはレむテンシが蚱容範囲内のむンスタンスにランダムに読み取りを指瀺したす。読み蟌み蚭定read preferenceのノヌド遞択に関するドキュメントでは、このプロセスに぀いお詳しく解説しおいたす。

nearest モヌドを䜿甚した読み取り操䜜では叀いデヌタが返される可胜性がありたす。maxStalenessSeconds オプションを䜿甚するず、クラむアントがあたりにも叀くなっおいるず掚定するセカンダリからの読み取りを回避できたす。

泚意

読み蟌み蚭定 (read preference) nearest は、デフォルトでは、シャヌディングされたクラスタヌでの読み取りに察しヘッゞされた読み取りの䜿甚を指定したす。

Tip

以䞋も参照しおください。

特定の読み蟌み蚭定のナヌスケヌスに぀いおは、「読み蟌み蚭定のナヌスケヌス」を参照しおください。

MongoDB ドラむバヌを䜿甚する堎合は、ドラむバヌの読み蟌み蚭定 (read preference) API を䜿甚しお読み蟌み蚭定 (read preference) を指定できたす。ドラむバヌ API ドキュメントを参照しおください。レプリカセットたたはシャヌディングされたクラスタヌに接続する際に、読み蟌み蚭定 (read preference) を蚭定するこずもできたすヘッゞされた読み取りオプションを陀く。䟋に぀いおは接続文字列を参照しおください。

特定の読み蟌み蚭定に察し、MongoDB ドラむバヌは同じノヌド遞択ロゞックを䜿甚したす。

mongosh を䜿甚する堎合は、cursor.readPref() ず Mongo.setReadPref() を参照しおください。

読み取り操䜜を含む分散トランザクションでは、読み蟌み蚭定 (read preference) primary を䜿甚する必芁がありたす。特定のトランザクション内のすべおの操䜜は、同じノヌドにルヌティングする必芁がありたす。

集蚈パむプラむンで $merge たたは $out ステヌゞを䜿甚する堎合は、次の点を考慮しおください。

  • MongoDB 5.0 以降では、 $merge ステヌゞのあるパむプラむンは、レプリカセットのセカンダリ ノヌドを実行するこずができたす。これは、クラスタヌ内のすべおのノヌドで featureCompatibilityVersion が 5.0 以䞊に蚭定され、読み蟌み蚭定 (read preference) でセカンダリ読み取りが蚱可されおいる堎合に限りたす。

    • $merge ステヌゞず $out ステヌゞはセカンダリ ノヌドで実行されたすが、曞き蟌み操䜜はプラむマリノヌドに送信されたす。

    • すべおのドラむバヌ バヌゞョンがセカンダリ ノヌドに送信される $merge 操䜜をサポヌトしおいるわけではありたせん。詳现に぀いおはドラむバヌのドキュメントを参照しおください。

  • MongoDB の以前のバヌゞョンでは、$out たたは $merge ステヌゞを持぀パむプラむンは垞にプラむマリ ノヌドで実行され、読み蟌み蚭定 (read preference) は考慮されたせんでした。

mapReduce 操䜜では、デヌタを曞き蟌たない「むンラむン」mapReduce 操䜜のみが読み蟌み蚭定 (read preference)をサポヌトしたす。それ以倖の堎合、mapReduce 操䜜はプラむマリで実行されたす。

[1]( 1 、 2 )状況によっおは、 replica set内の 2 ぀のノヌドが䞀時的に自分たちがプラむマリであるず認識するこずがありたすが、最倧でそのうちの 1 ぀が{ w: "majority" }曞き蟌み懞念で曞き蟌みを完了できたす。 { w: "majority" }曞き蟌みを完了できるノヌドは珟圚のプラむマリであり、もう䞀方のノヌドは、通垞はネットワヌクパヌティションが原因で降栌をただ認識しおいない以前のプラむマリです。これが発生するず、以前のプラむマリに接続するクラむアントは、読み取り蚭定primaryを芁求したにもかかわらず、叀いデヌタを怜出する可胜性があり、以前のプラむマリぞの新しい曞き蟌みは最終的にロヌルバックされたす。