资讯专栏INFORMATION COLUMN

MongoDb之MapReduce

avwu / 2131人阅读

摘要:中的相当于中的,所以在上使用进行并行统计比较容易。使用要实现两个函数和函数,函数调用,遍历中所有记录,将与传递给函数进行处理。由此可见,这并不是成线性增长,而是随着数据量增长,时间也在不断的递增,而且单位时间内增长的数据量也会减少。

  

MongoDB中的MapReduce相当于Mysql中的group by, 所以在MongoDb上使用Map/Reduce进行并行"统计"比较容易。使用MapReduce要实现两个函数Map和Reduce函数,Map函数调用emit(key, value),遍历collection中所有记录,将key与value传递给Reduce函数进行处理。Map函数和Reduce函数可以使用javascript来实现。可以通过db.runCommand()或mapReduce()命令来执行MapReduce操作。

下列是runCommand()函数与参数说明

    db.runCommand(
        "mapreduce":,//要操作的目标集合
        "map":,//映射函数(生成键值对序列,做为reduce函数参考)
        "reduce"://统计函数
        [,query:]//目标记录过滤
        [,sort:<>]//目标记录排序
        [,limit:]//限制目标记录数量
        [,out:]//统计结果存放集合(不指定则使用临时集合,在客户端断开后自动删除)
        [,keeptem:]//是否保留临时集合
        [,finalize:]//最终处理函数(对reduce返回结果进行最终整理后存入结果集合)
        [,scope:]//向map/reduce/finalize导入外部变量。
        [,verbose:true]//显示详细的时间统计信息
    );


我们先准备一些数据(用php脚本暂时insert十万数据,大概需要8.35秒):

ini__set("max_execution_time", 300)是适应浏览器执行时,出现的30秒超时。
接下来,我们利用php来统计uid。(10万条数据,大概耗时7.29秒)

这个脚本大概运行7~8秒钟,我们利用MongoCode()建立Map和Reduce函数,然后通过out选择建立临时表,在这有我们留下临时表,不做删除。
生成表的数据格式有两个元素,一个uid为_id、另一个是这个uid出现的次数,存在value。

我们再次用insert脚本插入90万数据,弄成100万的数据。这次耗时是1.7min。由此可见,这并不是成线性增长,而是随着数据量增长,时间也在不断的递增,而且单位时间内增长的数据量也会减少。

好,那我们再次执行map脚本,看看需要多长时间。这次大概耗时1分钟20秒左右。

但是如果我们用平常的方法,利用循环、判断、组合来分组的话,耗时已经不仅仅为1分钟了,时间会更长。

所以,在合适的时候用MapReduce会事半功倍的。这只是处理100万的数据,但是如果处理更多的数据时,上千万的数据,也会更节省时间,当然随着数据量的增多,需要注意更多方面的问题,譬如内存是否足够等等。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18707.html

相关文章

  • MongoDB优化倒排索引

    摘要:简单地说,倒排索引就是把与对调之后的索引,构建倒排索引的目的是提升搜索性能。本文将介绍中两种构建倒排索引的方法与。 摘要: 为MongoDB中的数据构建倒排索引(Inverted Index),然后缓存到内存中,可以大幅提升搜索性能。本文将通过为电影数据构建演员索引,介绍两种构建倒排索引的方法:MapReduce和Aggregation Pipeline。 GitHub地址: 作者:...

    Nino 评论0 收藏0
  • mongoDB高级篇②】大数据聚集运算mapReduce(映射化简)

    摘要:简述从字面上来理解就是两个过程映射以及化简。在映射化简的过程都是每台服务器自己的在运算,大量的服务器同时来进行运算工作,这就是大数据基本理念。映射操作输出了键值对结果。在中,所有的映射化简函数都是使用编写,并且运行在进程中。 简述 mapReduce从字面上来理解就是两个过程:map映射以及reduce化简。是一种比较先进的大数据处理方法,其难度不高,从性能上来说属于比较暴力的(通过N...

    madthumb 评论0 收藏0
  • MongoDB指南---17、MapReduce

    摘要:操作花费的时间,单位是毫秒。处理完成后,会自动将临时集合的名字更改为你指定的集合名,这个重命名的过程是原子性的。作用域在这些函数内部是不变的。上一篇文章指南聚合下一篇文章指南聚合命令 上一篇文章:MongoDB指南---16、聚合下一篇文章:MongoDB指南---18、聚合命令 MapReduce是聚合工具中的明星,它非常强大、非常灵活。有些问题过于复杂,无法使用聚合框架的查询语言...

    jonh_felix 评论0 收藏0
  • MongoDB指南---17、MapReduce

    摘要:操作花费的时间,单位是毫秒。处理完成后,会自动将临时集合的名字更改为你指定的集合名,这个重命名的过程是原子性的。作用域在这些函数内部是不变的。上一篇文章指南聚合下一篇文章指南聚合命令 上一篇文章:MongoDB指南---16、聚合下一篇文章:MongoDB指南---18、聚合命令 MapReduce是聚合工具中的明星,它非常强大、非常灵活。有些问题过于复杂,无法使用聚合框架的查询语言...

    pubdreamcc 评论0 收藏0
  • MongoDBMapReduce使用

    摘要:本文我们就来看看中的使用。结果如下钱钟书宋诗选注谈艺录鲁迅彷徨实现我们也可以利用命令来执行。 玩过Hadoop的小伙伴对MapReduce应该不陌生,MapReduce的强大且灵活,它可以将一个大问题拆分为多个小问题,将各个小问题发送到不同的机器上去处理,所有的机器都完成计算后,再将计算结果合并为一个完整的解决方案,这就是所谓的分布式计算。本文我们就来看看MongoDB中MapRedu...

    Near_Li 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<