sql >> Base de Datos >  >> NoSQL >> MongoDB

Mejores prácticas para mantener una sesión de mgo

Sugiero no usar una sesión global como esa. En su lugar, puede crear un tipo que sea responsable de toda la interacción con la base de datos. Por ejemplo:

type DataStore struct {
    session *mgo.Session
}

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

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

Hay muchos beneficios para ese diseño. Una importante es que le permite tener varias sesiones activas al mismo tiempo, por lo que si tiene un controlador http, por ejemplo, puede crear una sesión local respaldada por una sesión independiente solo para esa solicitud:

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

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

El controlador mgo se comporta bien en ese caso, ya que las sesiones se almacenan en caché internamente y se reutilizan/mantienen. Cada sesión también estará respaldada por un socket independiente mientras esté en uso, y puede tener configuraciones independientes configuradas, y también tendrá un manejo de errores independiente. Estos son problemas con los que eventualmente tendrá que lidiar si está utilizando una única sesión global.