MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Най-добра практика за поддържане на mgo сесия

Предлагам да не използвате подобна глобална сесия. Вместо това можете да създадете тип, който отговаря за цялото взаимодействие с базата данни. Например:

type DataStore struct {
    session *mgo.Session
}

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

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

Има много предимства на този дизайн. Важно е, че ви позволява да имате няколко сесии в полет едновременно, така че ако имате http манипулатор, например, можете да създадете локална сесия, която е подкрепена от независима сесия само за тази една заявка:

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

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

Драйверът mgo се държи добре в този случай, тъй като сесиите се кешират вътрешно и се използват повторно/поддържат. Всяка сесия също ще бъде подкрепена от независим сокет, докато се използва, и може да има конфигурирани независими настройки, а също така ще има независима обработка на грешки. Това са проблеми, с които в крайна сметка ще трябва да се справите, ако използвате една глобална сесия.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Множество $или операции

  2. PyMongo -- итерация на курсора

  3. Използвайте Mongosniff, за да изясните какво чува и казва вашият MongoDB

  4. Docker mongo изображение „Връзката е отказана“ от друг контейнер

  5. Как да експортирам/изхвърлям базата данни mongodb?