MongoDBのチャンクを説明する
MongoDBは、スライスの使用では、しばしばチャンクの概念を使用して、チャンクは、サブセットのデータのコレクションは、単にデータブロックとして理解することができます、各チャンクは、スライスキーの値の範囲に基づいて、間隔が閉じて右オープン左されます。例えば、私たちのスライスキーは名前の2番目の文字で、A-Zの26の可能性を含んでいます。理想的には、26個のチャンクに分割され、文字で始まる各名前レコードがチャンクとなります。
データが書き込まれると、mongosはスライスキーシャードキーの値に基づいて、対応するチャンクに書き込み、チャンクの最小範囲は、唯一の特定の単一のスライスキー値文書チャンクが分割することはできません含む、単一のユニークなシャードキーの値を表すことができます、これも比較的容易に理解することができる。チャンクにスライスキー値しかない場合 チャンクにスライスキー値しかない場合、それが分割されていれば、スライスキー値が2つのチャンクをマッピングすることを意味し、次にこのスライスキーを持つ文書に出会ったとき、mongosはそれがどのチャンクに格納されるべきかわからないでしょう。
チャンクの大きさはどのように決まるのですか?
MongoDBでは、チャンクのデフォルトのサイズは64MBで、サイズを増減させることができます。
チャンクサイズは小さすぎてはいけません。チャンクが小さすぎると、データをより均等に分散できるという利点がありますが、チャンク間の移行が頻繁に発生し、パフォーマンスのオーバーヘッドが発生します。同様に、チャンクサイズは大きすぎてはならず、大きすぎるとデータの分散に偏りが生じます。
チャンクの分割
チャンクの値が1つのチャンクが表現できる最大値に達すると、この時点でチャンクは無限に大きくなることはできないので、チャンクのサイズを分割して減らす必要があります。例えば、64MBのチャンクは2つの32MBチャンクに分割され、チャンクの数は増えますが、1つのチャンクの削減という利点がもたらされます。
チャンクの移行
シャード+複製セットアーキテクチャでは、サーバー上のデータレコード数が増え続けると、そのサーバー上にパーティショニングされるチャンクの数が大きくなります。クラスタ内の各サーバのチャンク数のバランスが著しく崩れた場合、mongodbはバランサーを介して自動的にチャンクのマイグレーションを行います。バランサーはシャード間のチャンク数の差があらかじめ指定された閾値を超えたと判断すると、次のようにチャンクのマイグレーションジョブを実行します。
つまり、上の状態から下の状態へ。各チャンクは、チャンクを表します。
MongoDBが自動的にマイグレーションを起動するための閾値の表は以下の通りです。
チャンク数: <20, マイグレーション閾値: 2
チャンク数:20~79、移行しきい値。4
チャンク数: >80、移行しきい値。8
チャンクの移行は一般的にロックを使って行われ、MongoDBバージョン3.4からチャンクの移行は7ステップで行われるようになりました。
1. バランサープロセスはmoveChunkコマンドを送信元シャードに送る
2. ソースシャードは、内部のmoveChunkコマンドを使用して移動を開始します。移行中、チャンクの操作は依然としてソースシャードで実行され、ソースシャードはチャンクの書き込み操作に責任を負います。
3. ターゲットシャードが必要なインデックスの作成を開始します。
4、ターゲットシャードがチャンク内のドキュメントのリクエストを開始し、データのコピーを受信し始める
5、ソースシャードから最後のドキュメントを受け取った後、ターゲットシャードは同期処理を開始し、移行期間中のログを取り出し、移行中にそのチャンクで行われた操作をターゲットチャンクに更新します。
6. 完全に同期されると、ソースシャードはコンフィグデータベースに接続し、チャンクのロケーションメタデータを更新します。
7. もちろん、ユーザーは_waitforDeleteパラメータをtrueに設定して、チャンクの移行が完了した後にソースシャードがチャンクのデータを同期的に削除できるようにすることができます。
通常、チャンクマイグレーションは以下の3つのシナリオで発生します。
1. 複数のシャードで偏在
2. ユーザーがremoveShardを呼び出した後、削除されたシャード上のチャンクは他のシャードにマイグレートされる
3. MongoDBのシャードタグ機能では、シャードやシャードのキー範囲にタグを付けると、システムが自動的に対応する範囲のデータを同じタグのシャードにマイグレーションすることができます。
上記はMongoDB chunkの詳細な説明です。MongoDB chunkの詳細な情報は、スクリプトハウスの他の関連記事にも注目してください
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン