mongodb分片

在使用http://blog.csdn.net/aoerqileng/article/details/53173173搭建完成分片的环境后,可以进行对集合进行分片了。
MongoDB使用分片键值的范围对集合中的数据进行分区。 每个范围定义了不重叠的分片键值范围,并与一个块相关联。
mongodb试图将chunk均衡的分布到集群的分片中,分片键的选择对于效率有很大的影响。
一旦对集合进行了分片,那么分片键和分片键的值是不可改变的。

所有的分片集合必须有一个索引支持分片键。可以在分片键上创建索引,或分片键是组合索引的前缀。
如果集合是空的,那么sh.shardCollection() 这个命令会在分片键上创建索引。如果集合是非空的,在使用sh.shardCollection() 这个命令分片集合之前要先创建索引。
对于分片集合,只有_id列和分片上的索引或是分片键是组合前缀的组合索引能是唯一的。
对于在别的列上存在唯一索引的集合是不能分片的。
对于一个分片的集合,不能再别的列上创建唯一索引。
选择分片键要考虑,基数,频率,分片键的改变频率
分片键的基数决定了balancer能创建chunks的数量。一个分片键的值只能在一个chunk上,如果一个分片键的基数是4,那么只能有不超过4个chunk,这个就限制了集群中有效分片的数量。比如下面的例子,基数是2,那么只能分布在第一,第三个分片上,第二个分片就没有作用了。
这里写图片描述

这个例子中集群不会水平扩展了,有高基数的分片键不能保证是均衡的分布在集群中。
如果你的分片键的基数比较低,那么考虑使用有高基数的组合索引。

频率就是分片键的值出现的次数。一个值出现的次数越多,那么数据就都落到一个分片上去了
解决的方式也是使用组合索引,有低频的组合索引。

分片键的改变频率指的是数据出现极端的情况,所有的新增数据超过定义的最大值,或定义的最小值。导致数据分布在了2个极端的chunk上。
这里写图片描述

这种情况建议使用hash分片

hash分片就是能将数据均衡的分布。
您选择作为散列分片键的字段应具有良好的基数或大量不同的值。 ObjectId值或时间戳单调变化这种是理想的分片键。 一个很好的例子是默认的_id字段,假设它只包含ObjectID值。

hash分片集合的命令
sh.shardCollection( “database.collection”, { : “hashed” } )
为了控制chunk的数量,在使用sharedCollection的时候,使用numInitialChunks参数。

范围分片是默认的分片方式,如果没有指定是hash分片或是区域分片。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值