MongoDB手动预分片(九)
一、书接上文
在上篇文章总介绍了搭建mongodb分片,但是由于chunk是在主分片上先存数据,然后将主分片上的chunk数量和其他分片上chunk数量的多少作比较,如果主分片上的chunk数量大于其他分片上的chunk数量,则将主分片上的chunk向其他分片移动。这样就会造成不同分片服务器之间的IO繁忙。在本篇中采用手动分片来解决这个问题。
上篇文章地址:https://blog.csdn.net/m0_38039437/article/details/80234567
二、说动手就动手
1、分片前先申明分片的数据库和表格。例如:对shop数据库的user表进行分片,分片依据user_id字段拆分。
sh.shardCollection('shop.user',{user_id:1})
2、手动分片
①、分片语法:sh.splitAt(数据库.表格,{分割策略})
for(var i=1;i<=10;i++){sh.splitAt('shop.user',{user_id:i*1000})}
预先在shop数据库的user表上根据user_id字段数量分割,每隔1K条数据分一个chunk一共分10次,这样的界限切好chunk(虽然chunk是空的), 这些chunk将会均匀移动到各片上.
②、查看手动分片后chunk分配的状态。执行:sh.status()
③、插入数据,观察每个分片上存储的数据
for(var i=1;i<=50000;i++){db.user.insert({user_id:i,name:'hell user'+i})}
分别在每个几点的分片服务器上登录查看数据量,发现已经按照预先定义好的规则进行存放数据。
27017节点分片的数据
27018节点分片上的数据