美文网首页软件
初试mongodb mapreduce

初试mongodb mapreduce

作者: menglj | 来源:发表于2017-12-06 23:19 被阅读3次

初次试用了一下mongodb的mapreduce方法,总结了一些粗浅的认识,记录如下:

下面例子中,document保存的是每次http请求的信息,time域为请求的时间,method域为请求的方法(比如GET,POST)。

map方法:

  • 遍历collection中的所有document,按照map方法中定义的规则,对这些document进行分组。
//这里把time域中相同小时的document分到一组
//this为遍历时的某个具体的document
var key = this.time.getHours();
  • 根据需求,抽取value值,作为reduce方法的输入。
var value = 0;
//如果method域的内容为GET时,设置value为1,否则为0。
//这里的value是简单的数值类型,也可能是稍微附在的对象。
if(this.method=='GET'){
    value = 1;
}
  • emit key value,供reduce处理。
emit(key, value);

reduce方法:

相同的key值会传给同一个reduce方法来处理,reduce有2个输入参数:key和values。其中:values为map方法emit出的相同key值对应的value的集合。下面的例子把所有的value值做一个加和处理

reduce = function(key, values){
    var sum = 0;
    values.forEach(function(value){
        sum += value;
    });
    return sum;
}

上面的的mapreduce就能够计算出collection中,一天中每小时时间段内GET请求的次数。

具体java代码如下:

        String map = String.format("function() {\n" +
                        " var key = this.time.getHours();\n" +
                        " var value = 0;\n" +
                        " if(this.method==\'GET\'){value=1;}\n" +
                        " emit(key, value);\n" +
                "}";
        String reduce = "function(key, values){\n" +
                " var sum = 0;\n" +
                " values.forEach(function(value){\n" +
                "    sum += value;\n" +
                "   });\n" +
                " return sum;\n" +
                "}";

        MapReduceResults<ValueObject> results = mongoOperations.mapReduce(
                PlatformAccessLog.COLLECTION_NAME, map, reduce, ValueObject.class);

参考文档

  1. 9.8. Map-Reduce Operations

相关文章

  • 初试mongodb mapreduce

    初次试用了一下mongodb的mapreduce方法,总结了一些粗浅的认识,记录如下: 下面例子中,documen...

  • MongoDB mapreduce 使用

    MapReduce介绍 MongoDB 中的MapReduce 使用JavaScript来作为查询语言,因此能表达...

  • mongodb mapreduce

    主要是两个方法,map和reduce方法。一个简单的示例

  • MongoDB MapReduce

    MapReduce 使用JavaScript作为“查询语言”。因此它能够表达任意复杂的逻辑。然而,这种强大是有代价...

  • mapReduce 映射,归纳

    维基:zh.wikipedia.org/wiki/MapReduce mongodb:db.collection....

  • mongodb3 聚合之MapReduce

    mongodb3的MapReduce命令 如此庞大的命令,看似吓人。其实只有mapFunction和reduceF...

  • MongoDB基础之分组聚合函数讲解

    MongoDB 中主要有三个函数: group:分组统计 aggregate:简单聚合 mapReduce:强大统...

  • Mongodb高级篇-MapReduce

    Mongodb支持使用javascript编写mapreduce函数来做分布式数据处理。然而,这种强大是有代价的:...

  • MongoDB MapReduce 聚合操作

    MongoDB的聚合操作主要是对数据的批量处理。一般都是将记录按条件分组之后进行一系列求最大值,最小值,平均值的简...

  • MongoDB aggregate,mapreduce,聚合命令

    在mongodb中想要完成聚合操作,可以使用以下三种方式;但是很多时候这三个真是傻傻分不清楚,本文是来总结以下三种...

网友评论

    本文标题:初试mongodb mapreduce

    本文链接:https://www.haomeiwen.com/subject/iukrixtx.html