MongoDB에 MapReduce를 작성했으며 전역 변수를 쓰기/읽기 캐시로 사용하고 싶습니다. 나는지도 기능 인스턴스에서 전역 변수를 가질 수없는 알 - 난 그냥 각 기능의 인스턴스 내에서 전역 변수 를 원한다. 이러한 유형의 기능은 Hadoop의 MapReduce에 존재하므로 MongoDB에있을 것으로 기대하고있었습니다. 그러나 다음은 작동하지 않습니다MongoDB MapReduce :지도 함수 인스턴스 내의 전역 변수?
var cache = {}; // Does not seem to work!
function() {
var hashValue = this.varValue1 + this.varValue2;
if(typeof(cache[hashValue])!= 'undefined') {
// Do nothing, we've processed at least one input record with this hash
} else {
// Process the input record
// Cache the record
cache[hashValue] = '1';
}
}
이 MongoDB를의 맵리 듀스 구현에 사용할 수 없습니다, 또는 나는 (JS에서 경험하지) 자바 스크립트에서 뭔가 잘못하고있는 중이 야? docs 보면
는
OK, 나는 다시 통해 이성을 상실했고 여기 혼란의 지점이있다. 이 기능이지도입니까, 아니면 축소입니까? 당신이 "임시"캐시를 원하는 경우 , 당신은 단순히하거나지도에서 감소하는 임시 몽고의 수집 및 참조를 만들 수 있습니다. 그러나,() 당신이 바로 감소 단계에서이 문제를 해결할 수없는 경우라고하기 어렵다 기능지도()와 감소 모두를 모른 채. –
이것은지도 기능입니다. reduce 함수에서이 작업을 수행 할 수 있지만 그 시점에서 수행해야 할 다른 작업이 있습니다. 즉, 일부 값을 집계합니다. MongoDB에서 캐시 역할을 할 컬렉션을 만들 수도 있습니다. 사실 내가 처음에 그랬습니다. 그러나 이것은 이상적인 솔루션은 아닙니다 (여러지도 기능 인스턴스가있는 경우 문제가 느려지는 경우).이 기능은 Hadoop의 MapReduce에 이미있는 기능이므로 기대할 수도 있습니다. Nickpicker라고 불러도되지만 MongoDB에서 수정해야 할 필요가 있다고 생각합니다. –