Ich schreibe einen Golang-Webdienst mit einer Mongo-Datenbank, ich verwende go.mongodb.org/mongo-driver v1.11.6 und eine einfache Abfrage dauert mehr als 2 Sekunden. Die Datenbank enthält nur wenige Datensätze, nur zum Testen, nicht mehr als 10 Datensätze.
Ich suchte nach dem Teil des Codes, der meine Zeit verschwendete, und stellte fest, dass das Problem beim Mongo-Paket lag. Die Ausführung der Methoden „find“, „findone“ und sogar „insert“ und „update“ dauert jeweils mehr als 1 oder 2 Sekunden.
Dies ist die Mongo-Client-Instanziierung
func newmongodb() *mongodb { uri := config.getenvconfig().mongouri database := config.getenvconfig().mongodatabase client, err := mongo.connect(context.todo(), options.client().applyuri(uri)) if err != nil { panic(err) } return &mongodb{ client: client, database: database, } }
Dies ist der Funktionscode:
func getmessagebyidfromdb(id string) (*message, error) { conn := database.newmongodb() defer conn.disconnect() filter := map[string]string{ "message_id": id, } var message message start := time.now() err := conn.getcollection(collectionname).findone(context.todo(), filter).decode(&message) elapsed := time.since(start) log.printf("querying messages took %s", elapsed) if err != nil { return nil, err } return &message, nil }
Das ist das Ergebnis der Funktionszeiterfassung:
Querying messages took 2.320409472s
Das hat nichts mit der Internetverbindung zu tun, da ich die Abfrage mit Python getestet habe und die Anfrage nur 0,003 Sekunden gedauert hat
Ich habe versucht, die Version des Pakets zu ändern, aber es hat nicht funktioniert. Ich habe auch versucht, alle Pakete für das Projekt neu zu installieren, mit dem gleichen Ergebnis.
Ich habe auch versucht, einen Suchindex in der Datenbank zu erstellen, habe aber keine anderen Ergebnisse erhalten. Auch die Abfrage dauert mehr als 2 Sekunden.
Ich denke, die Abfrage sollte nicht länger als ein paar Millisekunden dauern.
mongo.Connect()
"only" 通过启动后台监控 goroutine 来初始化 Client
. Möglicherweise ist keine Verbindung zu einer (Remote-)Datenbank erforderlich.
Wenn Sie Abfragen ausführen, müssen diese natürlich eine Verbindung herstellen, was einige Sekunden dauern kann.
Sie können die Methode Client.Ping()
verwenden, um vorher eine Verbindung zur Datenbank zu erzwingen und zu überprüfen, ob die Verbindung erfolgreich erstellt wurde. Wenn Sie also die Abfrage ausführen, ist die Verbindung bereit.
Sie können auch versuchen, dieselbe Abfrage zu wiederholen, da die Verbindung nach der ersten Abfrage nicht geschlossen, sondern in den Verbindungspool gestellt und bei Bedarf (für die zweite Abfrage) wiederverwendet wird.
Das obige ist der detaillierte Inhalt vonWarum dauert eine einfache Abfrage mit dem Golang Mongo-Treiber mehr als 2 Sekunden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!