比方说,文件是
{
x:Number
}
Run Code Online (Sandbox Code Playgroud)
我有3个碎片.
而不是自动分区,我可以定义shard1只包含数据x <0,shard2只包含数据0 = <x = <1000,而shard 3是1000
The*_*heo 10
您可以.可以手动预分割块,如下所述:http://www.mongodb.org/display/DOCS/Splitting+Chunks
仔细考虑如何分割你的块.如果你做得很糟糕,你会遇到很多性能问题,但如果你对你的密钥有足够的了解,你可以获得很多.
如果你这样做,你可能想要关闭平衡器:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
Run Code Online (Sandbox Code Playgroud)
(这里描述:http://www.mongodb.org/display/DOCS/Sharding+Administration)
这是您如何做到这一点的一个例子.根据您想要做什么,您将不得不修改它(x
例如,我假设您的分片键未命名,并且您的范围不是-1000到2000).
> use admin
> db.runCommand({split: "my_db.my_coll", middle: {x: 0}})
> db.runCommand({split: "my_db.my_coll", middle: {x: 1000}})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: -1}, to: "shard_1_name"})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: 0}, to: "shard_2_name"})
> db.runCommand({movechunk: "my_db.my_coll", find: {x: 1000}, to: "shard_3_name"})
Run Code Online (Sandbox Code Playgroud)
这些split
命令会创建块.每个命令将包含中间值的块拆分为两个,因此第一个命令将包含的块拆分min_value -> max_value
为min_value -> 0
和0 -> max_value
.然后,第二个命令将包含1000的块(由前一个命令创建的第二个块)拆分为两个新块.在该命令之后,您有三个块:
min_value -> 0
0 -> 1000
1000 -> max_value
以下三个命令将这些块移动到单独的分片.该文件说,该命令将移动包含在价值块find
,所以我选择了三个值,我知道在不同的块,并用这些(存在BSON一个符号min_key
和max_key
,但我不知道如何正确使用它在这种情况下).
也请阅读此页http://www.mongodb.org/display/DOCS/Moving+Chunks
归档时间: |
|
查看次数: |
3665 次 |
最近记录: |