Você pode. É possível pré-dividir os pedaços manualmente, está descrito aqui:http://www. mongodb.org/display/DOCS/Splitting+Chunks
Pense cuidadosamente sobre como você divide seus pedaços. Se você fizer isso mal, poderá ter muitos problemas de desempenho, mas se souber o suficiente sobre suas chaves, poderá ganhar muito.
Se você fizer isso, provavelmente desejará desligar o balanceador:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
(isso está descrito aqui:http://www.mongodb.org/display/DOCS /Sharding+Administração )
Este é um exemplo de como você pode fazer isso. Dependendo exatamente do que você deseja fazer, você terá que modificá-lo (suponho que sua chave de fragmentação não tenha o nome
x
, por exemplo, e seu intervalo não for -1000 a 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"})
A
split
comandos criam os pedaços. Cada comando divide o pedaço contendo o valor do meio em dois, então o primeiro divide o pedaço contendo min_value -> max_value
em min_value -> 0
e 0 -> max_value
. Em seguida, o segundo comando divide o fragmento contendo 1000, o segundo fragmento criado pelo comando anterior, em dois novos fragmentos. Após esse comando, você tem três partes:min_value -> 0
0 -> 1000
1000 -> max_value
Os três comandos a seguir movem esses fragmentos para fragmentos separados. Os documentos dizem que o comando moverá o pedaço que contém o valor em
find
, então escolhi três valores que sei que estão em partes diferentes e os usei (há um símbolo em BSON para min_key
e max_key
, mas não tenho certeza de como usá-lo corretamente neste contexto). Leia esta página também http://www.mongodb.org/display/DOCS/Moving +Pedaços