mongodb3.x - 关于mongodb分片的问题

查看:221
本文介绍了mongodb3.x - 关于mongodb分片的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

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

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

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

解决方案

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

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

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

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

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

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

这篇关于mongodb3.x - 关于mongodb分片的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