`

MongoDB MapReduce原理实战之坑注意点

 
阅读更多

MongoDB MapReduce分组后的每一组数据如果大于100,那么他每次会取100条,归并完变成1条又返回给emit里面作为输入,继续判断余数是否大于100,大于100,取100条,周而复始,直到最后一次取数不大于100,运算完成后就结束。

需要特别说明的是,如果最后一次虽然不大于100,但是如果是1的话,那么不好意思,他直接就给到finalize了,跳过reduce函数。

原理剖析:

  

 MAPREDUCE

 

 

下面给出两个相同业务的运算逻辑。

 

第一种:注意costTime += (val.endTime - val.beginTime)+val.costTime;

var m =  function(){
        emit(this.url,{count:1,beginTime:this.rt,endTime:this.rpt,costTime:0})
    }
    var r =function(key,values){
        var cnt=0;
        var costTime = 0;
        var obj;
       values.forEach(function(val){
            if(val.endTime  != null && val.beginTime != null){
                cnt += val.count;
                costTime += (val.endTime - val.beginTime)+val.costTime;
            }
        })
        return {"count":cnt,beginTime:0,endTime:0,"costTime":costTime};
    }
    
    var f =function (key,reduceResult){
         //reduceResult.price =(reduceResult.beginTime).toFixed(2);
         if(reduceResult.count != 0 ){
             
              reduceResult.avgCost =(reduceResult.costTime/reduceResult.count).toFixed(2);
         }
        
         return reduceResult;
    }
    //"url":{"$in":["/agent-fx-web/area/findManageAreas.do","/agent-fx-web/api/distributor/expectCommission.do"]},
    var q = {"rt":{"$gt":ISODate("2017-10-10 07:00:25"),"$lt":ISODate("2017-10-10 07:30:25")}}
    
    db.runCommand({
        mapreduce:"traceIndex",
        map:m,
        reduce:r,
        query:q,
        finalize:f,
        out:{merge:"test_map_reduce_4"}
        }
    )

 第二种:注意totalCount += val.totalCount;

var m =  function(){
        emit(this.url,{"costTime":(this.rpt&&this.rt)?(this.rpt - this.rt):0,"totalCount":1})
    }
    var r =function(key,values){
        var totalCostTime = 0;
        var totalCount = 0;

        values.forEach(function(val){
            //if(val.costTime > 0){
                totalCount += val.totalCount;
                totalCostTime += val.costTime;
            //}
            //console.log(val);
        })
        var result = {"costTime":totalCostTime,"totalCount":totalCount};
        print(result);
        return result;
    }
    
    var f =function (key,reduceResult){
         //reduceResult.price =(reduceResult.beginTime).toFixed(2);
         if(reduceResult.count != 0 ){
              reduceResult.avgCost =(reduceResult.costTime/reduceResult.totalCount).toFixed(2);
         }  
        // db.getCollection("test_map_reduce_5").update({ca:key},result,{upsert:true});
         return reduceResult;
    }
    //"url":{"$in":["/agent-fx-web/area/findManageAreas.do","/agent-fx-web/api/distributor/expectCommission.do"]},
    var q = {"rt":{"$gt":ISODate("2017-10-10 07:00:25"),"$lt":ISODate("2017-10-10 07:30:25")}}
    
    db.runCommand({
        mapreduce:"traceIndex",
        map:m,
        reduce:r,
        query:q,
        finalize:f,
        out:{merge:"test_map_reduce_4"}
        }
    )

 

 

分享到:
评论

相关推荐

    MongoDB中MapReduce的使用方法详解

    需要注意的是,MongoDB的MapReduce在某些情况下可能会分批处理数据,例如每100次reduce操作后重新处理,这可能导致数据处理的不一致性。在编写reduce函数时,必须考虑到这一点,如上述示例所示,通过将累计值存储在...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    《深入云计算(MongoDB管理与开发实战详解)》系统全面的介绍了MongoDB开发、管理、维护和性能优化等方方面面。详细而深入,对MongoDB的开发和管理方法进行了详细的讲解,也对MongoDB的工作机制进行了深入的探讨。注重...

    MongoDB Books

    本篇文章将针对标题"MongoDB Books"中的三本书籍进行详细的知识点概述。 首先,"MongoDB实战"这本书通常会涵盖MongoDB的基础知识,包括安装与配置、数据模型设计、查询语言、索引创建、聚合框架以及备份与恢复策略...

    MongoDBNotesForProfessionals_MongoDB_mongodbbook_zip.zip

    MongoDBNotesForProfessionals_MongoDB_mongodbbook_zip.zip 是一个包含有关MongoDB专业应用的资料压缩包,很可能包含了深入的MongoDB知识和实战经验,适合已经对数据库有一定基础并希望深入学习MongoDB的开发者。...

    大数据相关学习资料hadoop kafka mongodb

    这三本书籍将带你逐步探索大数据的世界,从数据的存储(Hadoop HDFS)、处理(MapReduce)到实时传输(Kafka)以及非结构化数据管理(MongoDB)。通过深入学习,你不仅可以理解大数据技术的基本原理,还能掌握实际...

    2021MongoDB中文社区杭州大会干货分享版.rar

    在2021年的MongoDB中文社区杭州大会上,专家们分享了许多关于MongoDB的实战经验和深入技术点,以下是根据大会内容整理出的一些关键知识点: 1. **MongoDB的核心特性** - 文档型数据库:MongoDB存储数据为JSON格式...

    分布式技术原理与实战45讲.zip

    在这个45讲的系列中,我们将深入探讨分布式系统的基石、设计模式以及实战应用,帮助你掌握分布式技术的核心知识。 1. **分布式系统基础**: - 分布式系统的定义:分布式系统是由多台独立的计算机通过网络互相连接...

    《大数据技术原理与应用》课程标准.pdf

    参考教材和文献提供了丰富的学习资源,包括林子雨的《大数据技术原理与应用》、《大数据基础编程、实验和案例教程》、陆嘉恒的《实战》以及迪米达克和卡拉纳的《实战中文版》等,供学生深入学习和研究。 总的来说,...

    大数据分析与挖掘实战

    书中会详细介绍Hadoop的安装配置、集群管理以及HDFS和MapReduce的工作原理。 二、大数据预处理 大数据分析前的预处理工作至关重要,包括数据清洗、数据转换、数据集成等步骤。数据清洗主要是处理缺失值、异常值和...

    完整的大数据知识体系,大数据学习路线图.docx

    了解Hadoop技术的知识点包括HDFS的原理、MapReduce的原理、Hadoop的应用场景等。掌握Hadoop技术的程度:精通。 六、分布式数据库技术 分布式数据库技术是大数据存储的核心技术,掌握分布式数据库HBASE、Mongodb等...

    hadoop、spark、NoSQL实战全集高清

    在大数据处理领域,Hadoop、Spark和NoSQL都是至关重要的技术。这三者共同构建了现代数据处理的...通过学习和实践,你将能够更好地理解大数据处理的工作原理,提高数据处理的效率,并为应对大数据时代的挑战做好准备。

    Hadoop大数据管理实验详细参考文档

    "大数据管理实验之三Hadoop基础命令与编程初步.docx"则深入到Hadoop的使用层面,包括HDFS的基本命令,如上传、下载、查看文件等,以及编写MapReduce程序的初步概念,如Mapper和Reducer的工作原理,以及使用Java API...

    《大数据技术原理与应用》课程标准.docx

    为了支持教学,推荐了多本教材和参考书,如林子雨的《大数据技术原理与应用》、《大数据基础编程、实验和案例教程》、《Hadoop实战》和《Spark权威指南》等,这些资源可以帮助学生深入理解和应用课程知识。...

    深入浅出分布式技术原理 教程 下载 下载1.zip

    3. 分布式计算模型:讲解MapReduce、Spark等分布式计算框架的工作原理,它们如何处理大规模数据处理任务,以及在实际应用中的优势和局限。 4. 分布式存储:介绍HDFS(Hadoop Distributed File System)、Cassandra...

    大数据课程分类.pdf

    大数据课程分类.pdf 大数据课程分类.pdf是一份详细的课程大纲,涵盖了大数据相关的各个方面,包括基础阶段、存储阶段、...此外,本课程还涵盖了大数据之Linux基础、云计算平台、Java企业级核心技术等方面的知识点。

    云计算系统架构实战2

    在《云计算系统架构实战2》中,我们深入探讨了构建高效、可扩展的云计算环境所需的关键技术和组件。本文档由刘彬于2015年11月26日创立,旨在提供一个全面的实践指南,帮助读者理解云计算架构的核心元素。 首先,...

    hadoop权威指南

    7. **实战经验**:书中包含大量实例和实战案例,帮助读者将理论知识应用于实际项目,提升解决大数据问题的能力。 8. **MongoDB**:虽然不是Hadoop的一部分,但MongoDB是另一种流行的大数据存储解决方案,特别是在...

    华为大数据

    2. **Hadoop实战**:教授Hadoop的安装配置、HDFS的使用、MapReduce编程模型以及YARN资源调度器的管理。 3. **Spark技术**:讲解Spark的架构原理,如何编写Spark程序,以及Spark SQL和Spark Streaming的使用。 4. *...

    hadoop入门学习资料大全

    **3.1 MapReduce 工作原理** - **Map 阶段**:将输入数据分割成小块,每个块由 Map 函数处理,生成键值对。 - **Reduce 阶段**:对 Map 阶段产生的中间结果进行汇总,生成最终输出。 **3.2 MapReduce 优势** - **...

Global site tag (gtag.js) - Google Analytics