日期:2014-05-16  浏览次数:20465 次

三、mongodb的分片

上篇已经写到了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"});

?

?

?

?