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

王林
Lepaskan: 2024-02-06 09:30:08
ke hadapan
1154 orang telah melayarinya

为什么使用 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,
    }
}
Salin selepas log masuk

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
}
Salin selepas log masuk

Ini adalah hasil pengesanan masa fungsi:

Querying messages took 2.320409472s
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!