gpt4 book ai didi

c# - 为什么 MongoDB 中的多个 session 比一个 session 更快?

转载 作者:可可西里 更新时间:2023-11-01 09:14:42 26 4
gpt4 key购买 nike

要在 MongoDB 中使用事务,您必须先启动一个 session 。当您有很多事务时,您可以重用现有 session 或为每个事务创建一个新 session 。

我对这两个选项进行了基准测试(下面的代码),结果让我感到困惑。对每个事务使用新 session 似乎比对所有事务使用单个 session 要快得多(快约 2 到 3 倍)。

谁能解释一下为什么会这样? session 如何在幕后工作?它们的含义是什么?这意味着什么成本(以及何时和为什么)?我真的很想了解,非常感谢任何指点。

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.");

我还尝试先运行单个 session 代码,结果相同。

最佳答案

来自 the documentation .

Isolation

Operations within a causally consistent session are not isolated from operations outside the session. If a concurrent write operation interleaves between the session’s write and read operations, the session’s read operation may return results that reflect a write operation that occurred after the session’s write operation.

这意味着不同 session 的操作可以并行进行,而不会频繁阻塞。

关于c# - 为什么 MongoDB 中的多个 session 比一个 session 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55980425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com