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

分裂

項目一覧

  • 定義
  • 互換性
  • 構文
  • コマンドフィールド
  • Considerations
  • コマンド形式
  • Metadata Lock Error
split

シャーディングされた クラスター内 チャンク を 2 つのチャンクに分割します。シャードは、保持する チャンク サイズ 統計に基づいてチャンクを管理および分割します。

例外的な状況では、 splitコマンドでは、管理者が分割を手動で作成できます。 これらの状況と をラップする MongoDB shell コマンドについて は、「 シャーディングされたクラスターでのチャンクの分割split 」を参照してください。

splitコマンドはadminデータベースで実行する必要があります。

Tip

mongoshでは、このコマンドはsh.splitAt()およびsh.splitFind()ヘルパー メソッドを通じて実行することもできます。

ヘルパー メソッドはmongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。

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

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

重要

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

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

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

このコマンドの構文は、次のとおりです。

db.adminCommand(
{
split: <database>.<collection>, <find|middle|bounds>
}
)

このコマンドは、次のフィールドを使用します。

フィールド
タイプ
説明
split
string
チャンク が存在する コレクション の名前。データベース名を含む、コレクションの完全な名前空間を指定します。
find
ドキュメント

シャードキーの等価一致を指定するクエリ ステートメント。 一致により、指定されたドキュメントを含むチャンクが選択されます。 次のいずれか 1 つだけを指定する必要があります: findbounds 、またはmiddle

空のコレクションではfindオプションは使用できません。

bounds
配列

bounds は、ハッシュされたシャードキーを使用してパーティション化されたコレクション内のチャンクに適用されます。 パラメーターの配列は、チャンクのシャードキーの下限と上限を指定する 2 つのドキュメントで構成されている必要があります。 値は、既存のチャンクの最小値と最大値と一致する必要があります。 次のいずれか 1 つだけを指定します: findbounds 、またはmiddle

空のコレクションではboundsオプションは使用できません。

middle
ドキュメント
2 つのチャンクを作成するための分割点として使用するドキュメント。 splitには次のいずれかのオプションが必要です: findbounds 、またはmiddle

findまたはboundsオプションのいずれかとともに使用すると、 splitコマンドは中央値に基づいてチャンクを分割します。 そのため、コマンドではfindまたはboundsオプションを使用して空のチャンクを分割できません。空のチャンクには中央値がないためです。

空のチャンクに分割を作成するには、 splitコマンドでmiddleオプションを使用するか、 sh.splitAt()コマンドを使用します。

チャンクの分割を作成するには、 mongosインスタンスに接続し、 adminデータベースに次のコマンドを実行します。

db.adminCommand( { split: <database>.<collection>,
find: <document> } )

または:

db.adminCommand( { split: <database>.<collection>,
middle: <document> } )

または:

db.adminCommand( { split: <database>.<collection>,
bounds: [ <lower>, <upper> ] } )

ハッシュされたシャードキーを使用するコレクションの分割を作成するには、 boundsパラメータを使用します。 この目的では、 middleパラメータを使用しないでください。

警告

シャーディングされたコレクションのデータを分割して新しいチャンクを作成する場合は注意してください。 既存のデータを持つコレクションをシャーディングすると、MongoDB はコレクションを均等に分散するためのチャンクを自動的に作成します。 シャーディングされたクラスターでデータを効果的に分割するには、チャンク内のドキュメント数と平均ドキュメント サイズを考慮して、均等なチャンク サイズを作成する必要があります。 チャンクのサイズが不均等な場合、シャードのチャンク数は同じ数でも、データサイズは大きく異なる場合があります。 サイズが異なるコレクションになるような分割は作成しないようにします。

Tip

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

次のセクションでは、 splitコマンドの例を示します。

db.adminCommand( { split : "test.people", find : { _id : 99 } } )

splitコマンドは、 { _id : 99 }に一致するドキュメントを保持するtestデータベースのpeopleコレクション内のチャンクを識別します。 splitでは、適切なチャンクを識別するために、一致が存在する必要はありません。 次に、コマンドはそれを同じサイズの 2 つのチャンクに分割します。

注意

split は、サイズではなく範囲で 2 つの等しいチャンクを作成し、選択した点を新しいチャンクの境界として使用しません。

任意の分裂点を定義するには、次の形式を使用します。

db.adminCommand( { split : "test.people", middle : { _id : 99 } } )

splitコマンドは、 testデータベースのpeopleコレクション内のチャンクを識別し、クエリ{ _id : 99 }に一致するドキュメントを保持します。 splitでは、適切なチャンクを識別するために、一致が存在する必要はありません。 次に、 コマンドはそれを 2 つのチャンクに分割し、一致するドキュメントを分割されたチャンクの 1 つの下限として返します。

この形式は通常、コレクション内のデータを事前に分割するときに使用されます。

この例では、 testデータベースのpeopleコレクションでハッシュされたシャードキーuseridを使用します。 次のコマンドは、2 つの単一フィールド ドキュメントを含む配列を使用して、チャンクを分割するための ハッシュされたシャードキー の最小値と最大値を表します。

db.adminCommand( { split: "test.people",
bounds : [ { userid: NumberLong("-5838464104018346494") },
{ userid: NumberLong("-5557153028469814163") }
] } )

注意

MongoDB は、ハッシュ値を表すのに64ビットのNumberLong型を使用します。

シャードキーの既存の限界を確認するには、 sh.status()を使用します。

splitの実行中にバランサー プロセスなどの別のプロセスがメタデータを変更すると、 metadata lock errorが表示されることがあります。

errmsg: "The collection's metadata lock is already taken."

このメッセージは、分裂が失敗し、サイド効果がないことを示しています。 splitコマンドを再試行します。

戻る

shardingState