MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment définir la plage de partitionnement pour chaque partition dans Mongo ?

Tu peux. Il est possible de pré-diviser manuellement les morceaux, c'est décrit ici :http://www. mongodb.org/display/DOCS/Splitting+Chunks

Réfléchissez bien à la façon dont vous divisez vos morceaux. Si vous le faites mal, vous pouvez rencontrer de nombreux problèmes de performances, mais si vous en savez assez sur vos clés, vous pouvez gagner beaucoup.

Si vous le faites, vous voudrez probablement désactiver l'équilibreur :

> use config
> db.settings.update({_id: "balancer"}, {$set: {stopped: true}}, true);

(ceci est décrit ici :http://www.mongodb.org/display/DOCS /Sharding+Administration )

Ceci est un exemple de la façon dont vous pourriez le faire. Selon exactement ce que vous voulez faire, vous devrez le modifier (je suppose que votre clé de partition n'est pas nommée x , par exemple, et votre plage n'est pas comprise entre -1 000 et 2 000).

> 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"})

Le split les commandes créent les morceaux. Chaque commande divise le morceau contenant la valeur médiane en deux, donc la première divise le morceau contenant min_value -> max_value en min_value -> 0 et 0 -> max_value . Ensuite, la deuxième commande divise le morceau contenant 1000, le deuxième morceau créé par la commande précédente, en deux nouveaux morceaux. Après cette commande, vous avez trois morceaux :

  • min_value -> 0
  • 0 -> 1000
  • 1000 -> max_value

Les trois commandes suivantes déplacent ces morceaux vers des fragments séparés. La documentation indique que la commande déplacera le morceau contenant la valeur dans find , donc j'ai choisi trois valeurs dont je sais qu'elles sont dans des morceaux différents et je les ai utilisées (il y a un symbole dans BSON pour min_key et max_key , mais je ne sais pas comment l'utiliser correctement dans ce contexte).

Lisez également cette page http://www.mongodb.org/display/DOCS/Moving +Blocs