2017-10-17 14 views
0

La mise à jour d'un champ indexé a-t-elle un impact sur wiredTiger? Je passais par la question ci-dessous. Q. L'ajout de l'index {a: 1} peut potentiellement diminuer la vitesse de laquelle des opérations suivantes? Cochez toutes les cases.MongoDB: mise à jour indexée avec stockage WiredTiger

A. db.collection.update ({b: 456}, {$ inc: {a: 1}});

Je crois que la réponse ci-dessus est correcte pour MMAPV1, mais dans wiredTiger, il ne devrait y avoir aucun impact, puisque wiredTiger utilise un identifiant de document immuable plutôt que de stocker l'adresse de localisation. Quelqu'un peut-il confirmer ma compréhension.

Répondre

0

Je dirais que la réponse est «oui».

Le documentation énonce clairement:

Ajout d'un indice a un impact négatif sur les performances pour les opérations d'écriture.

Depuis WiredTiger ne supporte pas les mises à jour en place, l'exécution de cette commande aura pour effet de dupliquer les documents existants trouvés par la condition de filtre ({ b : 456 }) à l'exception du changement donné ({ $inc : { a : 1 } }) qui sera reflétée dans les nouveaux documents, aussi. Dans un deuxième temps, l'espace de stockage alloué aux documents originaux sera libéré.

Avec MMAPv1, l'espace requis pour les documents mis à jour ne différerait pas de ceux d'origine, de sorte qu'une mise à jour sur place se produit. Cependant, quel que soit le moteur de stockage utilisé, la modification d'un champ indexé nécessite également la mise à jour des index affectés. Pour MMAPv1, "seulement" la clé de la feuille d'index change dans votre cas - le document reste au même endroit. Dans le cas de WiredTiger, la clé et l'emplacement du document devront être mis à jour dans l'index.