2016-07-18 7 views
2

Ich bin neu in der MongoDB-Datenbank und für eine meiner Anwendungsplanung einen Teil davon zu MongoDB verschieben. Wo wir mit optimistischer Nebenläufigkeit umgehen müssen. Welche Best Practices gibt es bei MongoDB?Wie man Parallelität in MongoDB verwaltet?

Ist MongoDB die richtige Wahl für Anwendungen, die Parallelität erfordern?

Antwort

4

Ja MongoDB wäre die richtige Wahl für Nebenläufigkeit.

Die MongoDB-Sperre unterscheidet sich von der Sperre in RDBMS.

MongoDB verwendet Multi-Granularität-Sperren (siehe verdrahteter Tiger), die Operationen auf globaler, Datenbank- oder Sammlungsebene sperren können, und ermöglicht es einzelnen Speicher-Engines, ihr eigenes Nebenläufigkeits-Steuerelement unterhalb der Collection-Ebene zu implementieren (z. B. bei der Dokumentenebene in WiredTiger).

MongoDB verwendet Reader-Writer-Sperren, die den gleichzeitigen Zugriff von Lesern auf eine Ressource wie z. B. eine Datenbank oder Sammlung ermöglichen, aber in MMAPv1 exklusiven Zugriff auf eine einzige Schreiboperation gewähren.

WiredTiger verwendet optimistische Steuerung des gemeinsamen Zugriffs. WiredTiger verwendet nur Intent-Sperren auf globaler, Datenbank- und Sammlungsebene. Wenn die Speicher-Engine Konflikte zwischen zwei Operationen erkennt, führt dies zu einem Schreibkonflikt, was dazu führt, dass MongoDB diese Operation transparent erneut versucht.

MongoDB hat ein Lese-/Schreib-Latch für jede Datenbank.

Das Latch ist Multiple-Reader, Single-Writer, und es ist Writer-gierig, so können wir eine unbegrenzte Anzahl von gleichzeitigen Lesern auf einer Datenbank haben, , aber es kann immer nur ein Writer zu einer Zeit auf jeder Sammlung sein in irgendeiner Datenbank.

"Writer-Greedy", gibt Priorität zu schreiben, wenn also eine Schreibanforderung erhalten, sind alle Leseanforderungen blockiert, bis der Schreibvorgang abgeschlossen ist.

Die Sperre wird hier als Latch bezeichnet, da sie leichter als eine Sperre ist und den Job innerhalb von Mikrosekunden ausführt.

MongoDB kann so viele gleichzeitige Abfragen ausführen.

Hoffe es hilft !!

Referenzen

https://docs.mongodb.com/manual/faq/concurrency/

https://docs.mongodb.com/manual/reference/command/findAndModify/