我正在使用mongodb数据库包golang找到一个文件。当我在go例程中运行多个readMongo函数时,运行readMongo函数所花费的时间增加了。这是我的机器的I/O限制吗?我正在阅读的文件小于0。5MB。
func main(){
go readMongo()
go readMongo()
go readMongo()
}
func go readMongo(){
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil{
//handle err
}
t1:=time.Now()
collection := client.Database("Data").Collection("myCollection")
if err := collection.FindOne(ctx,bson.M{"_id": "myKey"}).Decode(&data); err!= nil{}
t2:=time.Now()
fmt.Println(t2.sub(t1).Milliseconds())
}
###首先:连接数据库一次,并使用相同的客户端所有的goroutines。mongodb客户端管理连接池。
随着并发性的增加,单个读操作的性能会下降,主要原因是网络带宽。所有并行读取将共享到数据库的相同连接,从而导致速度变慢。在您的示例中,您正在并行地通过多个连接进行读取,从而导致读取操作共享网络带宽。在现实生活中的生产负载中,数据库流量通常是随机的,每个单独的goroutine的速度放缓是不可预测的。