Mongoでは、任意のフィールドタイプを使用してシャードゾーンの範囲を設定できますが、分析の実行方法は指定されていません。
私の目標は、複合シャードキーを使用せずに(さまざまな実行の複雑さのために)、クエリと書き込みを正確な正しいサーバーに向けることです。
一意のユーザー英数字IDと緯度と経度の値を1つの文字列に埋め込み、これをシャードキーとして使用します。
例:(ID.lat.lon) "4kjaj29.48.-89"
次の範囲に該当します:
「0000000.45.-100」から「zzzzzzz.50.-80」
Mongoは、utf8文字列 https://www.utf8-chartable.de/unicode-utf8-table.pl を使用します。ここで、英数字の場合、0は「最小」、zは「最小」最高の"。
これが範囲の包含がどのように計算されるかを想像する必要がありますか?このアプローチが正しい場合、誰かが手に負えないことを知っていますか?そうでない場合は、これを達成するために私を正しい方向に向けることができますか?
ある範囲の包含の計算が文字列型で行われているため、これを達成する方法は確かにありますが、分析戦略を知る必要があるだけです。
MongoDBのドキュメントに従って ここ シャーディングされたクラスターでは、 シャードキー に基づいてシャーディングされたデータの ゾーン を作成できます。各ゾーンをクラスター内の1つ以上のシャードに関連付けることができます。シャードは、任意の数のゾーンに関連付けることができます。バランスのとれたクラスターでは、MongoDBはゾーンに関連付けられているシャードにのみゾーンによってカバーされる chunks を移行します。
ゾーンを適用できるいくつかの一般的な展開パターンは次のとおりです。
特定のシャードセットの特定のデータサブセットを分離します。最も関連性の高いデータが、アプリケーションサーバーに地理的に最も近いシャードにあることを確認します。シャードハードウェアのハードウェア/パフォーマンスに基づいて、シャードにデータをルーティングします。
例
上記の図では、3つのシャードと2つのゾーンを持つシャードクラスターが示されています。 A zone
は、下限が1で上限が10の範囲を表します。 B zone
は、下限が10で上限が20の範囲を表します。シャードアルファとベータにはA zone
があります。シャードベータ版にはB zone
もあります。シャードチャーリーにはゾーンが関連付けられていません。クラスタは定常状態にあり、チャンクはどのゾーンにも違反していません。
シャードキー範囲を使用してゾーンを構成し、それを1つまたは複数のシャードに関連付けた後、影響を受けるデータを移行するためにクラスターでしばらく時間がかかる場合があります。これは、チャンクの分割とクラスター内のデータの現在の分布に依存します。バランシングが完了すると、特定のゾーン内のドキュメントの読み取りと書き込みは、そのゾーン内の1つまたは複数のシャードにのみルーティングされます。
シャードキー
カバーするゾーンの新しい範囲を定義するときは、シャードキーに含まれるフィールドを使用する必要があります。複合シャードキーを使用する場合、範囲にはシャードキーのプレフィックスを含める必要があります。
For example
、シャードキー{ a : 1, b : 2, c : 3 }
を指定して、bの値をカバーするゾーンを作成または更新するには、プレフィックスとしてaを含める必要があります。 cの値をカバーするようにゾーンを作成または更新するには、プレフィックスとしてaおよびbを含める必要があります。
シャードキーに含まれていないフィールドを使用してゾーンを作成することはできません。たとえば、ゾーンを使用して地理的な場所に基づいてデータを分割する場合、シャードキーにはgeographic data
を含むフィールドが少なくとも1つ必要です。
コレクションのシャードキーを選択するときは、ゾーンの構成に使用する可能性のあるフィールドを検討してください。シャーディング後は、シャードキーを変更できません。シャードキーを選択する際の考慮事項については、 シャードキーの選択 を参照してください。
ハッシュされたシャードキーとゾーン
ハッシュされたシャードキーでゾーンを使用する場合、各ゾーンはハッシュされたシャードキーの値をカバーします。シャードキー{ a : 1 }
と、下限が1で上限が5のゾーンアルファを指定すると、境界はaのハッシュ値を表し、実際の値ではありません。したがって、MongoDBがaの値が1〜5のドキュメントをゾーンアルファにルーティングする保証はありません。 MongoDBは、ハッシュされたシャードキーの値が1または5の範囲にあるドキュメントをzone alpha
内のシャードにルーティングします。
一般に、ハッシュされたシャードキー値の連続した範囲をカバーするゾーンは、予期しない動作をする可能性があります。
Minkeyとmaxkeyを使用してシャードキー値の全範囲をカバーするゾーンを作成して、MongoDBが特定のコレクションのすべてのデータをそのゾーン内のシャードに制限することを保証できます。