본문 바로가기
Back Side/DBMS > MongoDB

[MongoDB] 대량의 데이터 처리 프로그래밍 모델 (1) 맵리듀스 map-reduce

by developerBeluga 2022. 11. 8.
728x90
반응형

 

 

출처: https://medium.com/hackernoon/bro-do-you-even-map-mapreduce-demystified-ea7f11b0e238

 

 

맵리듀스(map-reduce)란

맵리듀스는 많은 컴퓨터에서 대량의 데이터를 처리하기 위한 프로그래밍 모델로, 구글에 의해 널리 알려졌다. 몽고DB와 카우치 DB를 포함한 일부 NoSQL 데이터 저장소는 제한된 형태의 맵리듀스를 지원한다. 이 매커니즘은 많은 문서를 대상으로 읽기 전용 질의를 수행할 때 사용한다.

'데이터 중심 애플리케이션 설계'을 읽던 위와 같은 구절을 만났다.

MongoDB를 개발하는 내내 쓰면서 아직도 내가 모르는 기능이 있다는게 신기하다.

 

맵리듀스는 여러 함수형 프로그래밍 언어에 있는 map과 reduce 함수를 기반으로 한다.

map() 함수는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환한다.

reduce() 함수는 배열의 각 요소에 대해 주어진 리듀서 함수를 실행하고, 하나의 결과값을 반환한다.

이 두개를 합쳐 놓은 것이 맵리듀스이기 때문에 빠르게 병렬로 분산처리를 수행할 수 있다.

 

 

과정

map과 reduce 함수를 사용한다는 것은 알았다.

하지만 아직도 어떻게 맵리듀스가 동작하는지 쉽게 이해가 되지 않는다.

 

출처: https://www.mongodb.com/docs/manual/core/map-reduce/

이 이미지는 MongoDB 공식 문서에서 맵리듀스를 설명하며 이해하기 쉽게 만들어 놓은 참고자료다.

동작 방식을 보면 아래 순서와 같다.

0. query를 통해 status가 A인 데이터만 필터링한다. - 옵션

1. map 함수를 통해 key가 cust_id, value가 amount가 나오도록 추출한다.

2. 추출한 데이터를 reduce를 이용해서 각 필드마다 요구사항에 맞춰 데이터를 정제한다.

 

즉, 위의 맵리듀스는 (상태가 A인) 특정 cust마다 총 값을 구하는 예제였습니다.

이처럼 대량의 데이터 중에서 특정 기준을 가지고 map과 reduce 함수를 쓰고 싶을 때 사용하면 좋다.

 

 

 

하지만 MongoDB에서는..!

MongoDB에서도 맵리듀스를 지원해주고 있다.

하지만 MongoDB에서는 맵리듀스보다는 집계 파이프라인 즉, Aggregate를 권장하고 있다.

다음 포스팅에서는 Aggregate에 대해서 알아보도록 하자.

 

 

 

 

 

 

728x90
반응형

댓글