2017-01-19 9 views
1

MongoDBで次の機能がサポートされているのでしょうか。 現在、hashed shardingを使用している既存のシャーディングクラスターに新しいシャードを追加するときは、古いシャード内の一部の文書を新しいシャードに移行する必要があります。ハッシュシャードを使用してクラスタに新しいシャードを追加するとどうなりますか?

質問: mongodbはこのプロセスを自動的に処理できますか?

ありがとうございます。

答えて

1

はい。あなたはキーフィールドのハッシュコードを取って、クラスター内のノード数のモジュロを行い、そのノードに値を置く実装を想像してみてください。ノード/シャードをクラスタに追加すると、モジュロの値が変更され、すべてのデータがスクランブルされるため、ノードを追加することはできません。

この問題を回避するには、分散システムは少し異なります。物理的なマシンにマッピングする代わりに、ハッシュコードはmongodbのものを "チャンク"と呼んでいます。 apacheでは、これはパーティションになります。ノードより多くのチャンクがありますが、多くのデータ行は1つの "チャンク"に対応しています。

例として、1,000,000行と5つのホストがある場合は、hashcode modulo 100を使用して、1000万行に100個の固有キーがあるようにして、クラスタ内のノードを確定的に選択し、第1のノードを追加するとき、再バランスプロセスは、あるノードから別のノードへ「チャンク」を移動し、マッピングテーブルを更新することができる。マッピングテーブルは、すべての行ではなく、100チャンクのノード位置のみを記録するので、これは管理可能です。

Mongodbはバックグラウンドプロセスを使用してノード上のチャンクの数を監視し、必要に応じてそれらを移動します。 MongoDBの中

"チャンク": https://docs.mongodb.com/v3.2/core/sharding-data-partitioning/

Reblanacing: https://docs.mongodb.com/v3.2/core/sharding-balancer-administration/

関連する問題