Warum dauert eine einfache Abfrage mit dem Golang Mongo-Treiber mehr als 2 Sekunden?

王林
Freigeben: 2024-02-06 09:30:08
nach vorne
1156 Leute haben es durchsucht

为什么使用 Golang Mongo 驱动程序执行一个简单的查询需要花费 2 秒以上的时间?

Frageninhalt

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,
    }
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

Das ist das Ergebnis der Funktionszeiterfassung:

Querying messages took 2.320409472s
Nach dem Login kopieren

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.


Richtige Antwort


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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!