読み込み設定(read preference)タグセット リスト
レプリカセット ノードが tags
に関連付けられている場合は、読み込み設定(read preference)でタグセット リスト(タグセットの配列)を指定して、それらのノードを対象とできます。
タグを使用してメンバーを構成するには、タグ名と値のペアを含むドキュメントにmembers[n].tags
を設定します。 タグの値は string である必要があります。
{ "<tag1>": "<string1>", "<tag2>": "<string2>",... }
次に、読み込み設定(read preference)にタグセット リストを含めて、タグ付きのメンバーを対象とできます。 タグセット リストは、タグセットの配列であり、各タグセットには 1 つ以上のタグと値のペアが含まれています。
[ { "<tag1>": "<string1>", "<tag2>": "<string2>",... }, ... ]
レプリカセット ノードを見つけるために、MongoDB は一致が見つかるまで各ドキュメントを連続して試行します。 詳しくは、「 のタグ一致順序」を参照してください。
たとえば、セカンダリ ノードに次のmembers[n].tags
がある場合、次のことが起きます。
{ "region": "South", "datacenter": "A" }
次に、次のタグセット リストは、前述のセカンダリ(または同じタグを持つ他のノード)への読み取り操作を指示できます。
[ { "region": "South", "datacenter": "A" }, { } ] // Find members with both tag values. If none are found, read from any eligible member. [ { "region": "South" }, { "datacenter": "A" }, { } ] // Find members with the specified region tag. Only if not found, then find members with the specified datacenter tag. If none are found, read from any eligible member. [ { "datacenter": "A" }, { "region": "South" }, { } ] // Find members with the specified datacenter tag. Only if not found, then find members with the specified region tag. If none are found, read from any eligible member. [ { "region": "South" }, { } ] // Find members with the specified region tag value. If none are found, read from any eligible member. [ { "datacenter": "A" }, { } ] // Find members with the specified datacenter tag value. If none are found, read from any eligible member. [ { } ] // Find any eligible member.
タグ一致の順序
タグセット リストに複数のドキュメントが含まれている場合、MongoDB は一致が見つかるまで各ドキュメントを連続して試行します。 一致が見つかると、そのタグセットを使用して一致する資格のあるすべてのノードが検索され、残りのタグセットは無視されます。 どのタグセットにも一致するノードがない場合、読み取り操作はエラーで返されます。
Tip
タグ仕様のいずれにも一致するメンバーがいない場合のエラーを回避するには、適格なメンバーから読み取ることができるように空のドキュメント{ }
をタグセット リストの最後の要素として追加します。
たとえば、3 つのタグセットを含む次のタグセット リストを考えてみましょう。
[ { "region": "South", "datacenter": "A" }, { "rack": "rack-1" }, { } ]
最初に、MongoDB は"region":
"South"
と"datacenter": "A"
の両方でタグ付けされたメンバーを検索しようとします。
{ "region": "South", "datacenter": "A" }
ノードが見つかった場合、残りのタグセットは考慮されません。 代わりに、MongoDB はこのタグセットを使用して、すべての適格なメンバーを検索します。
それ以外の場合、MongoDB は 2 番目のドキュメントで指定されたタグを持つノードを検索しようとします。
{ "rack": "rack-1" } ノードが タグ付け されていることが見つかった場合、残りのタグセットは考慮されません。 代わりに、MongoDB はこのタグセットを使用して、すべての適格なメンバーを検索します。
そうでない場合、3 番目のドキュメントが検討されます。
{ } 空のドキュメントは、適格なメンバーを一致させます。
タグセット リストと読み込み設定(read preference)モード
タグはモード と互換性がありません。通常、読み取り操作でセットの セカンダリprimary
メンバーを 選択 した場合にのみ適用されます。ただし、 nearest
読み取りモードでは、ネットワーク レイテンシが最も低いメンバーが選択されます。 このノードはプライマリまたはセカンダリにすることができます。
モード | ノート |
---|---|
指定されたタグセット リストは、適格なセカンダリを選択した場合にのみ適用されます。 | |
指定されたタグセット リストは常に適用されます。 | |
指定されたタグセット リストは、適格なセカンダリを選択した場合にのみ適用されます。 | |
指定されたタグセット リストは、プライマリを選択するか、適格なセカンダリを選択するかにかかわらず適用されます。 |
モードとタグセット リストの相互作用については、特定の読み込み設定(read preference)モードのドキュメントを参照してください。
タグセット リストの構成について詳しくは、「レプリカセット タグセットの構成 」チュートリアルを参照してください。