日期:2014-05-16 浏览次数:20458 次
上篇已经写到了mongodb可以进行db分片和collection分片,这篇介绍下自动分片,片键选择以及管理
?
1、分片和自动分片
分片(shard):分片是指按照某种编组将数据拆分,分散到不同的结点上进行负载分流。每一个分片由多个chunk数据组成, 每一个chunk由片键分布在某一区间的collecton 数据组成。
自动分片: 根据指定的片键自动拆分数据并自动路由请求。chunk的大小默认为64M,当一个chunk达到64M时,会自动拆 分成2个chunk,当Balance开启的时候,Chunk数据可以在多个shard中自动迁移,实现shard上数据均衡。当 Balance关闭时,就需要进行手动迁移,同样可以对chunk进行提前手动切分(spilt)。
?
迁移分区chunk数据:
在config.chunks找出需要迁移的chunk的minkey和maxkey
find 的shardkey值设置为[minkey,maxkey)之间的任意值
to ?迁移到目标shard的shardID
连接mongos/admin
db.runCommand({moveChunk :”dbname.collection”,key:{shardkey:value},to:”newshard”})
手动切分chunk:
在config.chunks找出需要切分chunk的minkey和maxkey
find 的shardkey 值设置为[minkey,maxkey)之间的任意值
连接mongos/admin
将chunk数据分成相同大小的两个数据集:db.runCommand({split: “dbname.colleciton”,find:{shardkey:value}});
提前分片,根据一个shardkey(可以是不存在的)分成两部分:db.runCommand({split: “dbname.colleciton”,middle:{shardkey:value}});
?
2、片键及片键选择
片键:数据分组时候使用的字段,也就是分片的依据
片键选择:能够大幅度切分数据而不影响业务逻辑的collection字段。
?
数据库分片:
连接至mongos/admin
运行db.runCommand( { enablesharding : “<dbname>” } );
?
collection分片
db.runCommand( { shardcollection : “<namespace>”,key : <shardkeypatternobject> });
?
添加分片:
db.runCommand( { addshard : <replicaSetName>/<serverhostname>[:port]} );
?
移除分片:
db.runCommand({removeshard : "shardid"});
?
?
?
?