을 줄이기 위해 매우 긴 시간을내어 줄입니다지도는 여기에 내가 뭘하는지의 26 개 기록
mongos> db.campaign_raw_data_459_imp.count()
21800002
mongos> db.campaign_raw_data_459_imp.find({ts:1350585328}).count()
26
mongos> map = function() { emit(this.cookie, 1);}
function() {
emit(this.cookie, 1);
}
mongos> reduce = function (key, values) {return 1;}
function (key, values) {
return 1;
}
mongos>
mongos> db.campaign_raw_data_459_imp.mapReduce(map, reduce, {out: { replace : "garbage"}}, query={ts:1350585328})
//This is hanging and taking forever, over 10 minutes now
는이 컬렉션에서 21m 문서가 있습니다. 그리고 주어진 타임 스탬프 (ts
= 1350585328)에는 26 개의 레코드가 있습니다. 목표는 일치하는 레코드에있는 고유 한 쿠키의 수를 계산하는 것입니다. 그래서 모든 일치 문서 26 개를 찾아야합니다. 그런 다음 쿠키를 기반으로 버킷에 버리고 버킷을 계산합니다. 나는 그것이 쿼리를 기반으로 find를 수행 할 것으로 추정하고, 먼저 FIRST를 수행 한 다음 반환 된 값으로 map/reduce를 수행합니다. 그렇다면 컬렉션의 크기는 전혀 중요하지 않습니다. 눈 깜짝 할 사이에 두 번째 줄에 count()
을 기록했습니다.
이 색인은 ts
과 cookie
이며, 세 개의 복제 세트가있는 세 개의 샤드 설정이 있습니다. 내 컬렉션은 3 개의 노드로 나누어지고 각 조각은 3 명의 멤버가있는 복제 세트입니다.
왜 이렇게 오래 걸리나요? 찌르다 보면, 나는 범위를 (아마도 지난 시간, 아마) 열어서, 단지 26보다 더 많은 일치 된 문서를 가질 것이다.
downvote? 제 질문에 뭐가 잘못 됐나요? – Landon