Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

refineCollectionShardKey

項目一覧

  • 定義
  • 互換性
  • 構文
  • アクセス制御
  • Considerations
refineCollectionShardKey

コレクションのシャードキーを変更するために、新しいフィールドをサフィックスとして既存のキーに追加します。 コレクションのシャードキーを調整すると、濃度が十分でないために既存のキーがジャンボ (分割できない)チャンクになる状況に対処できます。

注意

データ分散

シャードキーを調整する一環として、 refineCollectionShardKeyコマンドは、チャンク範囲ゾーン範囲を更新して、既存のキー フィールドの範囲値を変更せずに新しいフィールドを組み込みます。 つまり、シャードキーを改善しても、シャードまたはゾーン全体へのチャンクの分散にはすぐに影響しません。 将来の チャンクの分割 や移行は、ルーチンのシャーディング操作の一部として発生します。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

重要

このコマンドは、M 10 + クラスターまたはサーバーレス インスタンスではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

注意

refineCollectionShardKeyコマンドを使用するには、シャーディングされたクラスターの機能の互換性バージョン(fcv)4.4である必要があります。

refineCollectionShardKeyコマンドはadminデータベースに対して実行する必要があり、形式は次のとおりです。

db.adminCommand( {
refineCollectionShardKey: "<database>.<collection>",
key: { <existing key specification>, <suffix1>: <1|"hashed">, ... }
} )

refineCollectionShardKeyコマンドには次のフィールドがあります:

フィールド
タイプ
説明

string

"<database>.<collection>"形式のシャーディングされたコレクションの名前空間

ドキュメント

コレクションの新しいシャードキーとして使用するフィールドを指定するドキュメント。

{ <existing key specification>, <suffix1>: <1|"hashed">, ... }

  • 新しいキーは、既存のシャードキーで開始する必要があります。

  • 新しいキーは、 コマンドを実行する前にrefineCollectionShardKey が存在しなければならないインデックスでサポートされている必要があります。詳細については、「 インデックスの考慮事項 」を参照してください。

サフィックス フィールドの場合は、フィールド値を次のいずれかに設定します。

Tip

以下も参照してください。

アクセス制御を使用して実行中の場合、コマンドを実行するにはrefineCollectionShardKey データベースやコレクション に対する 特権アクションが必要です。つまり、ユーザーは、次の 特権 を付与する ロール を持っていなければなりません。

{ resource: { db: <database>, collection: <collection> }, actions: [ "refineCollectionShardKey" ] }

組み込みの clusterManager ロールにより、適切な権限が付与されます。

  • インデックスの存在

    コマンドを実行する に、 コマンドの指定された キー をサポートするインデックスが存在している必要があります。

    サポート インデックスは、新しいシャードキー仕様で開始されるインデックスです。つまり、インデックス プレフィックスが新しいシャードキー仕様と一致する。 つまり、シャードキーを{ x: 1, y: 1 } { x: 1 }に変更するには、 かつ{ x: 1, y: 1 } で始まるインデックスが存在する必要があります。例:

    • { x: 1, y: 1 }

    • { x: 1, y: 1, a: 1, b: 1}

    注意

  • ユニークインデックス

    現在のシャード インデックスに一意の制約がある場合、新しいシャードキー インデックスにも一意の制約が必要です。

    After creating the unique index to support the new shard key, drop the old shard key index before running refineCollectionShardKey.
    Also, if the current shard index has a unique constraint, then the new shard key cannot specify "hashed" for any of its fields.
  • インデックス照合
    シャーディングされたコレクションのデフォルトの照合simple以外の場合、インデックスには{ locale : "simple" }の照合ドキュメントが含まれている必要があります。 フィールドがシャードキー パターンをサポートするインデックスの少なくとも 1 つには、単純照合が必要です。

警告

現在のシャードキー フィールドの範囲またはハッシュされたタイプは変更 しない でください。 データの不整合が発生します。 たとえば、シャードキーを{ customer_id: 1 }から{ customer_id: "hashed", order_id: 1 }に変更 しないでください 。

