이번 글에서는 MongoDB Map-Reduce 방식에 대해 알아보겠습니다.👀
Map-Reduce란?
Map-Reduce는 대량의 데이터를 병렬로 처리하고 요약하는 데 사용하는 데이터 처리 방식입니다.
MongoDB에서 Map-Reduce는 데이터를 그룹화하거나 집계하는데 활용되며, JavaScript 함수를 사용해 데이터를 변환(map)하고, 결과를 결합(reduce)하여 최종 결과를 생성합니다.
Map-Reduce의 기본 구조
Map-Reduce는 크게 두 단계로 구성됩니다.
- Map 단계
데이터를 특정 키와 값으로 매핑합니다. 각 문서가 처리되어 키-값 쌍이 생성됩니다. - Reduce 단계
Map 단계에서 생성된 데이터를 키별로 그룹화하고 요약 작업을 수행합니다.
간단한 Map-Reduce 예제
아래 예제는 MongoDB에서 Map-Reduce를 사용해 고객별 총 구매 금액을 계산하는 코드입니다.
db.orders.mapReduce(
function () {
// Map 단계: 고객 ID와 금액을 매핑
emit(this.customerId, this.amount);
},
function (key, values) {
// Reduce 단계: 금액을 합산
return Array.sum(values);
},
{
out: "total_sales", // 결과를 저장할 컬렉션
}
);
// 결과 조회
db.total_sales.find();
- `emit(key, value)`: 각 문서에서 추출한 데이터를 키-값 쌍으로 출력합니다.
- `Array.sum(values)`: Reduce 단계에서 값들의 합계를 계산합니다.
Map-Reduce 특징
- 유연성
JavaScript 함수를 사용해 복잡한 연산을 구현할 수 있습니다. - 확장성
대량의 데이터를 처리할 수 있으며, 대규모 클러스터에서도 효과적으로 동작합니다.
Map-Reduce의 장점과 단점
장점
- 복잡한 데이터 변환 및 처리 로직을 구현할 수 있습니다.
- 병렬 처리를 통해 대용량 데이터에 대한 분석이 가능합니다.
단점
- 성능: Aggregation Framework에 비해 느릴 수 있습니다. 특히, 작은 데이터셋에서는 비효율적입니다.
- JavaScript 엔진 의존: JavaScript로 작성된 함수를 실행해야 하므로 서버 리소스가 더 많이 소모됩니다.
- 단순 작업에는 과도한 사용: Aggregation Pipeline으로 충분히 처리 가능한 작업에 비해 복잡도가 높습니다.
Map-Reduce와 Aggregation Framework 비교
| 특징 | Aggregation Framework | Map-Reduce |
| 사용 편의성 | 직관적인 단계 기반 처리 | JavaScript 함수 필요 |
| 성능 | 빠르고 효율적 | 상대적으로 느림 |
| 복잡한 연산 | 제한적 | JavaScript로 자유롭게 구현 가능 |
| 병렬 처리 | 기본 지원 | 병렬 처리 가능 |
| 사용 사례 | 필터링, 정렬, 간단한 집계 | 복잡한 데이터 변환 및 대용량 데이터 분석 |
Map-Reduce가 적합한 사용 사례
- 복잡한 데이터 처리
단일 Pipeline 단계로 처리하기 어려운 복잡한 연산이 필요한 경우. - 비정형 데이터 변환
다양한 형식의 데이터를 자유롭게 변환해야 할 때. - 대용량 데이터 분석
분산 환경에서 대량의 데이터를 분석해야 할 때.
Map-Reduce를 대체할 수 있는 방법
최근 MongoDB에서는 성능 및 사용 편의성을 이유로 Aggregation Framework 사용을 권장하고 있습니다.
하지만 여전히 Aggregation Framework로 처리하기 힘든 복잡한 작업에서는 Map-Reduce를 활용할 수 있습니다.
💡 Map-Reduce는 Aggregation Framework보다 유연하지만, 더 느리고 복잡한 작업에 적합합니다.
복잡한 데이터 처리 로직이 필요하지 않다면 Aggregation Framework를 우선적으로 고려하는 것이 좋습니다.
'Data > MongoDB' 카테고리의 다른 글
| MongoDB Compound Index 제대로 이해하고 성능까지 비교해보자. (0) | 2025.06.21 |
|---|---|
| [MongoDB] Single Purpose Aggregation: 간단한 집계 작업 (0) | 2024.12.31 |
| [MongoDB]Aggregation Framework: 효율적인 데이터 처리와 분석 (1) | 2024.12.27 |
| MongoDB 인덱스와 인덱싱 전략 이해하기 (3) | 2024.10.31 |
| [MongoDB] Spring Boot에서 임베디드 MongoDB를 사용하는 방법 (0) | 2024.06.30 |