Mongodb MapReduce使用

一: 背景

在利用mongodb的Group进行数据分析的时候,发现 是有限制的,非唯一索引记录数不能大于20000,进而考虑使用MapReduce.

二:MapReduce的命令语法
db.runCommand(
 { mapreduce : 字符串,集合名,
   map : 函数,见下文
   reduce : 函数,见下文
   [, query : 文档,发往map函数前先给过渡文档]
   [, sort : 文档,发往map函数前先给文档排序]
   [, limit : 整数,发往map函数的文档数量上限]
   [, out : 字符串,统计结果保存的集合]
   [, keeptemp: 布尔值,链接关闭时临时结果集合是否保存]
   [, finalize : 函数,将reduce的结果送给这个函数,做最后的处理]
   [, scope : 文档,js代码中要用到的变量]
   [, jsMode : 布尔值,是否减少执行过程中BSON和JS的转换,默认true] //注:false时 BSON-->JS-->map-->BSON-->JS-->reduce-->BSON,可处理非常大的mapreduce,<br>                                    //true时BSON-->js-->map-->reduce-->BSON
   [, verbose : 布尔值,是否产生更加详细的服务器日志,默认true]
 }
);

三:Spring mongodb MapReduce代码实例

实例用来统计某个用户在一定时间端内访问某个系统某个接口的次数,已经花费的总时间。

请参见代码:


点击(此处)折叠或打开

  1. Log.info("=================gmap 日志收集开始===================================");
  2.         try {
  3.             Date date = new Date();
  4.             Date fromDate = GbdDateUtils.getBeginDate(date);
  5.             Date endDate = GbdDateUtils.getEndDate(date);
  6.             Criteria criteria = Criteria.where("date").gte(fromDate).lt(endDate);
  7.             Query query=new Query(criteria);
  8.            
  9.             String mapFunction = "function Map() {emit({\"userId\":this.userId,\"system\":this.system,\"url\":this.url},{count: 1, time: this.time});}";
  10.             String reduceFunction = "function Reduce(key, values) {var reduced = {count:0, time:0};values.forEach(function(val) {reduced.count += val.count;reduced.time += val.time;});return reduced;}";
  11.             MapReduceResults<LogValueObject> mapReduce = mongoTemplate.mapReduce(query, "logs", mapFunction, reduceFunction,new MapReduceOptions().outputCollection("results"), LogValueObject.class);
  12.    
  13.             logger.info(mapReduce.getCounts());
  14.             //清除已有的日志记录
  15.             gmapSystemLogBo.removeCurDateLogs(fromDate);
  16.             
  17.            
  18.             List<GmapSystemLog> systemLogs = new ArrayList<>();
  19.             
  20.             int i=0;
  21.             for(LogValueObject log:mapReduce)
  22.             {
  23.                 
  24.                 GmapSystemLog systemLog = new GmapSystemLog();
  25.                 systemLog.setUserId(log.get_id().getUserId().intValue());
  26.                 systemLog.setUrl(log.get_id().getUrl());
  27.                 systemLog.setSystem(log.get_id().getSystem());
  28.                 systemLog.setCount(log.getValue().getCount().intValue());
  29.                 systemLog.setTime(log.getValue().getTime().intValue());
  30.                 systemLog.setDate(fromDate);
  31.                 systemLog.setCreateDate(date);
  32.                 systemLogs.add(systemLog);
  33.                 i++;
  34.                 if (0 < i && (i % 1000 == 0)) {
  35.                     logger.info("==========保存到数据库===============");
  36.                     gmapSystemLogBo.batchInsertLogs(systemLogs);
  37.                     systemLogs.clear();
  38.                 }
  39.             }
  40.             
  41.         
  42.             if (0 < systemLogs.size()) {
  43.                 logger.info("==========保存到数据库(结束页)===============");
  44.                 gmapSystemLogBo.batchInsertLogs(systemLogs);
  45.             }
  46.             Log.info("=================gmap 日志收集结束===================================");

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-2107068/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28624388/viewspace-2107068/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
系统根据B/S,即所谓的电脑浏览器/网络服务器方式,运用Java技术性,挑选MySQL作为后台系统。系统主要包含对客服聊天管理、字典表管理、公告信息管理、金融工具管理、金融工具收藏管理、金融工具银行卡管理、借款管理、理财产品管理、理财产品收藏管理、理财产品银行卡管理、理财银行卡信息管理、银行卡管理、存款管理、银行卡记录管理、取款管理、转账管理、用户管理、员工管理等功能模块。 文中重点介绍了银行管理的专业技术发展背景和发展状况,随后遵照软件传统式研发流程,最先挑选适用思维和语言软件开发平台,依据需求分析报告模块和设计数据库结构,再根据系统功能模块的设计制作系统功能模块图、流程表和E-R图。随后设计架构以及编写代码,并实现系统能模块。最终基本完成系统检测和功能测试。结果显示,该系统能够实现所需要的作用,工作状态没有明显缺陷。 系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。进入银行卡列表,管理员可以进行查看列表、模糊搜索以及相关维护等操作。用户进入系统可以查看公告和模糊搜索公告信息、也可以进行公告维护操作。理财产品管理页面,管理员可以进行查看列表、模糊搜索以及相关维护等操作。产品类型管理页面,此页面提供给管理员的功能有:新增产品类型,修改产品类型,删除产品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值