c# - 如何优化大型数据集上的 C# mongodb 查询?

标签 c# mongodb mongodb-query mongodb-.net-driver robo3t

我有一个包含 1 亿条记录的数据库表。 Screen Shot is taken from Robomongo

表架构:There are 100 million records

当我运行以下代码时。我得到了结果,但大约需要 1 分钟才能完成。我需要优化查询以更快地获得结果。到目前为止我所做的就在这里。请告诉我如何实现优化结果。

        var collection = _database.GetCollection<BsonDocument>("FloatTable1");

        var sw = Stopwatch.StartNew();
        var builder = Builders<BsonDocument>.Filter;
        int min = Convert.ToInt32(textBox13.Text);  //3
        int max = Convert.ToInt32(textBox14.Text);  //150
        var filt = builder.Gt("Value", min) & builder.Lt("Value", max);
        var list = collection.Find(filt);
        sw.Stop();
        TimeSpan time = sw.Elapsed;
        Console.WriteLine("Time to Fetch Record: " + time.ToString());


        var sw1 = Stopwatch.StartNew();
        var list1 = list.ToList();
        sw1.Stop();
        TimeSpan time1 = sw1.Elapsed;
        Console.WriteLine("Time to Convert var to List: " + time1.ToString());
        Console.WriteLine("Total Count in List: " + list1.Count.ToString());

输出是:

  • 获取记录的时间:00:00:00.0059207
  • 将 var 转换为列表的时间:00:01:00.7209163
  • 列表中的总计数:1003154

我有几个与给定代码相关的问题。

  1. 当 line collection.Find(filt) 执行时,它是从数据库中获取过滤记录还是只是创建过滤器?
  2. var list1 = list.ToList();执行需要 1 分钟,是否只是从 var 转换为 list 或者先获取数据而不是转换?
  3. 如何在尽可能短的时间内完成此查询并获得结果。请帮忙。

最佳答案

When line collection.Find(filt) executes, does it fetch filtered record from the database OR Just creating filter?

它只是创建过滤器。

var list1 = list.ToList(); takes 1 minute to execute, is it only converting from var to list OR First fetching data than converting?

它正在获取数据并进行转换。

How to achieve this query and result in least possible time. Please Help.

数据库上的获取/过滤正在消耗您的时间。加快速度的最简单方法是在您要过滤的列上创建索引。

其他一切都需要更多的努力或数据库技术,例如创建一个更粗略地呈现您的日期的列(例如按天分组)并为此建立索引,或者创建类似按给定时间跨度分组的表部分之类的内容(我是我不是数据库管理员,也不知道正确的术语,但我记得有人在拥有数十亿条记录的数据库上这样做;) )

关于c# - 如何优化大型数据集上的 C# mongodb 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44969848/

相关文章:

mongodb - 仅在缺少时插入 mongo 文档字段

java - 使用 Morphia 在 MongoDB 中批量更新插入。可能吗?

mongodb - $filter 嵌套级别与 $or、$gte、$lte 运算符

mongodb - 如果 mongodb 中的数据为空或 null,则从 $match 中排除

mongodb - 更新 MongoDB 中数组内数组内的嵌入对象

c# - 如何从 Windows 文本文件中拆分行(/r/n 分隔)

c# - Windows Phone 8 - 在项目中的现有 txt 文件中读写

mongodb - 索引一个最初在 MongoDB 中不存在的字段

c# - 无论 .NET 中的时区如何,如何获得 FAT32 文件的正确修改日期时间?

c# - 如何将默认 Web API 2 更改为 JSON 格式化程序?