sto lavorando con MongoDB sul mio progetto in corso e un po 'confuso circa il modo corretto per costruire un sostegno per le modifiche simultanee.MongoDB atomicità Le preoccupazioni - Modifica di un documento in memoria
Ho un array di oggetti. Quando arriva una richiesta, voglio ispezionare l'ultimo elemento di quell'array e prendere una decisione condizionale su come rispondere. Il mio codice simile a quanto segue:
# 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)
Sono preoccupato per la situazione in cui:
- Nella gestione richiesta Un, trovo il last_element_id è valida, e la risposta dovrebbe essere aggiunto alla fine della lista. operazioni
- Prima l'append() e salvare() completa, un'altra richiesta, B, è gestito.
- B vede anche l'last_element_id è valido, aggiunge() la risposta e salva().
- Ora, la risposta di A è accodata alla fine dell'array, ma la risposta non segue più il supposto 'last_element_id' poiché la risposta di B si è bloccata in anticipo.
Qual è il modo corretto di gestire questo tipo di logica nel modello atomico di Mongo? Non voglio utilizzare i blocchi se posso evitarli, poiché l'applicazione WSGI può essere eseguita in più processi contemporaneamente.
Grazie!
Sembra che questo possa funzionare per quello che sto facendo! Grazie! Riferirò. –
Perfetto. Grazie! –
@Shekar, puoi semplicemente raggiungerlo con findandmodify (questo caso). controlla la mia risposta per maggiori informazioni – RameshVel