关于mongodb分片的问题
公司原本使用Mongodb单节点存储一些文档内容,现在要部署成分片副本的形式。自己在网上看了相关的一些文章,这里遇到这样的问题。比如创建了一个数据库,然后执行sh.enableSharing(数据库名) 然后sh.shardCollection一个集合名,之后使用mongorestore向这个数据库中恢复一个集合(就是原先的某天的业务数据)
片键设置的是 _id 以hashed的形式
然后sh.status()
看到
里面有autoSplit 为yes,下面还显示3个分片都有chunks,这应该是该数据库已经处于分片的模式,然后按照下面use verbose if you want to force print来打印详细的信息
为何又显示
说数据库并没有设置分片呢?
另外原先是每天以时间戳的形式向MONGODB中创建一个新的集合,然后插入相应的数据。而我看分片配置,都是先设置数据库,然后设置集合。能否设置该数据库之后所有集合都进行分片处理。
另外,我阅读了一些文章,说道设置片键可以影响文档在分片中的存储情况,比如按顺序存储,或者使用哈希进行随机存储。那如果固定百分比存储片键,应该如何设置片键呢?比如说分片一存储三分之二数据,而分片二存储三分之一数据。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
printShardingStatus
的用法请参考文档:db.printShardingStatus()。你看到的介绍这个方法的文章可能讲错了(或者是很老的版本?),最近几个版本都没有截图这样的用法。不能。集合内容都不知道,片键也不确定,怎么可能自动就设置分片了呢?但是分片的命令
sh.shardCollection
是可以反复执行的,所以不确定的时候可以多执行一遍不会造成危害。这个话题可能展开讲有点大,官方文档对于分片的选择原则讲解很详细,参考一下文档:Shard Keys
按照这些原则来选择分片,能够让你的数据尽可能均匀地分散在不同的片上。你要的功能叫做Tag Aware Sharding,即是按shard key的范围把数据通过Tag分配到不同的片上,这个功能在文档中也有很详细的介绍,参考上面的链接。