gpt4 book ai didi

performance - MongoDB C# 游标性能问题

转载 作者:可可西里 更新时间:2023-11-01 10:01:28 25 4
gpt4 key购买 nike

自 2012 年 3 月 13 日起,我安装了最新的 MongoDB 64 位数据库和官方 C# 驱动程序。我使用游标获得了一些意想不到的性能结果。

以下代码将在我的 Core 2 Duo 2 GHz 笔记本电脑上以大约 26.8 k/秒的速度检索并循环遍历 500,000 条记录:

    var query = Query.EQ("_H._t", "Car");
var cursor = mc.FindAs<RoctObj>(query);
double priceTot = 0d;

foreach (RoctObj item in cursor)
{
Car car = (Car)item._H;
priceTot += car.Price;
}

这似乎是合理的。接下来,我调整了查询​​,以便只返回 721 个结果。与将 foreach 段替换为:

    long i = cursor.Count();

鉴于第一个示例的速度,721 条记录应该只需要几分之一秒的时间来迭代。我知道还有一些其他的开销,但它们应该是那么糟糕。我不明白为什么我得到 +1.1 秒。

有什么想法吗?

编辑

这是备用查询。请注意,查询时间不是问题。这是迭代时间。

    var query = Query.And(
Query.LTE("_H.Price", BsonDouble.Create(80000d)).GTE(BsonDouble.Create(40000d)),
Query.LTE("_H.Cylinders", BsonDouble.Create(8d)).GTE(BsonDouble.Create(4d)),
Query.LTE("_H.Capacity", BsonDouble.Create(3000d)).GTE(BsonDouble.Create(2000d)),
Query.LTE("_H.TopSpeed", BsonDouble.Create(200d)).GTE(BsonDouble.Create(100d))
);

最佳答案

调用 cursor.Count() 不会将数据从服务器传输到您的应用程序。它向服务器发送命令并在服务器上执行计数,只有一个包含计数数字结果的小数据包从服务器返回。

不确定为什么遍历文档比简单计数花费的时间长得多。一个原因可能是服务器能够仅使用索引来计算计数,但是当您实际遍历文档时,服务器必须从磁盘中获取每个文档,如果它还没有被分页到内存中的话。

它不太可能成为 C# 驱动程序反序列化代码中的任何瓶颈,因为它非常快。

如果您可以提供一个示例程序来演示观察到的行为,我很乐意尝试重现您的结果。

关于performance - MongoDB C# 游标性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9688086/

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