Puoi. È possibile pre-dividere i blocchi manualmente, è descritto qui:http://www. mongodb.org/display/DOCS/Splitting+Chunks
Pensa attentamente a come dividi i tuoi pezzi. Se lo fai male puoi avere molti problemi di prestazioni, ma se conosci abbastanza le tue chiavi puoi guadagnare molto.
Se lo fai probabilmente vorrai disattivare il bilanciatore:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
(questo è descritto qui:http://www.mongodb.org/display/DOCS /Sharding+Amministrazione )
Questo è un esempio di come potresti farlo. A seconda di esattamente cosa vuoi fare, dovrai modificarlo (presumo che la tua chiave shard non sia denominata x
, ad esempio, e il tuo intervallo non è compreso tra -1000 e 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"})
La split
i comandi creano i blocchi. Ogni comando divide in due il blocco contenente il valore medio, quindi il primo divide il blocco contenente min_value -> max_value
in min_value -> 0
e 0 -> max_value
. Quindi il secondo comando divide il blocco contenente 1000, il secondo blocco creato dal comando precedente, in due nuovi blocchi. Dopo quel comando hai tre blocchi:
min_value -> 0
0 -> 1000
1000 -> max_value
I tre comandi seguenti spostano questi blocchi in frammenti separati. I documenti dicono che il comando sposterà il pezzo contenente il valore in find
, quindi ho scelto tre valori che so essere in blocchi diversi e li ho usati (c'è un simbolo in BSON per min_key
e max_key
, ma non sono sicuro di come utilizzarlo correttamente in questo contesto).
Leggi anche questa pagina http://www.mongodb.org/display/DOCS/Moving +Pezzi