Mongodb MapReduce使用
一: 背景
在利用mongodb的Group進行資料分析的時候,發現是有限制的,非唯一索引記錄數不能大於20000,進而考慮使用MapReduce.
二:MapReduce的命令語法
三:Spring 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程式碼例項
例項用來統計某個使用者在一定時間端內訪問某個系統某個介面的次數,已經花費的總時間。
請參見程式碼:
點選(此處)摺疊或開啟
-
Log.info("=================gmap 日誌收集開始===================================");
-
try {
-
Date date = new Date();
-
Date fromDate = GbdDateUtils.getBeginDate(date);
-
Date endDate = GbdDateUtils.getEndDate(date);
-
Criteria criteria = Criteria.where("date").gte(fromDate).lt(endDate);
-
Query query=new Query(criteria);
-
-
String mapFunction = "function Map() {emit({\"userId\":this.userId,\"system\":this.system,\"url\":this.url},{count: 1, time: this.time});}";
-
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;}";
-
MapReduceResults<LogValueObject> mapReduce = mongoTemplate.mapReduce(query, "logs", mapFunction, reduceFunction,new MapReduceOptions().outputCollection("results"), LogValueObject.class);
-
-
logger.info(mapReduce.getCounts());
-
//清除已有的日誌記錄
-
gmapSystemLogBo.removeCurDateLogs(fromDate);
-
-
-
List<GmapSystemLog> systemLogs = new ArrayList<>();
-
-
int i=0;
-
for(LogValueObject log:mapReduce)
-
{
-
-
GmapSystemLog systemLog = new GmapSystemLog();
-
systemLog.setUserId(log.get_id().getUserId().intValue());
-
systemLog.setUrl(log.get_id().getUrl());
-
systemLog.setSystem(log.get_id().getSystem());
-
systemLog.setCount(log.getValue().getCount().intValue());
-
systemLog.setTime(log.getValue().getTime().intValue());
-
systemLog.setDate(fromDate);
-
systemLog.setCreateDate(date);
-
systemLogs.add(systemLog);
-
i++;
-
if (0 < i && (i % 1000 == 0)) {
-
logger.info("==========儲存到資料庫===============");
-
gmapSystemLogBo.batchInsertLogs(systemLogs);
-
systemLogs.clear();
-
}
-
}
-
-
-
if (0 < systemLogs.size()) {
-
logger.info("==========儲存到資料庫(結束頁)===============");
-
gmapSystemLogBo.batchInsertLogs(systemLogs);
-
}
- Log.info("=================gmap 日誌收集結束===================================");
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2107068/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用hadoop mapreduce分析mongodb資料HadoopMongoDB
- 快速掌握mongoDB(二)——聚合管道和MapReduceMongoDB
- MapReduce框架-Join的使用框架
- 使用MapReduce執行WordCount案例
- MongoDB 使用MongoDB
- Mongodb使用MongoDB
- [Hive]呼叫本地模式,避免使用MapReduceHive模式
- mongodb索引使用MongoDB索引
- MongoDB的使用MongoDB
- MongoDB使用初探MongoDB
- 使用Python編寫MapReduce作業Python
- mapreduce 程式設計SequenceFile類的使用程式設計
- 如何在MapReduce中使用SequenceFile資料格式?
- 如何在MapReduce中使用Avro資料格式?VR
- 使用MongoDB 應用MongoDB
- 使用mongoskin操作MongoDBMongoDB
- MapReduce初探
- MapReduce理解
- 使用Go語言實現簡單MapReduce框架Go框架
- mongodb使用者與角色使用MongoDB
- 在 hyperf 中使用 MongoDBMongoDB
- MongoDB和Redis的使用MongoDBRedis
- Mongodb總結4-Spring環境使用MongodbMongoDBSpring
- MapReduce: 提高MapReduce效能的七點建議[譯]
- MapReduce 簡介
- MapReduce之topN
- MapReduce InputFormat——DBInputFormatORM
- Lab 1: MapReduce
- 使用IDEA+Maven實現MapReduce的WordCount功能IdeaMaven
- mongoDB使用詳解(在node中使用)MongoDB
- MongoDB 入門教程系列之三:使用 Restful API 操作 MongoDBMongoDBRESTAPI
- 【MongoDB學習筆記】-使用 MongoDB 進行 CRUD 操作(上)MongoDB筆記
- 【MongoDB學習筆記】-使用 MongoDB 進行 CRUD 操作(下)MongoDB筆記
- mongodb的安裝以及使用MongoDB
- MongoDB 6.0.3 使用者管理MongoDB
- Mongodb 也有collation 與 如何使用MongoDB
- MongoDB之使用者管理MongoDB
- Java 中 MongoDB 使用指南JavaMongoDB