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를 사용합니다.집계 프레임워크에 대한 자세한 내용은 다음 링크를 참조하십시오.
- http://www.10gen.com/presentations/mongonyc-2012/new-aggregation-framework
- http://docs.mongodb.org/manual/reference/aggregation/
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도 볼 수 있습니다.자세한 내용은 다음과 같습니다.
- http://www.10gen.com/presentations/webinar/mongodb-hadoop-taming-elephant-room
- http://api.mongodb.org/hadoop/MongoDB%2BHadoop+Connector.html
- http://www.mongodb.org/display/DOCS/Hadoop+Quick+Start
언급URL : https://stackoverflow.com/questions/12678631/map-reduce-performance-in-mongodb-2-2-2-4-and-2-6
'programing' 카테고리의 다른 글
Float/Firebase 앱에 아직 구성되지 않은 앱이 표시됩니다. (0) | 2023.07.05 |
---|---|
스프링 부트에서 UTF-8 문자 인코딩을 설정하는 방법은 무엇입니까? (0) | 2023.07.05 |
MongoDB: 대량 삽입(Bulk.insert) 대 다중 삽입(삽입([...])) (0) | 2023.07.05 |
두 데이터 프레임에 서로 다른 열 집합이 있는 경우 행(rbind)으로 결합 (0) | 2023.07.05 |
.SD는 R의 data.table에서 무엇을 나타냅니까? (0) | 2023.07.05 |