MongoDB--数据分发的三种方式

MongoDB–数据分发的三种方式


数据的分发是依据指定的片键进行的

1. 升序片键

升序片键是一种稳定增长的片键,例如date和ObjectId。如果依据升序片键分片,每一个插入的新文档都会插入到最大块中(就是包含maxKey的块)。

所有的写请求都会被路由到一个分片中,从该分片中不断的进行chunk的分裂和迁移,而不是只需要纠正比较小的均衡

2. 随机分发的片键

随机分发的键可以是用户名,邮件地址,UUID,MD5散列值,或者是数据集中其他没有规律的一些键。由于写入数据是随机分发的,个分片增长的速度应该是大致相同的,这就减少了需要进行迁移的次数

弊端是:MongoDB在随机访问超出RAM大小的数据的时候效率不高。如果有足够的RAM或者是不介意系统性能的话,可以使用随机片键在集群上分配负载

3. 基于位置的分片

数据会依据指定的位置(IP,经纬度,地址)分发,索引与该减值比较接近的文档都会被保存在同一个范围的块中。可以为分片添加tag,然后为块指定相应的tag。

//为指定分片打上一个标签,参数一:分片名;参数二:标签名
sh.addShardTag("shard1","AAA")

//在指定集合上,为标签指定范围,参数一:集合名;参数二:范围首,参数三:范围尾;参数四:标签名
sh.addTagRange("testdb.table1",{"_id":100},{"_id":200},"AAA")

balancer(均衡器)在移动块的时候,会试图将这些范围内的块移动到这些分片上,该过程不会立即生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值