`

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学习资料(Mongodb权威指南+实战班克)

    本学习资料包含了"Mongodb权威指南"和"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的开发者。...

    MongoDB权威指南

    通过《MongoDB权威指南》,读者不仅可以获得扎实的理论知识,还能通过丰富的实例和实战经验,提升MongoDB的实际操作能力。无论是初学者还是经验丰富的开发者,都能从中受益匪浅,更好地利用MongoDB解决实际项目中的...

    MongoDB权威指南(第2版)

    - MapReduce:了解如何使用MongoDB的MapReduce功能进行大数据处理和分析。 3. **性能优化** - 索引:学习创建和管理索引,理解不同类型的索引(如单键、复合、地理空间和文本索引)以及它们对查询性能的影响。 -...

    大数据相关学习资料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应用开发技术详解代码

    5. **MapReduce实战**(第8章): - 自定义InputFormat和OutputFormat:根据实际需求定制数据输入输出格式。 - 分析日志数据:使用MapReduce处理大量服务器日志,提取有价值信息。 - 处理复杂数据结构:例如XML或...

    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企业级核心技术等方面的知识点。

Global site tag (gtag.js) - Google Analytics