Du kan. Det är möjligt att fördela upp bitar manuellt, det beskrivs här:http://www. mongodb.org/display/DOCS/Splitting+Chunks
Tänk noga på hur du delar upp dina bitar. Om du gör det dåligt kan du få många prestandaproblem, men om du vet tillräckligt om dina nycklar kan du vinna mycket.
Om du gör det vill du antagligen stänga av balanseringen:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
(detta beskrivs här:http://www.mongodb.org/display/DOCS /Sharding+Administration )
Det här är ett exempel på hur du kan göra det. Beroende på exakt vad du vill göra måste du ändra det (jag antar att din skärvnyckel inte heter x
, till exempel, och ditt intervall är inte -1000 till 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
kommandon skapar bitarna. Varje kommando delar upp biten som innehåller mittvärdet i två, så det första delar upp delen som innehåller min_value -> max_value
till min_value -> 0
och 0 -> max_value
. Sedan delar det andra kommandot upp biten som innehåller 1000, den andra biten skapad av det föregående kommandot, i två nya bitar. Efter det kommandot har du tre bitar:
min_value -> 0
0 -> 1000
1000 -> max_value
De tre följande kommandona flyttar dessa bitar till separata skärvor. Dokumenten säger att kommandot kommer att flytta den bit som innehåller värdet i find
, så jag valde tre värden som jag vet finns i olika bitar och använde dessa (det finns en symbol i BSON för min_key
och max_key
, men jag är inte säker på hur man använder den på rätt sätt i det här sammanhanget).
Läs den här sidan också http://www.mongodb.org/display/DOCS/Moving +Klumpar