MongoDB数据接收太慢

时间:2019-02-13 08:46:46

标签: c# mongodb mongodb-.net-driver

我的文档中包含大量字段(每个字段7500个) 但是字段值是简单数据(仅数字),当我尝试查询Collection时,它的效果很好(我看着mongo profiler并正确使用了索引) 但是迭代游标(接收数据)花费的时间太长 生成的文档数约为450,但大约需要2分钟才能收到所有文档 我已经将mongoDB版本更新到最后一个,也更新了MongoDB驱动程序(用于.NET),重新创建了索引,但是没有帮助

P.S连接不慢(BD服务器在我的本地网络中-100Base-T /快速以太网) 查询代码示例如下

        var builder = Builders<BsonDocument>.Filter;

        var filter = builder.Eq("OrgID", orgID);
        filter = filter & builder.Eq("DateDeleted", (DateTime?)null);

        var collection = GetCollection("NameOfCollection");
        var result = collection.Find(filter);

        using (var cursor = result.ToCursor())
        {
            while (cursor.MoveNext())
            {
                var batch = cursor.Current;
                foreach (var document in batch)
                {
                    yield return document;
                }
            }
        }

并且我分别为该字段创建了索引,并且在两个索引中都有一个复合索引

,它适用于文档多但字段少(每个文档约20个字段)的集合

1 个答案:

答案 0 :(得分:0)

为什么要使用光标?我的理解是分别获取每个记录。我敢打赌,如果您遍历ToList()会获得更好的性能,因为它可以在一次调用中获取所有数据。

Foreach(var batch in collection.Find(filter).ToList()){
    // your other code here
}

您也将获得结果,这意味着该结果嵌套在IEnumerable中,并且在这些检索调用之间进行的操作可能会减慢该过程的速度,但是您忽略了该代码,因此很难说。