Можеш. Възможно е предварително разделяне на парчета ръчно, това е описано тук:http://www. mongodb.org/display/DOCS/Splitting+Chunks
Помислете внимателно как разделяте вашите парчета. Ако го направите зле, можете да получите много проблеми с производителността, но ако знаете достатъчно за ключовете си, можете да спечелите много.
Ако го направите, вероятно искате да изключите балансира:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
(това е описано тук: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"})
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 +Чънкове