MongoDB를지도 감소
맵 감소는 단순히 워크 (데이터) 분해 (MAP)의 부피에서 수행 한 후 최종 결과 (REDUCE)로 결과를 병합하는 것을 의미하는 계산 모델이다.
MongoDB의지도를 축소-A는 대규모 데이터 분석을위한 매우 유연도 매우 실용적이다 제공한다.
맵리 듀스 명령
다음은 맵리 듀스의 기본 구문입니다
>db.collection.mapReduce( function() {emit(key,value);}, //map 函数 function(key,values) {return reduceFunction}, //reduce 函数 { out: collection, query: document, sort: document, limit: number } )
두 기능은지도 및 기능을 감소 달성 MapReduce의 기능을 이용하여, 맵 함수 호출 (키 값)을 방출하는 모든 레코드의 집합을 트래버스하고, 키의 값은 프로세싱을위한 감소 함수로 전달된다.
지도 기능은 쌍을 반환합니다 (키, 값)를 방출 호출해야합니다.
매개 변수 설명 :
- 지도 : 매핑 기능 (함수 매개 변수를 줄이기로 키 시퀀스를 생성).
- 통계 함수를감소 작업이 단일 값 값으로, 즉, 키 - 값으로 숫자 배열 기능 키 - 값을 감소시키는 것이다..
- 설정을 저장 통계결과에서 (자동으로 클라이언트가 연결 한 후 삭제 임시 컬렉션의 사용을 지정하지 마십시오).
- 쿼리 필터 조건 만지도 함수 호출 될 문서의 조건을 만족한다.(Query.limit는 일종의 혼합 할 수 있습니다)
- 정렬 및 정렬 정렬 매개 변수 (또한지도 기능에 전송 된 전자 문서가 정렬) 결합 제한, 당신은 그룹화 메커니즘을 최적화 할 수 있습니다
- 지도 함수의 상한에 송신 문서의 수를제한 (제한 없음, 거의 사용 단독 정렬이없는 경우)
사용 맵리 듀스
사용자의 문서, 문서를 저장하는 다음 문서 구조를 고려하고, 상기 사용자 _ 이름 문서 상태 필드를 저장한다 :
>db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"active" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "mark", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"disabled" }) WriteResult({ "nInserted" : 1 }) >db.posts.insert({ "post_text": "本教程,最全的技术文档。", "user_name": "w3big", "status":"active" }) WriteResult({ "nInserted" : 1 })
각 사용자의 게시물에 대해 계산 _ 이름 패킷 기준 : 이제 우리는 ( "활성"상태) 게시 된 기사를 선택하는 맵리 듀스 기능을 설정 한 게시물을 사용합니다 :
>db.posts.mapReduce( function() { emit(this.user_name,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } )
맵리 듀스 위의 출력은 다음과 같습니다
{ "result" : "post_total", "timeMillis" : 23, "counts" : { "input" : 5, "emit" : 5, "reduce" : 1, "output" : 2 }, "ok" : 1 }
결과는 총 4 쿼리 조건과 일치하는 것으로 나타났다 (상태 "활성") 문서는 문서의지도 기능을 네 개의 키를 생성하고, 두 개의 그룹으로 분할 키를 감소시키는 동일한 기능을 사용한다.
특정 매개 변수 :
- 결과 : 콜렉션 이름의 결과를 저장이 삭제되었습니다 위로 MapReduce에 자동 접속 해제 임시 집합이다.
- timeMillis는 : 실행은 밀리 초 단위로 시간이 걸립니다
- 입력 : 문서의 조건 수는지도 함수로 보내진다
- 방출 :지도 함수 시대라고 방출하는 즉, 모든 데이터 수집 총량
- OUPUT : 컬렉션의 문서 결과 수 (카운트가 디버깅을 위해 많은 도움이 될 것입니다)
- 확인 : 성공, 성공 (1)
- 메시지 : 실패하면, 실패 이유가있을 수 있지만, 경험, 그 이유는 유용하지 모호
의 조회 결과 맵리 듀스를 보려면 찾기 연산자를 사용 :
>db.posts.mapReduce( function() { emit(this.user_name,1); }, function(key, values) {return Array.sum(values)}, { query:{status:"active"}, out:"post_total" } ).find()
위의 쿼리의 결과는 출판이 기사가 톰 두 사용자가 있고, 마크 다음과 같습니다 :
{ "_id" : "mark", "value" : 4 } { "_id" : "w3big", "value" : 1 }
유사한 방식으로,이 MapReduce는 크고 복잡한 골재 쿼리를 구축 할 수있다.
지도 기능 및 감소 기능은 자바 스크립트, 맵리 듀스는 매우 유연하고 강력한을 활용하여 구현 될 수있다.