Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah pertanyaan mudah mengambil masa lebih daripada 2 saat menggunakan pemandu Golang Mongo?

Mengapakah pertanyaan mudah mengambil masa lebih daripada 2 saat menggunakan pemandu Golang Mongo?

王林
王林ke hadapan
2024-02-06 09:30:081154semak imbas

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

Kandungan soalan

Saya sedang menulis perkhidmatan web golang dengan pangkalan data mongo, saya menggunakan go.mongodb.org/mongo-driver v1.11.6 dan pertanyaan mudah mengambil masa lebih daripada 2 saat untuk diselesaikan. Pangkalan data hanya mempunyai beberapa rekod, hanya untuk ujian, tidak lebih daripada 10 rekod.

Saya sedang mencari bahagian kod yang membuang masa saya dan saya mendapati masalahnya adalah dengan pakej mongo. Kaedah mencari, mencari dan juga memasukkan dan mengemas kini semuanya mengambil masa lebih daripada 1 atau 2 saat untuk diselesaikan.

Ini adalah instantiasi pelanggan mongo

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,
    }
}

Ini adalah kod fungsi:

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
}

Ini adalah hasil pengesanan masa fungsi:

Querying messages took 2.320409472s

Ini tiada kaitan dengan sambungan internet kerana saya menguji pertanyaan dengan python dan permintaan hanya mengambil masa 0.003 saat

Saya cuba menukar versi pakej tetapi tidak berjaya. Saya juga cuba memasang semula semua pakej untuk projek dengan hasil yang sama.

Saya juga cuba mencipta indeks carian dalam pangkalan data tetapi tidak mendapat hasil yang berbeza. Pertanyaan juga mengambil masa lebih daripada 2 saat untuk diselesaikan.

Saya tidak fikir pertanyaan perlu mengambil masa lebih daripada beberapa milisaat untuk diselesaikan.


Jawapan betul


mongo.Connect() "only" 通过启动后台监控 goroutine 来初始化 Client. Mungkin tidak ada keperluan untuk menyambung ke pangkalan data (jauh).

Apabila anda melaksanakan pertanyaan, mereka sudah tentu perlu mewujudkan sambungan, yang boleh mengambil masa beberapa saat.

Anda boleh menggunakan kaedah Client.Ping() untuk memaksa sambungan ke pangkalan data sebelum dan mengesahkan bahawa sambungan telah berjaya dibuat, jadi apabila anda melaksanakan pertanyaan, sambungan akan sedia.

Anda juga boleh cuba mengulangi pertanyaan yang sama kerana selepas pertanyaan pertama sambungan tidak ditutup tetapi dimasukkan ke dalam kumpulan sambungan dan digunakan semula (untuk pertanyaan kedua) apabila diperlukan lagi.

Atas ialah kandungan terperinci Mengapakah pertanyaan mudah mengambil masa lebih daripada 2 saat menggunakan pemandu Golang Mongo?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam