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

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

王林
王林nach vorne
2024-02-06 09:30:081187Durchsuche

为什么使用 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,
    }
}

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.


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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen