Mongodb--切片

1.在3台服务器上分别运行 2717 , 27018,27109,互为副本集,形成3套replSet
2.在3台服务器上各配置config.server,运行在27020端口上,和配置mongod的命令一样,只不过是加上了 --configsrv的参数
3.配置mongos

./bin/mongos --port 30000
--dbconfig 192.168.1.201:27020,192.168.1.202:27020,192.168.1.203.27020(开启奇数台configsrv服务器)

4.连接路由器

./bin/mongo --port 30000

5.添加replSet切片

>sh.addShard('192.168.1.201:27017');
>sh.addShard('192.168.1.202.27017');
>sh.addShard('192.168.1.203:27017');

6.添加待分片的库

>sh.enableSharding(databaseName);

7.添加待分片的表

>sh.shardCollection('dbName',{field:1});
//field是collection的一个字段,系统将会利用field的值来计算应该分到哪一个片上,这个field就叫做“片键”

8.chunk

//chunk就是小块的意思
//db.settings.find();
//可以查看chunk的默认大小
//修改chunk的大小
db.settings.save({_id:'chunksize'},{$set:{value:4}});

linux中查找含有mongo的进程

ps aux | grep mongo

问:为什么10w条数据才2个chunk?

说明chunk比较大,默认的chunk大小是64MB

问:既然优先往某个片上插入,当chunk失衡时,再移动chunk,自然随着数据的增多,shard的实例之间有chunk的来回移动的现象,这将带来什么问题?

答:服务器之间的IO性能问题。

问:能否定义一个规则,某N条数据形成1个块,预先分配给m个chunk,m个chunk预先分配在不同片上,以后的数据直接入各自预分配好的chunk,不再来回移动。

答:能,手动预先分片。

以shop.user表为例,说明一下手动分片的用法

for(var i = 0; i<=40;i++){
      sh.splitAt('shop.user',{userid:i*1000}); //预先分割的chunk是空的
}

这个类似打点计数,每隔1000个记录就形成一个chunk,那么就会在goods的数据库中形成40个,1000条记录大小的块分别存放于两个切片当中。这些块都是预先分配好的,切片的位置也预先分配好了,所以以后就不用管数据了,会直接存到这里面来。

预先分片,提前很长时间预计好这些分片的大小,很长时间内都不再多增加分片了,随着数据的增加而增加分片这种情况不适合于手动分片

集群的时候会用到的命令

sh.addShard('relpSetName/IP:port');

复制集对外来看是逻辑上的整体,外面能访问primariy的IP和名称,还有replSet的名称。

Mongodb分片不是单篇文档级别的,而是绝对平均的散落在各个片上,N篇文章形成一个块chunk,优先放在某个片上,当这个片上的chunk比另一个片上的chunk大时,mongodb会以chunk为单位进行片的移动操作,以维护片之间的数据平衡。

页面的全选按钮和分页按钮还没有做,还有日期选择、输入验证、用户登录验证没有做,前4个比较好做,最后一个需要用到filter,也可以现在做

转载于:https://www.cnblogs.com/weloveshare/p/5752035.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值