2013-08-25 3 views
0

나는 몇 년 전에 this을 보았다. 그 이후로 MongoDB 2.4는 멀티 스레드 Map Reduce를 사용할 수 있으며 (V8 Javascript 엔진으로 전환 한 후) 이전 버전보다 빠르며 속도가 느려진다는 논쟁은 문제가되지 않습니다.지도를 이용한 MongoDB 집계 감소

그러나 Map Reduce 방식이 Aggregation Framework보다 효과적 일 수있는 시나리오를 찾고 있습니다. 실제로, Aggregation Framework는 전혀 작동하지 않지만 Map Reduce가 필요한 결과를 얻을 수있는 시나리오 일 수 있습니다.

덕분에, 존

+0

MR은 동시에 다른 별개의 mrs를 실행할 수 있다는 점에서 다중 스레드입니다. 또한 sinlge MR은 여전히 ​​단일 스레드이며, MR도 여전히 느려질 것입니다. i .. MR은 인덱스를 사용할 수 없습니다. – Sammaye

답변

1

this을 살펴 보자.

집계 FW 결과는 단일 문서에 저장되므로 16 MB으로 제한됩니다. 일부 시나리오에는 적합하지 않을 수 있습니다. MapReduce를 사용하면 새로운 전체 컬렉션을 포함하여 사용할 수있는 몇 가지 출력 유형이 있으므로 공간 제한이 없습니다.

대개 큰 데이터 세트로 작업해야하는 경우 MapReduce가 더 좋습니다 (전체 컬렉션 일 수 있음). 또한, 일부 파이프 라인 명령으로 제한되지 않고 훨씬 더 융통성있게 (자신의 집계 논리를 작성) 제공합니다.

+0

@danidelvalle. 감사합니다. 나는 그것을 설명하기 위해 비교 링크. + 1을 알고 있었다. – Macky

1

현재 집계 프레임 워크 결과는 16MB를 초과 할 수 없습니다. 하지만 필자는 더 중요한 것은 AF가 "본디지"유형의 쿼리를 본질적으로 동적으로 (예 : 사용자가 런타임에 필터를 제공하는 것처럼) 더 적합하다는 것을 알 수 있습니다.

MapReduce는 미리 계획되어있어 훨씬 더 복잡하고 매우 큰 출력을 생성 할 수 있습니다 (새 컬렉션에 output). 사용자가 제어 할 수있는 런타임 입력이 없습니다. 단순히 AF로는 불가능한 (또는 효율적인) 복잡한 객체 조작을 추가 할 수 있습니다. 예를 들어 MapReduce에서 자바 스크립트를 작성하는 것처럼 자식 배열 (또는 배열과 같은 요소)을 조작하는 것은 간단하지만 AF에서는 매우 다루기 쉽고 관리하기 어려울 수 있습니다.

가장 큰 문제는 MapReduce가 자동으로 최신 상태로 유지되지 않으며 완료 시점을 예측하기 어렵다는 것입니다. 다른 NoSQL 옵션과 달리 최신 상태로 유지할 수있는 자체 솔루션을 구현해야합니다. 일반적으로 이는 일종의 타임 스탬프이며, 그림은 here과 같이 점진적인 MapReduce 업데이트입니다. 데이터가 다소 오래되어서 완료하는 데 알 수없는 시간이 걸릴 것이라는 점을 인정해야 할 수 있습니다.

StackOverflow를 둘러 보면 MongoDB의 문제를 해결할 수있는 많은 창의적인 솔루션을 찾을 수 있습니다. 많은 솔루션은 MongoDB의 일반적인 쿼리 엔진의 한계를 해결하기 위해 Aggregation Framework를 사용하며 " 라이브/즉시 "결과. (일부 AF 파이프 라인은 매우 복잡하지만 개발자/팀/제품에 따라 문제가 될 수 있음).