Search code examples
mongodbdynamickeysharding

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


Solution

  • 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.