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 개의 카테고리가 있습니다. 하지만 왜 축소 작업은 한 번만 실행 되었습니까?
이제 이것을 작성하면 두 번 이상 나타나는 방출 된 각 키에 대해 감소하는 것처럼 보입니다. 따라서 키가 한 번만 나오면 키를 줄이지 않습니다. 그 맞습니까? 어떤 횟수로 실행이 감소 하는지를 결정하는 수학 공식은 무엇입니까?
감사합니다.