Latest web development tutorials

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는 크고 복잡한 골재 쿼리를 구축 할 수있다.

지도 기능 및 감소 기능은 자바 스크립트, 맵리 듀스는 매우 유연하고 강력한을 활용하여 구현 될 수있다.