2011-08-09 20 views
14

Comencé a usar MongoDB en el trabajo hasta ahora, todo bien. Me preguntaba cómo funciona MongoDB con las actualizaciones simultáneas. He leído que no hay función de bloqueo en MongoDB, así que me preguntaba cuál es la práctica común para tratar con esto.¿Cómo maneja MongoDB las actualizaciones simultáneas?

Gracias.

Respuesta

20

MongoDB utilizó un bloqueo de escritura de todo el proceso para garantizar que solo se pueda realizar una operación de escritura (actualizar/insertar/eliminar) a la vez. Como tal, resuelve automáticamente problemas de simultaneidad ya que la simultaneidad de escritura simplemente no está permitida.

Si 4 hilos intentan una operación de actualización, uno de ellos tomará el bloqueo de escritura, actualizará y liberará el bloqueo. Después de eso, uno de los 3 restantes tomará el bloqueo, realizará su actualización, etc.

La concurrencia solo entra en juego si su operación no puede envolverse en una sola operación de escritura. Tenga en cuenta que para el caso de uso más común (Encontrar un médico, actualizarlo y agarrar la nueva versión atómicamente) MongoDB ofrece el comando "findAndModify", que hace precisamente eso: http://www.mongodb.org/display/DOCS/findAndModify+Command

ACTUALIZACIÓN: El bloqueo es más granular en estos días.

+0

Gracias, entiendo por qué parecía conocimiento común. – lollancf37

+0

De nada. Parece una característica limitante, pero como las escrituras son relativamente rápidas, rara vez es un problema de rendimiento. Esté atento al "% bloqueado" en mongostat para ver cuánto tiempo se pasa con el bloqueo mantenido. –

3

Uso modifier operations:

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

todos ellos son atómica.

+0

Gracias por señalar este artículo, pero no parece que garantice que usted es el único que escribe sobre una colección en particular, ¿no? – lollancf37

+2

siempre que use operaciones de modificación, no importa cuántas escrituras simultáneas tenga. –

Cuestiones relacionadas