2010-10-18 6 views
3

Je construis donc une application utilisant PHP et MongoDB qui aura un peu de trafic tant en lecture qu'en écriture. Après quelques mois, il devrait y avoir environ 2500 lit une seconde et 200 écritures par seconde (je ne sais pas comment cela se traduit vraiment en termes de trafic par rapport aux autres, cependant).Meilleure pratique pour mettre à jour une collection MongoDB avec des champs modifiés inconnus

Je suis un peu curieux de savoir quoi faire lors de la mise à jour d'une collection; les exemples de documentation montrent qu'un shell met à jour un champ de collection spécifique mais n'explique pas ce qui se passe lorsqu'un nombre quelconque de champs de la collection a pu être modifié.

Par exemple, dire que j'ai une collection d'utilisateur (exemple très simplifié):

 
user = { 
    _id  : MongoId(...), 
    name : 'User One', 
    email : '[email protected]', 
    company : 'Company', 
    ... 
} 

Nous montrons tous les champs modifiables sous une forme, mais l'utilisateur ne modifie que leur adresse e-mail.

Strictement parlant en termes de performance, serait-il préférable de stocker les valeurs originales dans des entrées cachées pour les comparer en PHP et ensuite construire une requête spécifique à la mise à jour? Ou devrais-je remplacer tous les champs éditables de toute façon?

Ce sera une collection contenant des objets et des tableaux les uns dans les autres - pas le simple montré ici.

Je sais que l'optimisation vient après, mais je cherche aussi à prendre de bonnes habitudes avec MongoDB aussi.

Merci.

Répondre

3

Vous récupérerez probablement l'objet entier de manière à afficher le formulaire modifiable - je suppose que vous allez afficher le nom actuel, le courrier électronique, etc. et leur permettre d'éditer et de soumettre les nouvelles versions . Cela signifie que vous pouvez vérifier pour voir ce qui a changé et mettre à jour cela spécifiquement, plutôt que de télécharger et de remplacer l'objet entier à chaque fois.

Je suggère d'utiliser les opérations de mise à jour optimisées: "MongoDB Updating". De cette façon, vous pouvez effectuer des opérations sur place optimisées plutôt que de remplacer l'intégralité de l'objet chaque fois que vous souhaitez modifier un champ spécifique. Vous aurez probablement à la recherche principalement à $set, $addToSet, et (si vous avez affaire à un grand nombre d'objets imbriqués, l'opérateur de position $

De la documentation:.

Opérations

Modificateur

Les opérations de modification sont très efficaces et utiles lors de la mise à jour de valeurs existantes, par exemple, elles sont idéales pour incrémenter un nombre. [Et d'autres choses plus compliquées]Une mise à jour de modificateur a l'avantage d'éviter la latence impliquée dans l'interrogation et le renvoi de l'objet. La mise à jour du modificateur comporte également l'atomicité de l'opération et très peu de transfert de données réseau.

Si vous avez des questions plus spécifiques sur la mise en œuvre d'une opération particulière, il suffit de demander loin.

Questions connexes