programing

MongoDb 2.2, 2.4 및 2.6의 성능 저하

muds 2023. 7. 5. 21:03
반응형

MongoDb 2.2, 2.4 및 2.6의 성능 저하

저는 다음과 같은 논의를 발견했습니다.MongoDB: 끔찍한 MapReduce Performance.기본적으로 Mongo의 MR 쿼리는 싱글스레드로 실시간으로 진행하면 안되기 때문에 피하라고 되어있습니다. 2년이 지났는데, 그 이후로 무엇이 바뀌었는지 궁금합니다.이제 MongoDb 2.2가 있습니다.MR은 이제 멀티 스레드가 되었다고 들었습니다.웹 애플리케이션의 빈번한 http 요청을 위한 데이터 가져오기와 같은 실시간 요청에 대한 MR 사용에 대한 아이디어를 공유하십시오.인덱스를 효과적으로 사용할 수 있습니까?

다음은 MongoDB의 Map/Reduce 기능의 현재 상태입니다.

Map/Reduce에 대한 대부분의 성능 제한은 MongoDB 버전 2.2에 남아 있습니다.Map/Reduce 엔진은 여전히 모든 레코드를 BSON에서 JSON으로 변환해야 하며, 실제 계산은 내장된 JavaScript 엔진을 사용하여 수행되며(느립니다), 단일 글로벌 JavaScript 잠금이 여전히 존재하므로 한 번에 하나의 JavaScript 스레드만 실행할 수 있습니다.

샤드 클러스터에 대한 매핑/축소가 몇 가지 점진적으로 개선되었습니다.가장 주목할 만한 것은 최종 Reduct(축소) 작업이 이제 여러 샤드에 분산되고 출력도 병렬로 샤드된다는 것입니다.

MongoDB 버전 2.2의 실시간 집계에는 Map/Reduce를 권장하지 않습니다.

MongoDB 2.2부터 새로운 Aggregation Framework가 출시되었습니다.이것은 C++로 작성되어 MongoDB 프레임워크에 긴밀하게 통합된 집계 작업의 새로운 구현입니다.

대부분의 Map/Reduce 작업은 Aggregation Framework를 사용하도록 다시 작성할 수 있습니다.일반적으로 더 빨리 실행됩니다(20배 더 빠른 속도 향상).Map/Reduce는 버전 2.2)에서 일반적으로 사용되며, 기존 쿼리 엔진을 최대한 활용하며 여러 Aggregation 명령을 병렬로 실행할 수 있습니다.

실시간 집계 요구사항이 있는 경우 가장 먼저 Aggregation Framework를 사용합니다.집계 프레임워크에 대한 자세한 내용은 다음 링크를 참조하십시오.

MongoDB 버전 2.4에서는 Map/Reduce가 상당히 개선되었습니다.SpiderMonkey JavaScript 엔진은 V8 JavaScript 엔진으로 대체되었으며 더 이상 글로벌 JavaScript 잠금이 없으므로 여러 Map/Reduce 스레드를 동시에 실행할 수 있습니다.

Map/Reduce 엔진은 다음과 같은 두 가지 주요 이유로 인해 여전히 집계 프레임워크보다 상당히 느립니다.

  • 통합 프레임워크가 컴파일된 C++ 코드를 실행하는 동안 JavaScript 엔진이 해석됩니다.

  • JavaScript 엔진은 여전히 검사 중인 모든 문서를 BSON에서 JSON으로 변환해야 합니다. 출력을 컬렉션에 저장할 경우 결과 집합을 JSON에서 BSON으로 다시 변환해야 합니다.

2.4와 2.6 사이에는 지도/축소에 큰 변화가 없습니다.

MongoDB 버전 2.4 또는 2.6에서 실시간 집계를 위해 Map/Reduce를 사용하는 것은 권장하지 않습니다.

Map/Reduce가 정말로 필요하다면 Hadoop Adapter도 볼 수 있습니다.자세한 내용은 다음과 같습니다.

언급URL : https://stackoverflow.com/questions/12678631/map-reduce-performance-in-mongodb-2-2-2-4-and-2-6

반응형