【问题标题】:How to optimize C# mongodb query on large datadases?如何在大型数据集上优化 C# mongodb 查询?
【发布时间】:2017-12-11 16:43:53
【问题描述】:

我有一个包含 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 转换为 List 的时间:00:01:00.7209163
  • 列表总数:1003154

我对给定代码的问题很少。

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

【问题讨论】:

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


    【解决方案1】:

    当 line collection.Find(filt) 执行时,它是否获取过滤 从数据库中记录或只是创建过滤器?

    这只是创建过滤器。

    var list1 = list.ToList();执行需要1分钟,是不是只有 从 var 转换为 list 或先获取数据而不是转换?

    它正在获取数据并转换。

    如何在最短的时间内完成这个查询和结果。请帮忙。

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

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

    【讨论】:

    • 感谢您提供的信息。我尝试在 Value 列上创建索引,但没有帮助。还有其他解决方案的方法吗?
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多