2015-05-04 6 views

risposta

3

Fintanto che ci si assicura di creare una connessione di database separata per ogni processo di lavoro, è perfettamente sicuro avere più processi che accedono a un database contemporaneamente. Tutte le query che emettono che apportano modifiche al database verranno applicate singolarmente, in genere nell'ordine in cui vengono ricevute dal database. Nella maggior parte delle situazioni questo sarà al sicuro, ma :

  • Se i processi sono tutti solo Inserimento di documenti nel database, ogni inserto in genere creare un oggetto separato.

    L'eccezione è se si specifica esplicitamente un _id per un documento e tale identificatore è già stato utilizzato all'interno dell'insieme. Ciò causerà l'errore dell'inserto. (Quindi non farlo: lasciare _id e MongoDB genererà sempre un valore univoco.)

  • Se i processi eliminano i documenti dal database, l'operazione avrà esito negativo se un altro processo è già stato eliminato lo stesso oggetto. (Questo non è strettamente un fallimento, però, significa solo che qualcun altro è arrivato prima di te.)

  • Se i processi stanno aggiornando i documenti nel database, le cose si fanno più cupe.

    Fintanto che ogni processo sta aggiornando un documento diverso, stai bene.

    Se più processi tentano di aggiornare lo stesso documento contemporaneamente, è necessario prestare attenzione. Gli aggiornamenti che sostituiscono i valori su un oggetto verranno applicati in ordine, il che potrebbe causare la sovrascrittura inavvertita delle modifiche apportate da un processo da parte di un altro. Si dovrebbe fare attenzione ad evitare di specificare campi che non si intende modificare. L'utilizzo di MongoDB può essere utile per eseguire operazioni complesse atomicamente, come la modifica dei valori numerici dei campi.

noti che "allo stesso tempo" non significa necessariamente che le operazioni si verificano a esattamente contemporaneamente. Significa più generalmente che c'è una "sovrapposizione" nel tempo in cui due processi stanno lavorando con lo stesso documento, ad es.

Process A     Process B 
---------     --------- 
Reads object from DB   ... 
working...     Reads object from DB 
working...     working... 
updates object with changes working... 
          updates object with changes 

Nella situazione precedente, è possibile per alcune delle modifiche apportate dal processo A inavvertitamente sovrascritto dal processo B.

+0

Cosa succede se si utilizza la stessa connessione per tutti i processi di lavoro? – Jessica

+0

@Jessica Cose cattive. (Processi multipli possono provare a scrivere alla connessione contemporaneamente, e MongoDB avrà un pasticcio confuso e probabilmente abbandonerà la connessione.) Quindi non farlo. :) – duskwuff

1

In breve, sì è perfettamente ragionevole (e in realtà preferito) per far il tuo database si preoccupa della concorrenza delle operazioni del tuo database.

Qualsiasi driver di database pertinente (incluso MongoDB) gestirà automaticamente le operazioni simultanee.