sql >> Database >  >> NoSQL >> MongoDB

Best practice om een ​​mgo-sessie te behouden

Ik stel voor om zo'n globale sessie niet te gebruiken. In plaats daarvan kunt u een type maken dat verantwoordelijk is voor alle database-interactie. Bijvoorbeeld:

type DataStore struct {
    session *mgo.Session
}

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

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

Dat ontwerp heeft veel voordelen. Een belangrijke is dat je hiermee meerdere sessies tegelijkertijd kunt hebben, dus als je bijvoorbeeld een http-handler hebt, kun je voor dat ene verzoek een lokale sessie maken die wordt ondersteund door een onafhankelijke sessie:

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

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

Het mgo-stuurprogramma gedraagt ​​​​zich in dat geval netjes, omdat sessies intern in de cache worden opgeslagen en opnieuw worden gebruikt / onderhouden. Elke sessie wordt ook ondersteund door een onafhankelijke socket tijdens gebruik, en kan onafhankelijke instellingen hebben geconfigureerd, en zal ook onafhankelijke foutafhandeling hebben. Dit zijn problemen waar u uiteindelijk mee te maken krijgt als u een enkele globale sessie gebruikt.



  1. flushdb wist niet alle sleutels in redis?

  2. Kan geen Jedis-verbinding krijgen bij gebruik van SSL met Redis en Spring Data Redis

  3. MongoDB - Maak een back-up

  4. Hoe ML-modellen in productie te zetten