MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Najlepsza praktyka w utrzymywaniu sesji MGO

Proponuję nie używać takiej sesji globalnej. Zamiast tego możesz utworzyć typ, który jest odpowiedzialny za całą interakcję z bazą danych. Na przykład:

type DataStore struct {
    session *mgo.Session
}

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

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

Ten projekt ma wiele zalet. Ważnym jest to, że pozwala to mieć wiele sesji w locie w tym samym czasie, więc jeśli masz na przykład obsługę http, możesz utworzyć sesję lokalną, która jest wspierana przez niezależną sesję tylko dla tego jednego żądania:

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

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

W takim przypadku sterownik mgo zachowuje się ładnie, ponieważ sesje są wewnętrznie buforowane i ponownie używane/utrzymywane. Każda sesja będzie również wspierana przez niezależne gniazdo podczas używania i może mieć skonfigurowane niezależne ustawienia, a także będzie mieć niezależną obsługę błędów. Są to problemy, z którymi w końcu będziesz musiał się uporać, jeśli korzystasz z jednej sesji globalnej.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zacząć korzystać z ClusterControl

  2. Węzeł MongoDB sprawdza, czy identyfikator obiektu jest prawidłowy

  3. Sposoby implementacji wersjonowania danych w MongoDB

  4. Jak zwrócić tylko wartość w MongoDB?

  5. Jak wstawić wiele dokumentów jednocześnie do MongoDB za pomocą Javy?