首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB和动态分片键

MongoDB和动态分片键
EN

Stack Overflow用户
提问于 2013-03-14 22:08:55
回答 3查看 893关注 0票数 1

我一直在考虑使用MongoDB进行分片,并遇到了一个我还不能理解的用例……所以就是这样:

如果我有像这样的文件...

代码语言:javascript
复制
_id [Integer]
username [String]
password [String] <-- SHA1 hash
firstname [String]
lastname [String]

...and我现在选择密码字段作为我的分片键,它非常适合分片,因为它具有非常高的基数,并且可以很好地扩展。但问题仍然存在,如果用户更改了他的密码会发生什么?对应的文档会自动迁移到不同的块中吗?

有人知道MongoDB是如何处理这样的案例的吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-14 22:33:26

不是,分片键是不变的。

考虑一下mongo文档,Can I change the shard key after sharding a collection?

分片后是否可以更换分片密钥?

不是的。

在MongoDB中没有自动支持在分片集合之后更改分片键。这一现实强调了选择一个好的shard key的重要性。如果在分片集合后必须更改分片键,最好的选择是:

collection.

  • configure

  • 将所有数据从MongoDB转储为外部格式。

  • 使用更理想的分片键值范围丢弃原始的分片MongoDB分片,以确保最初均匀地将转储的数据转换为

票数 3
EN

Stack Overflow用户

发布于 2018-08-04 05:35:45

我对你的问题的理解是你问了:

如果用户更改了他的密码,会发生什么?

不是:

更改分片密钥会发生什么情况?

完全不同的问题。对于第二种情况,接受的答案是正确的。

关于你原来的问题:

在共享集群中,mongodb有一个称为balancer的组件。平衡器将平衡您的碎片并迁移您的块,以便在可能的情况下平衡它们的大小。

请阅读:Sharded Cluster Balancer

所以,是的,如果用户更改了他们的密码,相应的文档将自动迁移到不同的块中,只有在balancer认为需要的情况下。平衡器会处理这个问题。

票数 1
EN

Stack Overflow用户

发布于 2020-01-09 17:28:54

作为从4.2开始的新版本发布的重要说明,以下声明不适用。

“一旦插入,文档的分片键值将无法修改”。

那么,这个问题的答案是:可以更改分片密钥吗?

尽管您不能为分片集合选择不同的分片键,但从MongoDB 4.2开始,您可以更新文档的分片键值,除非分片键字段是不可变的_id字段

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15411592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档