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

Best Practice zum Aufrechterhalten einer mgo-Sitzung

Ich schlage vor, eine solche globale Sitzung nicht zu verwenden. Stattdessen können Sie einen Typ erstellen, der für die gesamte Datenbankinteraktion verantwortlich ist. Zum Beispiel:

type DataStore struct {
    session *mgo.Session
}

func (ds *DataStore) ucol() *mgo.Collection { ... }

func (ds *DataStore) UserExist(user string) bool { ... }

Dieses Design hat viele Vorteile. Ein wichtiger ist, dass Sie mehrere Sitzungen gleichzeitig ausführen können. Wenn Sie also beispielsweise einen HTTP-Handler haben, können Sie eine lokale Sitzung erstellen, die nur für diese eine Anforderung von einer unabhängigen Sitzung unterstützt wird:

func (s *WebSite) dataStore() *DataStore {
    return &DataStore{s.session.Copy()}
}    

func (s *WebSite) HandleRequest(...) {
    ds := s.dataStore()
    defer ds.Close()
    ...
}

Der mgo-Treiber verhält sich in diesem Fall gut, da Sitzungen intern zwischengespeichert und wiederverwendet/verwaltet werden. Jede Sitzung wird während der Verwendung auch von einem unabhängigen Socket unterstützt und kann unabhängige Einstellungen haben, die konfiguriert sind, und wird auch eine unabhängige Fehlerbehandlung haben. Dies sind Probleme, mit denen Sie sich letztendlich auseinandersetzen müssen, wenn Sie eine einzelne globale Sitzung verwenden.