Můžeš. Je možné předrozdělit kousky ručně, je to popsáno zde:https://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:https://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 -> 00 -> 10001000 -> 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 https://www.mongodb.org/display/DOCS/Moving +Kousky