Můžeš. Je možné předrozdělit kousky ručně, je to popsáno zde:http://www. mongodb.org/display/DOCS/Splitting+Chunks
Dobře si rozmyslete, jak rozdělíte své kousky. Pokud to uděláte špatně, můžete mít spoustu problémů s výkonem, ale pokud budete o svých klíčích vědět dost, můžete hodně získat.
Pokud to uděláte, pravděpodobně budete chtít vypnout balancer:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
(toto je popsáno zde:http://www.mongodb.org/display/DOCS /Sharding+Administrace )
Toto je příklad toho, jak to můžete udělat. V závislosti na tom, co přesně chcete udělat, jej budete muset upravit (předpokládám, že váš shard klíč se nejmenuje x
, například a váš rozsah není -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"})
split
příkazy vytvářejí bloky. Každý příkaz rozdělí blok obsahující střední hodnotu na dva, takže první rozdělí blok obsahující min_value -> max_value
do min_value -> 0
a 0 -> max_value
. Potom druhý příkaz rozdělí blok obsahující 1000, druhý blok vytvořený předchozím příkazem, na dva nové bloky. Po tomto příkazu máte tři části:
min_value -> 0
0 -> 1000
1000 -> max_value
Následující tři příkazy přesunou tyto kousky do samostatných úlomků. Dokumenty říkají, že příkaz přesune blok obsahující hodnotu v find
, takže jsem vybral tři hodnoty, o kterých vím, že jsou v různých částech, a použil jsem je (v BSON je symbol pro min_key
a max_key
, ale nejsem si jistý, jak jej v tomto kontextu správně použít).
Přečtěte si také tuto stránku http://www.mongodb.org/display/DOCS/Moving +Kousky