Mongodb 分片
mkdir -p /home/m17 /home/m18 /home/m20 /home/mlog
#声明实例
./bin/mongod --dbpath /home/m17/ --logpath /home/mlog/m17.log --fork --port 27017 --smallfiles ./bin/mongod --dbpath /home/m18/ --logpath /home/mlog/m18.log --fork --port 27018 --smallfiles #指定为configsvr ./bin/mongod --dbpath /home/m20/ --logpath /home/mlog/m20.log --fork --port 27020 --configsvr
#为路由指定configsvr ./bin/mongos --logpath /home/mlog/m30.log --port 30000 --configdb 192.168.119.128:27020 --fork
#启动了4个进程
ps aux|grep mongo
#连接路由
./bin/mongo --port 30000
#添加分片
sh.addShard('192.168.119.128:27017')
sh.addShard('192.168.119.128:27018')
sh.status()
#指定库分片
sh.enableSharding('shop')
#指定集合,以某个键分
sh.shardCollection('shop.goods',{goods_id:1})
#查看chunksize默认大小
use config show tables db.settings.find() #默认为64M,修改为1M db.settings.save({_id:'chunksize',value:1})
#分别查看27017和27018 数据存储情况 use shop db.goods.count(); #查看分片情况 sh.status();
既然优先往某个片上插入,当chunk失衡时,再移动chunk,自然,随着数据的增多,shard的实例之间,有chunk来回移动的现象; 服务器之间IO的增加!
#预先分片
for(var i=1;i<=40;i++) { sh.splitAt('shop.user',{userid:i*1000}) }
以shop.user表为例 1: sh.shardCollection(‘shop.user’,{userid:1}); //user表用userid做shard key 2: for(var i=1;i<=40;i++) { sh.splitAt('shop.user',{userid:i*1000}) } // 预先在1K 2K...40K这样的界限切好chunk(虽然chunk是空的),
这些chunk将会均匀移动到各片上. 3: 通过mongos添加user数据. 数据会添加到预先分配好的chunk上, chunk就不会来回移动了.