sql >> Databasteknik >  >> NoSQL >> MongoDB

Bästa praxis för att upprätthålla en MGO-session

Jag föreslår att du inte använder en sådan global session. Istället kan du skapa en typ som är ansvarig för all databasinteraktion. Till exempel:

type DataStore struct {
    session *mgo.Session
}

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

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

Det finns många fördelar med den designen. En viktig är att den tillåter dig att ha flera sessioner under flygning samtidigt, så om du till exempel har en http-hanterare kan du skapa en lokal session som backas upp av en oberoende session bara för den ena begäran:

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

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

Mgo-drivrutinen beter sig i så fall bra, eftersom sessioner cachelagras internt och återanvänds/underhålls. Varje session kommer också att backas upp av en oberoende socket när den används, och kan ha oberoende inställningar konfigurerade och kommer också att ha oberoende felhantering. Det här är problem som du så småningom kommer att behöva ta itu med om du använder en enda global session.



  1. En utvecklarguide till MongoDB Sharding

  2. GridFS i Spring Data MongoDB

  3. När ska man stänga av Transparent Huge Pages för redis

  4. Fråga MongoDB med ett regex-uttryck mot ett ObjectId