testデータベースで例を設定するには、次の手順に従います。

  1. シャーディングがまだ有効になっていない場合は、データベースでシャーディングを有効にします。

    sh.enableSharding("test")
  2. 次のshardCollection操作を使用して、 testデータベース内のordersコレクションをシャーディングします。 この操作では、 customer_idフィールドを初期シャードキーとして使用します。

    db.adminCommand( { shardCollection: "test.orders", key: { customer_id: 1 } } )

シャードキーをcustomer_idフィールドとorder_idフィールド{ customer_id: 1, order_id: 1 }に変更するには、

  1. Create the index インデックスがまだ存在しない場合に新しいシャードキーをサポートするため。

    db.getSiblingDB("test").orders.createIndex( { customer_id: 1, order_id: 1 } )
  2. refineCollectionShardKeyコマンドを実行して、 order_idフィールドをサフィックスとして追加します。

    db.adminCommand( {
    refineCollectionShardKey: "test.orders",
    key: { customer_id: 1, order_id: 1 }
    } )

コマンドが正常に完了すると、コレクションのシャードキーは{ customer_id: 1, order_id: 1 }に変更されました。 確認するには、 sh.status()を実行します。

Tip

シャードキーを調整すると、コレクション内のすべてのドキュメントにサフィックス フィールドが存在しない場合があります。 欠落しているシャードキー フィールドを入力するには、「欠落しているシャードキー フィールド 」を参照してください。

シャードキーを検証する前に、コレクション内のすべてまたはほとんどのドキュメントにサフィックス フィールドが含まれていることを確認して、可能であれば、フィールドにその後にフィールドを入力する必要がないようにします。

testデータベースで例を設定するには、次の手順に従います。

  1. シャーディングがまだ有効になっていない場合は、データベースでシャーディングを有効にします。

    sh.enableSharding("test")
  2. フランス語のfrをデフォルトの照合として指定して、 testデータベースにcafésコレクションを作成します。

    db.getSiblingDB("test").createCollection( "cafés", { collation: { locale: "fr" } } );
  3. customer_idフィールドを初期シャードキーとして使用してコレクションをシャーディングします。 コレクションにはデフォルトのfr照合があり、 simple照合がないため、 shardCollectionコマンドにはcollation: { locale: "simple" }オプションを含める必要があります。

    db.adminCommand( {
    shardCollection: "test.cafés",
    key: { customer_id: 1 },
    collation: { locale: "simple" }
    } )

シャードキーを変更して、 customer_idフィールドとorder_idフィールド{ customer_id: 1, order_id: 1 }の両方を指定するには、

  1. インデックスがまだ存在しない場合に新しいシャードキーをサポートするためのCreate the index コレクションは非単純な照合を使用するため、インデックスにはcollation: { locale: "simple" }オプションを含める必要があります。

    db.getSiblingDB("test").cafés.createIndex(
    { customer_id: 1, order_id: 1 },
    { collation: { locale: "simple" } }
    )
  2. refineCollectionShardKeyコマンドを実行して、 order_idフィールドをサフィックスとして追加します。

    db.adminCommand( {
    refineCollectionShardKey: "test.cafés",
    key: { customer_id: 1, order_id: 1 }
    } )

コマンドが正常に完了すると、コレクションのシャードキーは{ customer_id: 1, order_id: 1 }に変更されました。 確認するには、 sh.status()を実行します。

Tip

シャードキーを調整すると、コレクション内のすべてのドキュメントにサフィックス フィールドが存在しない場合があります。 欠落しているシャードキー フィールドを入力するには、「欠落しているシャードキー フィールド 」を参照してください。

シャードキーを検証する前に、コレクション内のすべてまたはほとんどのドキュメントにサフィックス フィールドが含まれていることを確認して、可能であれば、フィールドにその後にフィールドを入力する必要がないようにします。

Tip

以下も参照してください。

戻る

mergeChunks