2012-06-20 3 views
2

MongoDB에서 MapReduce를 사용하고 있는데, 나는 아직도 이해할 수없는 한 조각을 제외하고는 내 머리를 모두 감쌌다 고 생각합니다 : 얼마나 많은 시간이 reduce 실행됩니까?MapReduce with MongoDB - 실행 횟수를 몇 번 줄입니까?

예를 들어, 각 카테고리에는 "항목"이 있습니다. (6 개) 항목 (5 개) 카테고리 한번 두번 나타나는 카테고리 및 나머지 하나가있다

var i = 0; 
var dummyCategories = [ 
    { categoryId:(++i), categoryName:'Category '+i }, // [0] 1 
    { categoryId:(++i), categoryName:'Category '+i }, // [1] 2 
    { categoryId:(++i), categoryName:'Category '+i }, // [2] 3 
    { categoryId:(++i), categoryName:'Category '+i }, // [3] 4 
    { categoryId:(++i), categoryName:'Category '+i } // [4] 5 
]; 

i=0; 
var dummyItems = [ 
    { itemId: 'TestItem' + (++i), title: 'Test Item ' + i,  // [0] 1 
    category: dummyCategories[0] 
    }, 
    { itemId: 'TestItem' + (++i), title: 'Test Item ' + i,  // [1] 2 
    category: dummyCategories[1] 
    }, 
    { itemId: 'TestItem' + (++i), title: 'Test Item ' + i,  // [2] 3 
    category: dummyCategories[2] 
    }, 
    { itemId: 'TestItem' + (++i), title: 'Test Item ' + i,  // [3] 4 
    category: dummyCategories[3] 
    }, 
    { itemId: 'TestItem' + (++i), title: 'Test Item ' + i,  // [4] 5 
    category: dummyCategories[4] 
    }, 
    { itemId: 'TestItem' + (++i), title: 'Test Item ' + i,  // [5] 6 
    category: dummyCategories[0] 
    } 
]; 

:이 테스트 데이터 (a Node.js를 단위 테스트하기 위해, 자바 스크립트에 기록 된)이다.

map 기능에서 나는 (this.category.categoryId, { items: 1 });을 내고 있습니다. (이것의 전체 버전 아이템 # 외에 값 개체의 다른 메트릭을 포함하지만,이 문제는 동일한 방식 중입니다.)

reduce 함수는 다음과 같다 :

function reduce(key, values) { 
    var totals = { 
    items: 0 
    }; 

    for (var i = 0; i < values.length; i++) { 
    totals.items += values[i].items; 
    } 

    return totals; 
}; 

(출력 구조 . 그것을 할 필요가로

그래서 내가 verbose=true과 맵리 듀스를 통해이를 실행) 등의 감소지도에서 동일하고,이 통계를 보여줍니다

수를 : {출력 : 5, 방출 : 6, 감소 : 1, 입력 : 6}

입력 : 6 개의 의미가 있으며, 6 개의 문서가 있습니다. 방출 : 6은 의미가 있으며, 문서 당 1 개의 카테고리를 방출합니다. 출력 : 5 개가 의미가 있으며 5 개의 카테고리가 있습니다. 하지만 왜 축소 작업은 한 번만 실행 되었습니까?

이제 이것을 작성하면 두 번 이상 나타나는 방출 된 각 키에 대해 감소하는 것처럼 보입니다. 따라서 키가 한 번만 나오면 키를 줄이지 않습니다. 그 맞습니까? 어떤 횟수로 실행이 감소 하는지를 결정하는 수학 공식은 무엇입니까?

감사합니다.

답변

4

예, 키를 한 번만 내 보내면 reduce가 실행되지 않는다는 점은 틀림 없습니다. 저는 수학적 공식이 존재하지 않는다고 생각합니다. 그러면 얼마나 많은 시간이 줄어들 것인지를 알려줄 것입니다.

1

필요한만큼. 큰 데이터 세트의 경우 개별 감속 호출이 노드간에 분할되어 동시에 실행됩니다. 개별 축소 작업 청크의 크기는 구성에 따라 달라질 것입니다. 설명서에 따르면 개별 방출량은 최대 문서 크기의 절반을 넘을 수 없으므로 최대 축소 축소가 최대 문서 크기가 될 것임을 암시한다고 생각합니다.

관련 문제