我使用下面的代码来获取mongodb的客户端:
package connectors
import (
"context"
"log"
"os"
"time"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func GetMongoDBConnection() *mongo.Client {
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, options.Client().ApplyURI(os.Getenv("MONGODB_URI")))
if err != nil {
log.Fatal(err)
}
return client
}
我是这样使用它的,来获得连接并将一个文档插入数据库:
dbClient := connectors.GetMongoDBConnection()
coll := dbClient.Database("test").Collection("test")
coll.InsertOne(context.TODO(), bson.M{"key": "value"})
我试着用以下方法来计算时间:
ConnectionTime := time.Now()
dbClient := connectors.GetMongoDBConnection()
fmt.Println(time.Since(ConnectionTime).Milliseconds())
CollSelectionTime := time.Now()
coll := dbClient.Database("test").Collection("test")
fmt.Println(time.Since(CollSelectionTime).Milliseconds())
InsetionTime := time.Now()
coll.InsertOne(context.TODO(), bson.M{"type": "congelada", "type2": "Masalado"})
fmt.Println(time.Since(InsetionTime).Milliseconds())
控制台打印:
0
0
629
因此,629毫秒来自"InsertOne"...但我不明白为什么,因为我试图插入10,000个文档,它花了2000毫秒,所以我实际上不明白这600毫秒来自哪里...
我怎样才能缩短时间...
1条答案
按热度按时间wlzqhblo1#
连接、数据库选择或集合选择只是捕获参数,而不执行任何实际操作。这些参数在执行实际数据库操作时使用。因此,第一次调用
InsertOne
时,如果尚未连接,则将连接,并执行操作。连接之后,调用
Ping
,它将实际连接到DB。