2017-05-17 2 views
0

mongodb verrouille-t-il la base de données lors de l'exécution de la mise à jour groupée? J'utilise le fonctionnement en masse de mongo.écriture simultanée dans mongodb mise à jour groupée

var bulk = db.items.initializeUnorderedBulkOp(); bulk.find({ status: "D" }).updateOne({ $set: { status: "I", points: "0" } }); bulk.find({ status: "A" }).updateOne({ $set: { status: "B", points: "0" } }); bulk.execute();

Supposons que cette opération a 100 trouver et mise à jour, et il y a un autre processus en cours qui tente également de mettre à jour même collection db.

Possède-t-il un verrou pour empêcher la mise à jour simultanée?

Répondre

1

En supposant que vous utilisez la version MongoDB> = 3.0 et le WiredTiger Storage Engine (qui est le moteur de stockage par défaut pour les versions MongoDB> = 3.2), Document Level Concurrency contrôle est utilisé. Par conséquent, avec WiredTiger dans votre exemple, vos mises à jour peuvent être exécutées simultanément. Par exemple, dans le cas de WiredTiger. Si deux threads ou processus tentent de mettre à jour le même document en même temps, MongoDB détectera le conflit d'écriture et réessayera de manière transparente.

Voir le Concurrency FAQ pour plus de détails.

+0

Oui. Je comprends que lors de la mise à jour de la collection en utilisant 'db.collection.update()' mongo utilise le verrouillage. Je demande spécifiquement si j'utilise bulk.initializeUnorderedBulkOp pour mettre à jour une collection. utilisera-t-il le verrou? Et oui. J'utilise mongo 3.2 –

+0

La mise à jour en vrac n'est pas différente en ce qui concerne le verrouillage/concurrence. – helmy