Możesz. Możliwe jest wstępne dzielenie porcji ręcznie, jest to opisane tutaj:http://www. mongodb.org/display/DOCS/Podział+kawałki
Zastanów się dokładnie, jak dzielisz swoje kawałki. Jeśli zrobisz to źle, możesz mieć wiele problemów z wydajnością, ale jeśli wiesz wystarczająco dużo o swoich kluczach, możesz wiele zyskać.
Jeśli to zrobisz, prawdopodobnie chcesz wyłączyć balanser:
> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);
(jest to opisane tutaj:http://www.mongodb.org/display/DOCS /Sharding+Administracja )
To jest przykład tego, jak możesz to zrobić. W zależności od tego, co dokładnie chcesz zrobić, będziesz musiał to zmodyfikować (zakładam, że Twój klucz sharda nie ma nazwy x
, na przykład, a zakres nie wynosi od -1000 do 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
polecenia tworzą porcje. Każde polecenie dzieli porcję zawierającą środkową wartość na dwie, więc pierwsza dzieli porcję zawierającą min_value -> max_value
na min_value -> 0
i 0 -> max_value
. Następnie drugie polecenie dzieli porcję zawierającą 1000, drugą porcję utworzoną przez poprzednie polecenie, na dwie nowe porcje. Po tym poleceniu masz trzy porcje:
min_value -> 0
0 -> 1000
1000 -> max_value
Trzy poniższe polecenia przenoszą te porcje do oddzielnych fragmentów. Dokumentacja mówi, że polecenie przeniesie porcję zawierającą wartość w find
, więc wybrałem trzy wartości, o których wiem, że są w różnych porcjach i użyłem ich (w BSON jest symbol dla min_key
i max_key
, ale nie jestem pewien, jak go właściwie używać w tym kontekście).
Przeczytaj też tę stronę http://www.mongodb.org/display/DOCS/Moving +Części