MongoDB数据量大,翻页报错,200多万

来源:互联网 发布:linux 二进制文件 编辑:程序博客网 时间:2024/05/20 22:41
Command aggregate failed: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in..
MongoDB.Driver.MongoCommandException: Command aggregate failed: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in..
   在 MongoDB.Driver.Linq.MongoQueryProviderImpl`1.Execute(Expression expression)

   在 MongoDB.Driver.Linq.MongoQueryableImpl`2.GetEnumerator()


求高僧开导。



------------------------------------ 临时解决方案 01 ------------------------------------------------------------------

1. AggregateOptions args = new AggregateOptions {
                  AllowDiskUse = true
            };


            var starDt = DateTime.Now.AddDays(-2);//三天之内
            var endDt = DateTime.Now;


            var query = _mongo.海量表(几百万).Aggregate(args).ToList().Where(q => q.CreateTime >= starDt && q.CreateTime <= endDt).Select(q => new
            {
              
            });

    优点:AllowDiskUse 开关,相当于拿硬盘补充内存,可消除查询超时的异常。

    缺点:必须要ToList()才能进行Where链条查询,依然没有解决性能问题

  

2.   var starDt = DateTime.Now.AddDays(-2);//三天之内
            var endDt = DateTime.Now;   

            var query = _mongo.海量表.Find(q => q.CreateTime >= starDt && q.CreateTime <= endDt);.

    优点:Find可以返回一个IFindFluent<TDocument, TDocument>类型,可以马上进行Where查询操作,之后再进行ToList(),200w海量库从90秒提升到6秒的加速速度

    缺点:如果三天之内的条件放开,依然卡得出翔。


求路过高僧指导。

阅读全文
0 0
原创粉丝点击