2015-05-04 4 views

Antwort

3

So lange, wie Sie sicherstellen, dass eine separate Datenbankverbindung für jeden Arbeitsprozess zu schaffen, ist es vollkommen sicher mehrere Prozesse hat eine Datenbank zur gleichen Zeit zugreifen. Alle Abfragen, die Änderungen an der Datenbank vornehmen, werden einzeln angewendet, normalerweise in der Reihenfolge, in der sie von der Datenbank empfangen werden. Unter den meisten Situationen wird dies sicher sein, aber :

  • Wenn Ihre Prozesse sind alle nur Dokumente in die Datenbank einfügen, wird jeder Einsatz typischerweise ein separates Objekt erstellen.

    Die Ausnahme ist, wenn Sie explizit ein _id für ein Dokument angeben, und dass Kennung bereits in der Sammlung verwendet wurde. Dies führt dazu, dass der Einsatz fehlschlägt. (Tun Sie das nicht: Lassen Sie _id aus und MongoDB generiert immer einen eindeutigen Wert für Sie.)

  • Wenn Ihre Prozesse Dokumente aus der Datenbank löschen, schlägt der Vorgang fehl, wenn ein anderer Prozess bereits gelöscht wurde das gleiche Objekt. (Dies ist jedoch nicht unbedingt ein Fehler; es bedeutet nur, dass jemand anderes vor Ihnen war.)

  • Wenn Ihre Prozesse Dokumente in der Datenbank aktualisieren, werden die Dinge düsterer.

    Solange jeder Prozess ein anderes Dokument aktualisiert, Sie sind in Ordnung.

    Wenn mehr Prozesse versuchen, das gleiche Dokument zur gleichen Zeit zu aktualisieren, starten benötigen Sie vorsichtig zu sein. Aktualisierungen, die die Werte eines Objekts ersetzen, werden der Reihenfolge nach angewendet, was dazu führen kann, dass von einem Prozess vorgenommene Änderungen unbeabsichtigt von einem anderen überschrieben werden. Sie sollten darauf achten, keine Felder anzugeben, die Sie nicht ändern möchten. Die Verwendung von MongoDBs update operators kann hilfreich sein, um komplexe Operationen atomar auszuführen, z. B. die numerischen Werte von Feldern zu ändern.

Beachten Sie, dass „zur gleichen Zeit“ bedeutet nicht notwendigerweise, dass Operationen bei auftreten genau zur gleichen Zeit. Es bedeutet allgemeiner, dass es eine "Überlappung" in der Zeit gibt, in der zwei Prozesse mit demselben Dokument arbeiten, z.

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

In der obigen Situation ist es möglich, für einen Teil der durch Prozess A vorgenommenen Änderungen versehentlich durch Verfahren B.

+0

Was passiert, wenn Sie für alle Worker-Prozesse dieselbe Verbindung verwenden? – Jessica

+0

@Jessica Schlechte Dinge. (Mehrere Prozesse versuchen möglicherweise gleichzeitig, in die Verbindung zu schreiben, und MongoDB wird ein Durcheinander bekommen und wahrscheinlich nur die Verbindung abbrechen.) Also tu das nicht. :) – duskwuff

1

Kurz überschrieben werden, ja es durchaus sinnvoll ist (und bevorzugt tatsächlich) zu lassen Ihre Datenbank kümmert sich um die Parallelität Ihrer Datenbankvorgänge.

Alle relevanten Datenbanktreiber (MongoDB enthalten) wird für Sie gleichzeitige Vorgänge automatisch handhaben.

Verwandte Themen