シャーディングされたクラスターの運用上の制限
シャーディング操作上の制限
シャーディングされた環境で利用できない操作
$where
は、 $where
関数からdb
オブジェクトへの参照を許可していません。 これは、シャーディングされていないコレクションでは珍しいことです。
geoSearch
コマンドはシャーディングされた環境ではサポートされていません。
MongoDB 5.0 以前のバージョンでは、$lookup
ステージのfrom
パラメーターでシャーディングされたコレクションを指定できません。
シャーディングされたコレクションにおける単一ドキュメントの変更操作
multi: false
またはjustOne
オプションを指定するシャーディングされたコレクションに対してupdateOne()
およびdeleteOne()
操作を使用するには以下に従ってください。
1つのシャードのみをターゲットにする場合は、クエリ仕様で部分的なシャードキーを使用するか、
クエリ仕様でシャードキーまたは
_id
フィールドを指定できます。
シャーディングされたコレクションでfindOneAndUpdate()
を使用するには、クエリフィルターにシャードキーの等価条件が含まれている必要があり、次のいずれかの形式でキーと値を比較する必要があります。
{ key: value } { key: { $eq: value } }
シャーディングされたコレクションにおけるユニークインデックス
MongoDB は、ユニークインデックスにインデックスのプレフィックスとして完全なシャードキーが含まれている場合を除き、シャード間のユニークインデックスをサポートしていません。このような状況では、MongoDB は単一のフィールドではなく、キー全体に対して一意性を強制します。
既存のコレクション データ サイズのシャーディング
既存のコレクションは、そのサイズが特定の制限を超えない場合にのみシャーディングできます。 これらの制限は、すべてのシャードキー値の平均サイズと構成されたチャンクサイズに基づいて推定できます。
重要
これらの制限は、最初のシャーディング操作にのみ適用されます。 シャーディングされたコレクションは、シャーディングを正常に有効にすると任意のサイズに拡大できます。
MongoDB は、作成時に各チャンクが半分になるようにコレクション内のドキュメントを分散します。 論理的な最大コレクション サイズを計算するには、次の式を使用します。
maxSplits = 16777216 (bytes) / <average size of shard key values in bytes> maxCollectionSize (MB) = maxSplits * (chunkSize / 2)
注意
BSONドキュメントの最大サイズは16 MB または16777216
バイトです。
すべての変換ではベースと2スケールを使用する必要があります。例: 1024キロバイト = 1メガバイト
maxCollectionSize
がターゲット コレクション未満またはほぼ等しい場合は、初期シャーディングを成功させるために、チャンク サイズを増やします。 計算の結果がターゲット コレクション サイズに「近い」かどうかという懸念がある場合は、チャンク サイズを増やすことをお勧めします。
最初のシャーディングが成功したら、必要に応じてチャンク サイズを縮小できます。 後でチャンクのサイズを縮小すると、すべてのチャンクが新しいサイズに分裂するまでに時間がかかる場合があります。 チャンク サイズを変更する手順については、「 シャーディングされたクラスターのチャンク サイズの変更」を参照してください。
以下の表は、上記の式を使用して、おおよその最大コレクション サイズを示しています。
シャードキー値の平均サイズ | 512バイト | 256バイト | 128バイト | 64バイト |
---|---|---|---|---|
分割の最大数 | 32,768 | 65,536 | 131,072 | 262,144 |
最大コレクション サイズ( 64 MB チャンク サイズ) | 1 TB | 2 TB | 4 TB | 8 TB |
最大コレクション サイズ( 128 MB チャンク サイズ) | 2 TB | 4 TB | 8 TB | 16 TB |
最大コレクション サイズ( 256 MB チャンク サイズ) | 4 TB | 8 TB | 16 TB | 32 TB |