2011-08-09 4 views
14

J'ai commencé à utiliser MongoDB au travail jusqu'ici tout va bien. Je me demandais comment MongoDB gère les mises à jour simultanées? J'ai lu qu'il n'y a pas de fonctionnalité de verrouillage dans MongoDB donc je me demandais quelle est la pratique courante pour faire face à cela.Comment MongoDB gère-t-il les mises à jour simultanées?

Merci.

Répondre

20

MongoDB a utilisé un verrou d'écriture de processus large pour garantir qu'une seule opération d'écriture (mise à jour/insertion/suppression) peut être effectuée à la fois. En tant que tel, il résout automatiquement les problèmes de simultanéité puisque la concurrence en écriture n'est tout simplement pas autorisée.

Si 4 threads tentent une opération de mise à jour, l'un d'entre eux prendra le verrou en écriture, effectuera sa mise à jour et relâchera le verrou. Après que l'un des 3 restants saisira le verrou, fera sa mise à jour, etc.

La simultanéité entrera en jeu seulement si votre opération ne peut pas être enveloppée dans une seule opération d'écriture. Notez que pour l'utilisation la plus courante (trouver un document, le mettre à jour et saisir la nouvelle version atomiquement) MongoDB offre la commande "findAndModify" qui fait exactement cela: http://www.mongodb.org/display/DOCS/findAndModify+Command

MISE À JOUR: Le verrouillage est plus granulaire de nos jours.

+0

Merci, je comprends pourquoi il semblait que la connaissance commune. – lollancf37

+0

De rien. Cela semble être une caractéristique limitative, mais parce que les écritures sont relativement rapides, c'est rarement un problème de performance. Gardez un oeil sur "% verrouillé" dans mongostat pour voir combien de temps est passé avec le verrou tenu. –

3

Utilisation modifier operations:

$inc $set $unset $push $pushAll $addToSet $pop $pull $pullAll $rename $bit

tous sont atomiques.

+0

Merci d'avoir signalé cet article, mais il ne semble pas que ce soit la garantie que vous êtes le seul à écrire sur une collection particulière. – lollancf37

+2

tant que vous utilisez des opérations de modification, peu importe le nombre d'écritures simultanées que vous avez. –

Questions connexes