Bör*_*örg 10 c# performance mongodb mongodb-.net-driver
要在MongoDB中使用事务,您必须首先开始一个会话。当您有许多事务时,您可以重用现有会话或为每个事务创建一个新会话。
我对这两个选项进行了基准测试(下面的代码),结果令人困惑。与为所有事务使用单个会话相比,为每个事务使用全新会话似乎要快得多(快2到3倍)。
谁能解释为什么会这样?后台如何进行工作?它们的含义是什么?这意味着什么成本(以及何时以及为什么)?我真的很想了解,感谢您提出任何建议。
Stopwatch sw = new Stopwatch();
coll1.InsertOne(new BsonDocument { { "Seq", 0 } });
sw.Start();
for (int i = 1; i <= reps; i++) {
using (var session = client.StartSession()) {
session.StartTransaction();
coll1.InsertOne(session: session, document: new BsonDocument { { "Seq", i } });
session.CommitTransaction();
}
}
sw.Stop();
Console.WriteLine($"{reps / sw.Elapsed.TotalSeconds} OP/s with fresh sessions.");
coll2.InsertOne(new BsonDocument { { "Seq", 0 } });
sw.Restart();
using (var session = client.StartSession()) {
for (int i = 1; i <= reps; i++) {
session.StartTransaction();
coll2.InsertOne(session: session, document: new BsonDocument { { "Seq", i } });
session.CommitTransaction();
}
}
sw.Stop();
Console.WriteLine($"{reps / sw.Elapsed.TotalSeconds} OP/s with common session.");
Run Code Online (Sandbox Code Playgroud)
我也尝试先运行单个会话代码,以得到相同的结果。