1

私はMongoDBでのシャーディングについて考えていましたが、理解できなかったユースケースに出くわしました...だからここにあります:

こんな書類があれば・・・

_id [Integer]
username [String]
password [String] <-- SHA1 hash
firstname [String]
lastname [String]

...そして、パスワード フィールドをシャード キーとして選択しました。カーディナリティが非常に高く、適切にスケーリングされるため、シャーディングに適しています。しかし、ユーザーが自分のパスワードを変更するとどうなるかという疑問が残ります。対応するドキュメントは自動的に別のチャンクに移行されますか?

MongoDB がこのようなケースをどのように処理するか知っている人はいますか?

ありがとう

4

3 に答える 3

3

いいえ、シャード キーは不変です。

mongo のドキュメント、Can I change the shard key after sharding a collection?を検討してください。:

コレクションをシャーディングした後でシャード キーを変更できますか?

いいえ。

コレクションをシャーディングした後にシャード キーを変更するための MongoDB の自動サポートはありません。この事実は、適切なシャード キーを選択することの重要性を強調しています。コレクションをシャーディングした後にシャード キーを変更する必要がある場合、最適なオプションは次のとおりです。

  • MongoDB からのすべてのデータを外部形式にダンプします。
  • 元のシャード コレクションを削除します。
  • より理想的なシャード キーを使用してシャーディングを構成します。
  • シャード キーの範囲を事前に分割して、最初の均等な分散を確保します。
  • ダンプされたデータを MongoDB に復元します。
于 2013-03-14T14:33:25.933 に答える
1

あなたの質問に対する私の理解は、あなたが尋ねたことです:

ユーザーがパスワードを変更するとどうなりますか?

いいえ:

シャード キーを変更するとどうなりますか?

完全に異なる質問。2番目のケースでは、受け入れられた答えが正しいです。

元の質問の場合:

共有クラスターでは、mongodb にはバランサーと呼ばれるコンポーネントがあります。バランサーはシャードのバランスを取り、チャンクを移行して、可能であればサイズのバランスをとります。

読んでください:シャード クラスター バランサー.

したがって、はい、ユーザーがパスワードを変更すると、バランサーが必要と判断した場合にのみ、対応するドキュメントが自動的に別のチャンクに移行されます。バランサーはこれを処理します。

于 2018-08-03T21:35:44.637 に答える