我正在编写一个具有mongo数据库的Golang Web服务,我使用的是go.mongob.org/mongo-driverv1.11.6,一个简单的查询需要2秒钟以上的时间才能完成.数据库只有几条记录,只是为了测试,不超过10条记录.
我一直在寻找浪费时间的代码部分,我发现问题出在mongo包上.方法Find、FindOne,甚至Insert和Update都需要超过1到2秒的时间才能完成.
这是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,
}
}
这是功能代码:
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
}
这是函数时间跟踪的结果:
Querying messages took 2.320409472s
这与互联网连接无关,因为我用Python进行了查询测试,请求只用了0.003秒
我试图更改包的版本,但没有实现.我还试着重新安装项目的所有包,结果都是一样的.
我还try 在数据库中创建搜索索引,但没有不同的结果.查询也需要超过2秒才能完成.
我认为完成查询应该不会超过几毫秒.