Rumah >pembangunan bahagian belakang >Golang >Mengapakah pertanyaan mudah mengambil masa lebih daripada 2 saat menggunakan pemandu Golang Mongo?
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.
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!