evermean
evermean

Reputation: 1307

MongoDB and dynamic shard keys

I have been thinking about sharding with MongoDB and came across a use case which I haven't been able to figure out ... so here it is:

If I have documents that look like this one...

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

...and I now choose the password field as my shard key, it would be a good fit for sharding since it has a very high cardinality and would scale nicely. But the question remains, what happens if a user changes his password? Will the corresponding document be automatically migrated to a different chunk?

Does someone know how MongoDB handles cases like this one?

Thanks

Upvotes: 1

Views: 1104

Answers (3)

Amol M Kulkarni
Amol M Kulkarni

Reputation: 21629

As an important note with the release of new version starting 4.2, the following statement does not apply.

"Once inserted, a document's shard key value cannot be modified" .

So the answer to the question, Can shard key be changed?

Although you cannot select a different shard key for a sharded collection, starting in MongoDB 4.2, you can update a document's shard key value unless the shard key field is the immutable _id field

Upvotes: 1

Carlo Espino
Carlo Espino

Reputation: 1384

My understanding of your question is that you asked:

what happens if a user changes his password?

Not:

what happens if I change the shard key?

Completely different questions. For the second case the accepted answer is correct.

For your original question:

In shared clusters mongodb has a component called balancer. The balancer will balance your shards and migrate your chunks so they are balanced in size if possible.

Please read: Sharded Cluster Balancer.

So, yes, if user changes their password the corresponding document will be automatically migrated to a different chunk, only if balancer thinks is needed. The balancer takes care of this.

Upvotes: 1

Srivatsa N
Srivatsa N

Reputation: 2321

No, shard keys are immutable.

Consider the mongo documentation, Can I change the shard key after sharding a collection?:

Can I change the shard key after sharding a collection?

No.

There is no automatic support in MongoDB for changing a shard key after sharding a collection. This reality underscores the importance of choosing a good shard key. If you must change a shard key after sharding a collection, the best option is to:

  • dump all data from MongoDB into an external format.
  • drop the original sharded collection.
  • configure sharding using a more ideal shard key.
  • pre-split the shard key range to ensure initial even distribution.
  • restore the dumped data into MongoDB.

Upvotes: 3

Related Questions