关于mongodb分片的问题

发布于 2022-09-05 08:55:12 字数 820 浏览 18 评论 0

公司原本使用Mongodb单节点存储一些文档内容,现在要部署成分片副本的形式。自己在网上看了相关的一些文章,这里遇到这样的问题。比如创建了一个数据库,然后执行sh.enableSharing(数据库名) 然后sh.shardCollection一个集合名,之后使用mongorestore向这个数据库中恢复一个集合(就是原先的某天的业务数据)
片键设置的是 _id 以hashed的形式
然后sh.status()
看到图片描述

里面有autoSplit 为yes,下面还显示3个分片都有chunks,这应该是该数据库已经处于分片的模式,然后按照下面use verbose if you want to force print来打印详细的信息
为何又显示
图片描述

说数据库并没有设置分片呢?
另外原先是每天以时间戳的形式向MONGODB中创建一个新的集合,然后插入相应的数据。而我看分片配置,都是先设置数据库,然后设置集合。能否设置该数据库之后所有集合都进行分片处理。

另外,我阅读了一些文章,说道设置片键可以影响文档在分片中的存储情况,比如按顺序存储,或者使用哈希进行随机存储。那如果固定百分比存储片键,应该如何设置片键呢?比如说分片一存储三分之二数据,而分片二存储三分之一数据。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝色星空 2022-09-12 08:55:12

然后按照下面use verbose if you want to force print来打印详细的信息

printShardingStatus的用法请参考文档:db.printShardingStatus()。你看到的介绍这个方法的文章可能讲错了(或者是很老的版本?),最近几个版本都没有截图这样的用法。

能否设置该数据库之后所有集合都进行分片处理。

不能。集合内容都不知道,片键也不确定,怎么可能自动就设置分片了呢?但是分片的命令sh.shardCollection是可以反复执行的,所以不确定的时候可以多执行一遍不会造成危害。

另外,我阅读了一些文章,说道设置片键可以影响文档在分片中的存储情况

这个话题可能展开讲有点大,官方文档对于分片的选择原则讲解很详细,参考一下文档:Shard Keys
按照这些原则来选择分片,能够让你的数据尽可能均匀地分散在不同的片上。你要的功能叫做Tag Aware Sharding,即是按shard key的范围把数据通过Tag分配到不同的片上,这个功能在文档中也有很详细的介绍,参考上面的链接。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文