Estoy trabajando con MongoDB en mi proyecto actual y estoy un poco confundido acerca de la forma correcta de crear soporte para modificaciones concurrentes.Preocupaciones de Atomicidad de MongoDB - Modificar un documento en la memoria
Tengo una matriz de objetos. Cuando entra una solicitud, quiero inspeccionar el último elemento de esa matriz y tomar una decisión condicional sobre cómo responder. Mi código es algo como lo siguiente:
# Find the last object ID in the array.
last_element_id = str(document['objects'][-1])
if last_element_id != the_element_id_the_request_is_responding_to:
db.documents.insert({
...
})
else:
# Append the response to the end of the array.
document['objects'].append(new_element_id)
db.documents.save(document)
estoy preocupado por la situación en la que:
- En el manejo de petición A, encuentro la last_element_id es válida, y la respuesta se debe anexar hasta el final de la lista.
- Antes de completar las operaciones de agregar() y guardar(), otra solicitud, B, es manejada.
- B también ve que last_element_id es válido, agrega() la respuesta y guarda().
- Ahora, la respuesta de A se pone en cola al final de la matriz, pero la respuesta ya no sigue al supuesto 'last_element_id' ya que la respuesta de B se coló de antemano.
¿Cuál es la forma correcta de manejar este tipo de lógica en el modelo de atomicidad de Mongo? No quiero emplear bloqueos si puedo evitarlos, ya que la aplicación WSGI se puede ejecutar en múltiples procesos simultáneamente.
Gracias!
¡Parece que esto puede funcionar para lo que estoy haciendo! ¡Gracias! Informará de nuevo. –
Perfecto. ¡Gracias! –
@Shekar, simplemente puede lograr esto con findandmodify (este caso). verifique mi respuesta para más información – RameshVel