グローバル コレクションのシャード
項目一覧
Atlas UI でのグローバル書込みのためのグローバルコレクションのシャーディング
注意
グローバル書込みは、
M30+
クラスター階層を必要とするグローバルクラスターでのみサポートされます。Atlas UI を使用して、 Atlas マネージド シャーディングが有効になっているグローバルクラスターでのみグローバルコレクションをシャードできます。
このドキュメントでは、シャーディング セマンティクスに関する予備知識を前提としています。 このチュートリアルを続行する前に、シャーディングに関するドキュメントを確認してください。
シャーディングされたクラスターでは、 シャードキー に基づきシャーディングされたデータの ゾーン を作成できます。ゾーンは地理的領域に基づいてデータをセグメント化できます。 地理的領域に基づくシャーディングの詳細については、「ロケーションによるデータの分割 」を参照してください。
Atlas UI は、 Atlas マネージドシャーディング を使用するグローバルクラスターのグローバル書込みコレクションのシャーディングをサポートしています。 自己管理型シャーディングを使用する非グローバル書込みコレクションまたはグローバル書込みコレクションをシャードするには、 mongosh
またはアプリケーション コードを使用する必要があります。 詳細については、「シャーディングされたクラスターの配置 」を参照してください。
必要なアクセス権
Atlas UI でグローバル書込みのコレクションをシャードするには、クラスターの Atlas プロジェクトのProject Owner
またはOrganization Owner
ロールが必要です。
Considerations
この手順を開始する前に、以下のことを確認してください。
コレクションをシャーディングしたり、クラスター階層をアップグレードしたりする代わりに、アクセス頻度の低いデータを Atlas クラスターから MongoDB が管理する読み取り専用フェデレーティッドデータベースインスタンスに移動するように Atlas Online Archiveを構成できます。Atlas Online Archive の詳細については、「Atlas Online Archive の管理」を参照してください。
Atlas UI でシャードキーを選択すると、Atlas はターゲット コレクションのシャーディングを試行します。 この期間中、ユーザーがコレクションを手動でシャーディングしないようにします。 Atlas がターゲット コレクションが Atlas UI で選択したキーとは異なるキーでシャーディングされていることを検出した場合、Atlas は手順を停止し、Atlas UI にそのコレクションに対する警告を表示します。 [ Unmanage Collectionをクリックして警告をクリアできます。 このアクションは、基礎となるコレクションと手動で選択されたシャードキーを変更せずに、Atlas マネジメントからコレクションを削除します。
シャードキー値の更新
MongoDB 4.2以降では、シャードキー フィールドが不変の_id
フィールドでない限り、ドキュメントのシャードキー値を更新できます。 詳細については、「ドキュメントのシャードキー値の変更 」を参照してください。
MongoDB 4.0 以前では、グローバル書込みが有効なコレクション内の既存のドキュメント内のシャードキー フィールドの値を更新することはできません。
重要
シャードキー値とグローバルクラスター
すべての MongoDB バージョンでは、グローバルクラスター上のコレクションを再シャーディングすることはできません。 詳細については、「グローバル書込みのコレクションのシャーディング 」を参照してください。
手順
グローバルクラスターでコレクションをシャードするには、次の手順に従います。
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
Collections ページに移動します。
クラスターの [Browse Collections] ボタンをクリックします。
Data Explorerが表示されます。
Advanced Shard Key Configuration セクションを展開して、コレクションをシャードする方法を指定します。
次のいずれかのオプションを選択できます。
Default | Atlas は、フィールドを指定するドキュメントをシャードキーとして使用します。 |
Use unique index as the shard key | Atlas は基礎となるインデックスを使用して、グローバルコレクションのシャードキーに一意の制約を強制します。 |
Use hashed index as the shard key | Atlas は、シャードキーの 2 番目のフィールドをハッシュすることにより、シャーディングされたデータを均等に分散します。 このオプションは、MongoDB v5.0 以降を実行している Atlas クラスターでのみ使用できます。 オプションでPre-split data for even distributionを選択し、コレクションに定義されたゾーンとゾーン範囲に基づいて、空のコレクションまたは存在しないコレクションの初期チャンク作成と分散を実行するかどうかを指定できます。 Pre-split data for even distributionオプションを選択すると、ハッシュされたシャードキーで空のコレクションをシャーディングするときに最初に作成するチャンクの最小数を指定することもできます。 最初のチャンク分散により、Atlas は ゾーン シャーディング を迅速に設定できます。 Atlas が作成するチャンクの数は、定義したゾーンの数によって異なります。 デフォルトでは、Atlas はロケーション コードごとに 1 つのチャンクを作成し、チャンクをすべてのシャードに均等に分散します。 |
これらのオプションの詳細については、「グローバルクラスター シャーディング リファレンス 」を参照してください。
Atlas では、コレクションを構成すると、 Global Writesタブの上部に複合シャードキーが表示されます。
グローバルクラスターシャーディングに関する参考資料
次のセクションでは、シャーディング動作と、グローバルクラスターの管理でシャーディングを有効にする方法について説明します。
グローバル書込みのためのコレクションのシャーディング
Atlas マネージド シャーディング を持つグローバルクラスターの場合。 有効な場合、シャーディングされていないコレクションがシャーディング時にグローバル書込みを使用するには、シャーディングする前に次の互換性要件を満たしている必要があります。
コレクション内のすべてのドキュメントには
location
フィールドを含める必要があります。フィールドの値は、
location
ISO-3166 12"US"
"DE"
"IN"
31662"US-DC"
"DE-BE"
-"IN-DL"
alparent のいずれかである 必要 があります。 国コード( 、 、 ) または サポートされている ISO- - 下位分類コード( 、 、 )。この条件に一致しないドキュメントは、クラスター内のどのシャードにもルーティングできません。 現在サポートされている国または地域コードの完全なリストを表示するには、 https://cloud.mongodb.com/static/atlas/country_iso_codes.txt を参照してください。
location
フィールドのみのシャードキーは、特に国または地域のサブセットが書き込み操作の大部分を受け取るワークロードの場合、ボトルネックが発生する可能性があります。 Atlas グローバル書き込みでは、シャーディングされたデータをクラスター全体に効率的に分散するために複合シャードキーが必要です。 Atlas Global Cluster のシャードキーは MongoDB のシャードキーと同じ制限を共有しています。 次の Atlas グローバルクラスターの制限が適用されます。
複合シャードキーの最初のフィールドは
location
である必要があり、ハッシュすることはできません。複合シャードキーには、セカンダリ シャードキー フィールドが 1 つだけ存在します。
複合 シャードキーのセカンダリ シャードキー フィールドはハッシュできます。
セカンダリ シャードキー フィールドは配列にできません。
詳細は、以下を参照してください。
セカンダリ シャードキー フィールドの選択とシャードキーの選択がデータ分散に与える影響については、「 シャードキーの選択 」を参照してください。
シャードキーの制限については、「シャードキーの制限 」を参照してください。
使用可能なハッシュ シャーディング オプションについては、「 ハッシュされたシャーディング オプション 」を参照してください。
重要
シャードキーの変更
シャーディング後、変更できる内容は、実行する MongoDB のバージョンによって異なります。
MongoDB バージョン | シャードキー キーの変更 | シャードキー値の変更 |
---|---|---|
MongoDB 5.0 | はい、 Atlas UIのみを使用してキーにフィールドを追加します。 | はい |
MongoDB 6.0 | はい、 Atlas UIのみを使用してキーにフィールドを追加します。 | はい |
MongoDB 7.0 | はい、 Atlas UIのみを使用してキーにフィールドを追加します。 | はい |
すべての MongoDB バージョンでは、グローバルクラスター上のコレクションを再シャーディングすることはできません。
Atlas UIは、グローバル書込み (write) 向けの特定の検証を持つシャーディングされたコレクションの作成をサポートしています。 詳しくは、「 Atlas UI でグローバル書込みのためにグローバル コレクションをシャード 」を参照してください。
mongosh
を使用してsh.shardCollection()
を実行することもできます。 コレクションをシャーディングした後、 Atlas UIを使用してそのコレクションのグローバル書込みを有効にする必要があります。
警告
Atlas Search インデックスが既に存在するコレクションをシャーディングする場合、コレクションがシャードに表示され始めるときにクエリのダウンタイムが短時間発生することがあります。また、シャードを Atlas Search インデックスなどのシャーディングされたコレクションに追加する場合、追加されたシャードで最初の同期プロセスが完了するまで、そのコレクションに対する検索クエリは失敗します。詳しくは、「最初の同期プロセス」を参照してください。
Atlas UI を使用してコレクションをシャーディングする方法の詳細については、「 Atlas UIでのグローバル書込みのためのグローバルコレクションのシャーディング 」を参照してください。
ハッシュされたシャーディングのオプション
シャードキーは、ハッシュされたシャーディングと事前分割されたデータを使用して均等に分散します。 これは、MongoDB 5.0以降を実行している Atlas クラスターでのみ使用できます。
次のいずれかのアクションを実行すると、Atlas はシャードキーの 2 番目のフィールドをハッシュしてシャーディングされたデータを均等に分散します。
Atlas UIでUse hashed index as the shard keyを選択して、ハッシュ インデックス シャードキーの使用を有効にします。
API経由で
isCustomShardKeyHashed
を設定します。
オプションで、空のコレクションや存在しないコレクションに対して初期チャンクの作成と分散を実行するかどうかを指定できます。 このアクションは、コレクションに定義されたゾーンとゾーン範囲に基づいています。 これを行うには、次のいずれかのアクションを実行します。
グローバルクラスターの複合ハッシュされたシャードキーを使用してシャーディングされたコレクションを作成すると、Atlas はロケーションコードごとに少なくとも1チャンクを作成し、チャンクをクラスター内のシャードに均等に分散しようとします。
Atlas UI を使用して ハッシュされたシャードキー で空のコレクションをシャーディングする場合、またはnumInitialChunks
API を通じて パラメーターを設定することで、最初に作成するチャンクの最小数を指定することもできます。
注意
シャードあたりのチャンク数を指定すると、Atlas は指定した最小数以上のチャンクを、ロケーション コードごとに同じ数のチャンクで作成します。 チャンクの最小数を指定すると、Atlas は ゾーン シャーディング を迅速に設定します(特に、シャーディングする前にデータを地理的に分散する方法がすでにわかっている場合)。
Error Handling
Atlas がグローバル書き込み用のコレクションのシャーディング中にエラーに発生した場合、画面上部のバナーにメッセージが表示されます。
エラーとエラーが発生した名前空間の詳細については、 See Detailsをクリックしてください。 モーダル ウィンドウに、完全なエラー メッセージとFix Nowボタンが表示されます。
Closeをクリックし、Atlas UI のコレクションに移動します。 [] Fix NowGoボタンをクリックして、そのAtlas クラスターの UI に することもできます。Atlas
エラー メッセージに記載されているコレクションの [ Global Writes ] タブをクリックします。
グローバル書込みシャーディング操作をキャンセルするには、 Unmanage Collectionをクリックします。 シャーディング操作をキャンセルするには、
Project Data Access Admin
ロールが必要です。
エラー メッセージに示されているように、コレクションに必要な変更を加えたら、シャーディング プロセスを再度開始できます。
考えられるエラーは次のとおりです。
- カスタム シャードキーにはインデックスがすでに存在します。
- 複合シャードキー の 2 番目の部分として選択されたフィールドがすでにインデックスされている場合、シャーディング操作は失敗する可能性があります。
- シャードキー フィールドが存在しない場合。
- コレクション内のすべてのドキュメントには、両方のシャードキー フィールドが含まれている必要があります。 このエラーは MongoDB 5.0 より前のバージョンでのみ発生します。
- コレクションはすでにシャーディングされています。
- コレクションがすでに手動でシャーディングされている場合、操作は失敗します。
- コレクションにはカスタムのデフォルト照合があります。
- コレクションでカスタムのデフォルト照合を実行すると、シャーディング エラーが発生する可能性があります。
グローバルクラスター書込み (write) 操作
MongoDB は、書込み操作内の各ドキュメントごとに、シャードキーのlocation
フィールド(含まれている場合)を使用して、データをルーティングするゾーンを決定します。 MongoDB は、そのゾーンに関連付けられたシャードをドキュメント書込みのターゲットとして選択し、地理的に分離されたデータ ストレージを容易にします。
警告
シャードキーが書き込み操作に含まれていない場合、またはシャードキーが含まれているがlocation
フィールドが存在しない場合、書き込み操作は成功しますが、結果のドキュメントは配布されません。
MongoDB は、 グローバル書込みの シャーディング コレクション で定義された基準を満たす挿入されたドキュメントに対してのみこの動作を保証できます。 具体的には、MongoDB はlocation
フィールドが ISO-3166 -1 alparent2 に準拠していないドキュメントをルーティングできます または ISO-3166 - クラスター内の任意のシャードに接続します。2
グローバルクラスターの読み取り操作
MongoDBクエリのルーティングは、読み取り操作に完全なシャードキーが含まれているかどうか、 および location
値がサポートされている 316612"US"
"DE"
"IN"
ISO-3166 -2 アルゴリズム"US-DC"
"DE-BE"
"IN-DL"
に対応しているかどうかによって異なります。 国コード( 、 、 ) または サポートされている ISO- - 下位分類コード( 、 、 )。
完全なシャードキーを含み、かつ
location
値がグローバル書込みの要件を満たしているクエリの場合、MongoDB は読み取り操作を、location
値またはクエリで指定された値にマッピングするゾーンに限定します。location
値 を含まない読み取り操作の場合、またはlocation
値がサポートされている ISO-3166 -1 2alparent に対応していない場合 国コードまたは ISO-3166 -2 MongoDB は読み取り操作をクラスター内のすべてのゾーンにブロードキャストする必要があります。地理的に離れたリージョンにRead-only ノードを持つグローバル書き込みゾーンの場合、それらのリージョンのクライアントは、クエリの一部として完全なシャードキーを指定し、Read-only 読み取り設定 で読み取り操作 を 発行することで、そのゾーンのローカル ノードをクエリできますの
nearest
。
重要
セカンダリ ノードとプライマリ間のレプリケーションラグのレベルによっては、セカンダリ読み取りによって古いデータが返される場合があります。
詳しくは、「 MongoDB 読み込み設定(read preference) 」と「 MongoDB クエリ ルーティング 」を参照してください。
グローバル書込みなしでのコレクションのシャーディング
グローバル書き込みクラスターは、標準の Atlas シャーディングされたクラスターと同じ範囲およびハッシュシャーディング戦略をサポートします。 シャードキーとドキュメント スキーマがグローバル書込みをサポートしていないシャーディングされたコレクションの場合、MongoDB は、選択されたシャードキーに関連するクラスター内の利用可能なシャード全体にシャーディングされたデータを均等に分散します。 グローバル書き込みを利用できないデータには、別の シャーディングされたクラスター を使用することを検討してください。
シャーディング後は、グローバル書込みをサポートするようにコレクションを変更できません。 将来的にコレクションのグローバル書込みを使用できるシャードキーを選択することをお勧めします。
グローバル書込みクラスターでシャーディングされていないコレクション
グローバルクラスターは、標準の Atlas シャーディングされたクラスターと同じ、シャーディングされていないコレクションのサポートを提供します。 MongoDB では、クラスター内の各データベースに対して、シャーディングされていないコレクションをプライマリシャードに保存します。 sh.status()
データベースのプライマリシャードを決定するには、mongosh
から を使用します。