Best Practice, um eine mgo-Sitzung aufrechtzuerhalten
Ich bin derzeit mit einem mongodb mit mgo-lib für eine web-Anwendung, aber ich bin mir nicht sicher, ob der Weg, den ich verwende, ist gut ..
package db
import (
"gopkg.in/mgo.v2"
)
const (
MongoServerAddr = "192.168.0.104"
RedisServerAddr = "192.168.0.104"
)
var (
MongoSession, err = mgo.Dial(MongoServerAddr)
MDB = MongoSession.DB("message")
MCol = MDB.C("new")
MSav = MDB.C("save")
UDB = MongoSession.DB("account")
UCol = UDB.C("user")
)
Ich init der db-session und erstellen von Variablen, die sich die Sammlung und Dokument Wert,
wenn ich also die Abfrage eine collection, die ich mit der Variablen zu machen.
So :
func UserExist(username string) bool {
user := Users{}
err := db.UCol.Find(bson.M{"username": username}).One(&user)
if err != nil {
return false
} else {
return true
}
}
Gibt es also ein best practice oder diese in Ordnung ist ..?
Dank
InformationsquelleAutor der Frage JonathanChaput | 2014-10-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich schlage vor, nicht mit einem global-Sitzung so. Erstellen Sie stattdessen eine Art, die verantwortlich ist für die Datenbank-Interaktion. Zum Beispiel:
Gibt es viele Vorteile für das design. Wichtig ist, dass es ermöglicht, mehrere Sitzungen im Flug zur gleichen Zeit, also, wenn Sie einen http-handler, zum Beispiel, können Sie erstellen Sie eine lokale Sitzung, unterstützt von einem unabhängigen session nur für diese eine Anfrage:
Der mgo-Treiber verhält sich schön in diesem Fall, wie Sitzungen werden intern zwischengespeichert und wieder verwendet/verwaltet. Jede Sitzung wird auch unterstützt von einem unabhängigen Buchse, während im Einsatz, und kann haben unabhängige Einstellungen konfiguriert, und auch unabhängig Fehlerbehandlung. Diese Fragen werden Sie schließlich zu bewältigen haben, wenn Sie einen einzigen globalen session.
InformationsquelleAutor der Antwort Gustavo Niemeyer
Zwar nicht direkt deine Frage zu beantworten, in Bezug auf mgo-Sitzung überprüfen, die Sie verwenden müssen, zurückstellen/wiederherstellen da mgo Anrufe (auch mgo.Sitzung.Ping) Panik. Soweit ich das beurteilen kann gibt es keine andere Möglichkeit, zu überprüfen, mgo session state (mgo godocs). Sie können Gustavo Niemeyer's Vorschlag, und fügen Sie eine Methode hinzu, die auf Ihrem
DataStore
geben.InformationsquelleAutor der Antwort Zamicol
Mit 1.7 gehen, die meisten idiomatischen Umgang mit mongo-session auf einem webserver ist die Verwendung des neuen standard-Bibliothek-Paket
context
zu schreiben, eine middleware, die befestigen kanndefer session.Close()
zu, wenn der Antrag Kontext Done() aufgerufen wird. So müssen Sie nicht daran erinnern zu schließenInformationsquelleAutor der Antwort CESCO