我一直在考虑使用MongoDB进行分片,并遇到了一个我还不能理解的用例……所以就是这样:
如果我有像这样的文件...
_id [Integer]
username [String]
password [String] <-- SHA1 hash
firstname [String]
lastname [String]...and我现在选择密码字段作为我的分片键,它非常适合分片,因为它具有非常高的基数,并且可以很好地扩展。但问题仍然存在,如果用户更改了他的密码会发生什么?对应的文档会自动迁移到不同的块中吗?
有人知道MongoDB是如何处理这样的案例的吗?
谢谢
发布于 2013-03-14 22:33:26
不是,分片键是不变的。
考虑一下mongo文档,Can I change the shard key after sharding a collection?
分片后是否可以更换分片密钥?
不是的。
在MongoDB中没有自动支持在分片集合之后更改分片键。这一现实强调了选择一个好的shard key的重要性。如果在分片集合后必须更改分片键,最好的选择是:
collection.
。
发布于 2018-08-04 05:35:45
我对你的问题的理解是你问了:
如果用户更改了他的密码,会发生什么?
不是:
更改分片密钥会发生什么情况?
完全不同的问题。对于第二种情况,接受的答案是正确的。
关于你原来的问题:
在共享集群中,mongodb有一个称为balancer的组件。平衡器将平衡您的碎片并迁移您的块,以便在可能的情况下平衡它们的大小。
所以,是的,如果用户更改了他们的密码,相应的文档将自动迁移到不同的块中,只有在balancer认为需要的情况下。平衡器会处理这个问题。
发布于 2020-01-09 17:28:54
作为从4.2开始的新版本发布的重要说明,以下声明不适用。
“一旦插入,文档的分片键值将无法修改”。
那么,这个问题的答案是:可以更改分片密钥吗?
尽管您不能为分片集合选择不同的分片键,但从MongoDB 4.2开始,您可以更新文档的分片键值,除非分片键字段是不可变的_id字段
https://stackoverflow.com/questions/15411592
复制相似问题