Du kan. Det er muligt at forudopdele bidder manuelt, det er beskrevet her:http://www. mongodb.org/display/DOCS/Splitting+Chunks
Tænk grundigt over, hvordan du deler dine bidder. Hvis du gør det dårligt, kan du få masser af ydeevneproblemer, men hvis du ved nok om dine nøgler, kan du vinde meget.
Hvis du gør det, vil du sandsynligvis slukke balanceren:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
(dette er beskrevet her:http://www.mongodb.org/display/DOCS /Sharding+Administration )
Dette er et eksempel på, hvordan du kan gøre det. Afhængigt af præcis hvad du vil gøre, bliver du nødt til at ændre det (jeg antager, at din shard-nøgle ikke hedder x
, for eksempel, og dit interval er ikke -1000 til 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
kommandoer skaber bidderne. Hver kommando opdeler den del, der indeholder den midterste værdi, i to, så den første deler den del, der indeholder min_value -> max_value
ind i min_value -> 0
og 0 -> max_value
. Derefter opdeler den anden kommando den chunk, der indeholder 1000, den anden chunk skabt af den forrige kommando, i to nye bidder. Efter den kommando har du tre bidder:
min_value -> 0
0 -> 1000
1000 -> max_value
De tre følgende kommandoer flytter disse bidder til separate skår. Dokumenterne siger, at kommandoen vil flytte den del, der indeholder værdien i find
, så jeg valgte tre værdier, jeg ved er i forskellige bidder, og brugte disse (der er et symbol i BSON for min_key
og max_key
, men jeg er ikke sikker på, hvordan man bruger det korrekt i denne sammenhæng).
Læs også denne side http://www.mongodb.org/display/DOCS/Moving +Klumper