MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Parallelität in gopkg.in/mgo.v2 (Mongo, Go)

Die mgo.Session ist sicher für die gleichzeitige Verwendung. Zitat aus seinem Dokument:

Alle Session-Methoden sind nebenläufigkeitssicher und können von mehreren Goroutinen aufgerufen werden.

Dies bedeutet jedoch nicht, dass Sie nicht mehr davon parallel erstellen und verwenden sollten, indem Sie Session.Copy() aufrufen oder Session.Clone() , auf der ersten Sitzung, die zur Einwahlzeit erhalten wurde.

Nebenläufigkeitssicherheit zu haben und Vorteile aus der Verwendung von mehr von ihnen zu ziehen, schließen sich nicht gegenseitig aus (sie schließen sich nicht gegenseitig aus ). Während Sie eine einzelne mgo.Session verwenden können aus einer beliebigen Anzahl von Goroutinen, die nicht gut skalieren, die überhaupt nicht skalieren . Sitzungen verwalten automatisch einen Pool von Verbindungen, vielleicht sogar zu mehreren Serverknoten, aber wenn Sie eine einzelne Session verwenden , du nutzt das nicht aus. Durch Erstellen einer neuen Session zu Beginn jeder Ihrer Anfragen (falls erforderlich) und ordnungsgemäß am Ende schließen (mit Session.Close()).; vorzugsweise mit defer aufgerufen ), nutzen Sie möglicherweise mehrere Verbindungen gleichzeitig, möglicherweise zu mehreren Serverknoten (falls verfügbar), und nutzen so die Serverressourcen besser; und schnellere Antwortzeiten (sowohl von der Datenbank als auch letztendlich zu Ihren HTTP-Endbenutzern). Aufruf von Session.Close() schließt nicht die zugrunde liegende Verbindung zum Server, sondern stellt die Verbindung einfach zurück in den Pool, bereit, von einer anderen Sitzung übernommen zu werden.

Siehe auch verwandte Frage zur Verwendung von Session s:mgo - Abfrageleistung scheint durchgehend langsam (500-650 ms)