ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MapReduce
    Database/MongoDB 2023. 2. 2. 22:30

    대용량 데이터의 분산처리를 위해 개발된 기술로 맵 형식으로 데이터를 산출하는 기능입니다.

    몽고디비의 맵리듀스는 자바스크립트 언어의 문법을 사용하여 구현하며, 분산처리는 단일프로세스 내의 멀티 쓰레드 방식으로 동작합니다. ( SpiderMonkey Engine )

     

    예시

    1. query 를 통해 가져올 데이터의 조건을 지정
    2. out 을 통해 출력될 collection(order_totals) 을 생성 및 출력 저장
    3. 첫번째 Parameter 의 JS Function 을 통해 collection 을 map 형식으로 치환
    4. 두번째 Parameter 의 JS Function 을 통해 합산 처리

     

    인자

    > db.collection.mapReduce(
        <map>
        ,<reduce>
        {
            out: <collection>
            ,query:<document>
            ,sort:<document>
            ,limit:<number>
            ,finalize:<function>
            ,scope:<document>
            ,jsMode:<boolean>
            ,verbose:<boolean>
        }
    )
    Option Description
    out 출력 결과를 표기할 곳을 지정
    query collection 의 검색조건 (find와 동일하게 구성가능)
    sort 인덱스를 이용한 정렬에 활용
    limit document 수량 제한
    finalize reduce 이후 동작 지정
    scope Global 변수 설정 (map, reduce 의 JS Function에서 활용)
    jsMode 메모리에 데이터를 적재하여 도출 속도의 가속을 지정 (default : false, document max : 500000 )
    verbose 단계별 처리과정 및 소요시간에 대한 정보 명시 여부 (default : true)

     

    특징

    C/C++ 에서 Map을 멀티쓰레드에서 활용할때, Mutex 를 통한 Lock 을 하는 것과 마찬가지로 Mapreduce 을 통한 처리를 하는 중은 Lock 이 걸립니다.

    만약 Mapreduce 를 통한 처리량이 엄청 클 경우 처리에 시간되는 긴 시간동안 Lock 이 걸립니다.

    MongoDB 에서는 nonAtomic : true 를 통해 분기별 Lock 해제를 설정해야 긴 처리시 Lock 에 물려서 지연되지 않습니다. nonAtomic 의 기본값은 false 입니다.

    기본적으로 mapreduce 에서 Lock 이 걸리는 케이스

    1. Document 의 읽기 동작시 Read Lock 이 설정되며, 100개 단위로 잠금을 해제합니다.
    2. 임시 Collection 에 삽입하면 Write Lock 이 설정됩니다.
    3. 출력 Collection 이 존재하지 않으면, 출력 콜렉션 작성에 Write Lock 이 사용됩니다.
    4. 출력 Collection 이 존재하면, 출력과 연관된 기능 (merge, replace, reduce)이 Write Lock 이 설정되며 모든 인스턴스 전역에 작업을 차단합니다.

    'Database > MongoDB' 카테고리의 다른 글

    View  (0) 2023.02.02
    Index  (1) 2023.02.02
    Operator & Function  (0) 2023.02.01
    Aggregate  (0) 2023.02.01
    기본 Query  (0) 2023.02.01
Designed by Tistory.