주요 내용

복잡한 데이터 처리를 위해 MongoDB에서 활용되던 MapReduce는 뛰어난 효율성과 성능을 자랑하는 집계 파이프라인으로 대체되었습니다.

MongoDB에서 MapReduce를 활용하려면 JavaScript를 통해 개별 매핑 및 축소 연산을 정의해야 하는 반면, 집계 파이프라인은 데이터 처리를 위해 MongoDB에 내재된 사전 정의된 연산자를 사용합니다.

MongoDB는 성능 최적화를 위해 집계 파이프라인을 활용할 것을 제안하지만, MapReduce는 더 큰 범용성을 제공하며 Hadoop과 같은 분산 파일 시스템과 호환됩니다.

복잡한 데이터 처리 작업을 처리하기 위한 두 가지 주요 접근 방식, 즉 MapReduce와 집계 파이프라인을 제공하는 MongoDB. 후자의 경우 향상된 성능으로 인해 인기를 얻고 있지만, 친숙함과 사용 편의성을 선호 요인으로 꼽으며 MapReduce를 선호하는 개발자가 여전히 남아 있습니다.

본질적으로 이러한 고급 검색 기술은 모두 동일한 목표를 달성하기 때문에 이 중 하나를 선택하는 것이 좋습니다. 하지만 무엇이 이들을 구별하고 다르게 작동하게 만들까요? 또한 최적의 결과를 얻으려면 어떤 방법을 선택해야 할까요?

MongoDB에서 MapReduce가 작동하는 방식

매핑과 축소.

MongoDB의 컨텍스트 내에서 MapReduce를 활용하려면 매핑과 축소 프로세스 모두에 대해 별도의 JavaScript 함수를 지정해야 하며, 이는 이후 시스템에 내재된 사용자 정의된 MapReduce 쿼리의 일부로 삽입됩니다.

map 함수는 일반적으로 지정된 매핑 작업을 통해 키-값 쌍으로 구성된 수신 데이터를 가져와서 그에 따라 처리합니다. 그 후, reduce 함수는 각 데이터 클러스터 내의 개별 값 집합에 대해 사용자 정의된 계산을 수행하고 그 결과를 데이터베이스에 저장되는 별도의 저장소에 누적합니다.

MongoDB에서 집계 파이프라인이 작동하는 방식

MongoDB의 집계 파이프라인은 데이터베이스 환경 내에서 복잡한 계산과 데이터 조작을 처리하기 위해 MapReduce에 비해 더 정교한 솔루션을 제공합니다. 두 가지 방법 모두 이러한 작업을 가능하게 하지만, 집계는 MapReduce에서 요구되는 쿼리 효율성에 부정적인 영향을 미칠 수 있는 특수 JavaScript 함수를 생성할 필요가 없습니다.

데이터 조작을 위해 외부 라이브러리에 의존하는 대신, AI 파이프라인은 네이티브 MongoDB 연산자를 활용하여 그룹화 및 계산과 같은 작업을 수행합니다. 또한 시스템은 각 쿼리의 결과를 실시간으로 집계하여 최종 결과물을 보다 유연하게 구조화할 수 있습니다.

맵리듀스와 집계 간의 쿼리 차이점

맵리듀스와 집계 기법을 사용하여 다양한 제품 범주에 걸친 품목 매출의 총합을 결정하기 위해 제품 범주는 고유 식별자 또는 ‘키’ 역할을 하며, 개별 품목 매출 수치는 해당 범주에 대한 관련 ‘값’을 구성합니다.

이 글도 확인해 보세요:  녹 매크로: 매크로를 사용하여 코드를 개선하는 방법

다양한 제품 및 여러 지역의 판매 수치에 대한 정보가 포함된 샘플 데이터 집합이 주어지면 다음과 같이 표시될 수 있습니다: “`yaml 제품 | 지역 | 판매량(단위) —————————————– A | North | 1000 B | South | 2000 C | 동쪽 | 3000 D | 서쪽 | 4000 E | 북쪽 | 5000 F | 남쪽 | 6000 G | 동쪽 | 7000 H | 서쪽 | 8000 I | 북쪽 | 9000 J | 남쪽 | 10000 K | 동쪽

쿼리 및 문제 해결 기법의 불일치를 식별하기 위해 주어진 상황을 해결하기 위해 MapReduce 프레임워크와 집계 파이프라인을 활용해야 합니다.

맵리듀스 방법

주어진 문제 시나리오에 따라, 파이썬을 기반으로 맵리듀스 쿼리는 다음과 같은 형태를 취합니다:

 import pymongo

client = pymongo.MongoClient(
    "mongodb://localhost/"
)

db = client.my_database

sales = db["sales"]

map_function = """
function() {
    emit(this.Section, this.Sold);
}
"""

reduce_function = """
function(key, values) {
    return Array.sum(values);
}
"""

result = db.command(
    "mapReduce",
    "sales",
    map=map_function,
    reduce=reduce_function,
    out="section_totals"
)

doc = [doc for doc in db.section_totals.find()]
print(doc)

이 방법론으로 제공된 데이터 세트를 처리하면 결과 출력은 다음 예제와 유사한 형식으로 나타납니다.

 [{
  '_id': 'Adidas',
  'value': 9.0
},{
  '_id': 'Nike',
  'value': 12.0
}]

자세히 살펴보면 이 스크립트 내의 Map 및 Reduce 프로세서가 실제로 Python 변수로 캡슐화된 JavaScript 함수임을 확인할 수 있습니다. 이러한 변수는 이후 섹션\_totals로 알려진 전용 출력 컬렉션을 지정하는 MapReduce 쿼리에 전달됩니다.

집계 파이프라인 사용

간단한 스크립팅 대신 집계 파이프라인을 활용하면 보다 간소화되고 효율적인 데이터 조작 방법이 제공됩니다. 기존 방법으로 얻은 결과와 집계 파이프라인 접근 방식을 사용하여 얻은 결과를 비교하면 그 대표적인 예를 확인할 수 있습니다.

 import pymongo
client = pymongo.MongoClient("mongodb://localhost/")
db = client.funmi
sales = db["sales"]

pipeline = [
    {
        "$group": {
            "_id": "$Section",
            "totalSold": { "$sum": "$Sold" }
        }
    },
    {
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$totalSold"
        }
    }
]

result = list(sales.aggregate(pipeline))
print(result)

이 집계 작업을 실행하면 MapReduce 방법론을 통해 얻은 결과와 매우 유사한 결과를 얻을 수 있을 것으로 예상됩니다:

 [{
  'Section': 'Nike',
  'TotalSold': 12
},{
  'Section': 'Adidas',
  'TotalSold': 9
}]

쿼리 성능 및 속도

MongoDB는 효율성 및 성능 향상으로 인해 기존 MapReduce보다 고급 집계 파이프라인을 활용할 것을 제안하고 있습니다.

이전 실험에서는 특정 쿼리를 실행하여 특정 어설션이 참임을 입증하려고 시도했습니다. 12기가바이트의 메모리가 장착된 컴퓨터 시스템에서 이러한 쿼리를 동시에 수행했을 때, 집계 파이프라인이 더 빠른 속도로 작동하는 것처럼 보였으며 완료하는 데 평균 0.014초가 걸렸습니다. 반면, 동일한 시스템에서 MapReduce 쿼리를 실행하는 데는 약 0.058초가 소요되었습니다.

이 글도 확인해 보세요:  Python을 사용하여 할 일 목록 프로그램 만들기

제시된 메트릭이 PostgreSQL과 MongoDB의 성능에 대한 확실한 결론을 내리기에는 충분하지 않을 수 있지만, 특정 시나리오에서 자사 기술이 잠재적인 이점을 제공한다는 MongoDB의 입장에 부합하는 결과입니다. 특히 소규모 데이터 세트를 다룰 때는 관찰된 차이를 무시할 수 있다고 생각할 수 있지만, 장기간에 걸쳐 방대한 양의 데이터를 처리할 경우 이러한 차이는 상당히 누적될 수 있습니다.

MapReduce의 장단점

MapReduce의 장단점을 제대로 파악하기 위해서는 데이터 처리 기능에 대한 종합적인 분석이 필요합니다.

장점

별도의 맵과 축소 함수를 작성할 수 있는 기능은 특정 요구 사항이나 사용 사례에 맞게 데이터 처리 및 조작을 더 잘 제어할 수 있으므로 더 높은 수준의 사용자 지정 가능성을 제공합니다.

생성된 결과를 데이터베이스 내의 새로운 몽고DB 리포지토리에 손쉽게 저장할 수 있습니다.

MapReduce는 Hadoop과 같은 분산 파일 시스템 내에서 활용할 수 있는 강력한 도구이며, 향상된 기능을 위해 MongoDB와 원활하게 통합됩니다.

Apache Spark에서 서드파티 스크립팅을 지원하는 다양한 기능 덕분에 기존 집계 파이프라인에 비해 확장성이 뛰어나고 학습이 용이하며, 특히 자바스크립트 개발에 능숙한 개인이 자신의 워크플로우 내에서 MapReduce를 활용하고자 할 때 유용하게 사용할 수 있습니다.

단점

시스템에서 타사 스크립팅을 사용하면 집계 파이프라인과 비교할 때 전체 성능에 부정적인 영향을 미치며, 이는 중요한 단점입니다.

특히 처리 능력을 초과하는 복잡한 데이터 세트에 직면할 경우, 메모리 사용률 측면에서 효율성이 저하되어 여러 노드의 참여가 필요할 수 있습니다.

쿼리 실행 지연 가능성으로 인해 실시간 데이터 처리에 적합하지 않을 수 있습니다.

집계 파이프라인의 장단점

집계 파이프라인을 검토할 때는 전반적인 기능을 더 깊이 이해하기 위해 장점과 단점을 모두 고려하는 것이 중요합니다.

찬성

반대 문의는 일반적으로 간결성, 간결성, 가독성 향상을 특징으로 하는 다단계 형식으로 구성됩니다.

집계 파이프라인의 최적화를 통해 MapReduce에 비해 효율성이 향상되어 성능이 크게 향상되었습니다.

이 플랫폼은 사전 정의된 몽고DB 연산자 세트를 제공하여 고도로 사용자 정의 가능한 쿼리를 쉽게 생성할 수 있습니다.

이 시스템은 정보를 즉시 처리할 수 있습니다.

외부 스크립팅 없이도 집계 파이프라인을 MongoDB에 원활하게 통합할 수 있어 데이터 처리 작업을 간소화하고자 하는 사용자에게 편리한 솔루션을 제공합니다.

또는, 그러한 조치가 필요하거나 편리하다고 판단되는 경우, 해당 결과를 보관하기 위해 MongoDB 프레임워크의 범위 내에서 새로운 리포지토리를 구축하도록 선택할 수 있습니다.

이 글도 확인해 보세요:  자바스크립트에서 Intl API를 사용하는 방법

단점

Apache Spark는 분산 컴퓨팅 환경에서 대규모 데이터 세트를 처리하는 데 효율적이고 강력한 도구이지만, 더 복잡한 데이터 구조를 처리하는 능력은 MapReduce에 비해 제한될 수 있습니다. 또한 Spark는 외부 스크립팅 언어에 의존하지 않기 때문에 사용자가 정보를 집계하는 특정 접근 방식으로 제한될 수 있습니다.

MongoDB의 구현 및 관련 학습 곡선을 숙달하는 것은 활용 경험이 없는 개인, 특히 데이터베이스 관리 시스템에 대한 사전 전문 지식이 없는 개인에게 어려움을 줄 수 있습니다.

MapReduce 또는 집계 파이프라인은 언제 사용해야 하나요?

대규모 데이터 처리 작업을 처리하기 위한 솔루션을 선택할 때는 데이터 처리 요구사항 측면에서 프로젝트의 구체적인 요구사항을 면밀히 평가하는 것이 중요합니다. 이와 관련하여 MapReduce와 집계 파이프라인 모두 작업의 성격에 따라 더 적합할 수 있는 뚜렷한 이점을 제공합니다.

분산된 데이터베이스 아키텍처 내에서 정교한 추론과 계산 절차가 필요한 복잡한 정보를 처리하는 경우 MapReduce가 최적의 솔루션으로 제시됩니다. 그 이유는 매퍼-리듀서 작업을 여러 워크스테이션에 통합하면서 원활하게 조정할 수 있기 때문입니다. 데이터 처리 작업에 수평적 확장성과 성능이 모두 필요하다면 MapReduce를 도입하는 것이 좋습니다.

또는 특정 규칙이나 계산이 필요하지 않은 복잡한 정보를 처리할 때는 집계 파이프라인이 더 적합한 옵션으로 입증되었습니다. 또한, 모든 데이터가 몽고DB에 저장되어 있는 경우, 집계 파이프라인에서 제공하는 광범위한 사전 구성된 연산자를 활용하는 것도 매력적인 선택이 될 수 있습니다.

시간에 민감하고 대량의 데이터를 즉각적으로 분석하는 것이 최우선 과제인 경우, 실시간 데이터 처리를 효율적으로 처리할 수 있는 집계 파이프라인이 최적의 선택이 될 수 있습니다.

MongoDB에서 복잡한 계산 실행

두 가지 MongoDB 쿼리 기술 모두 대규모 데이터 집합 처리를 포함하지만, 두 기술 간에는 주목할 만한 차이점이 존재합니다. 이러한 접근 방식은 정보를 추출한 후 연산을 수행하여 효율성이 저하될 수 있는 대신 데이터베이스 내에 있는 데이터에 직접 연산을 수행하여 쿼리 속도를 향상시킵니다.

집계 파이프라인이 효율성과 성능 면에서 MapReduce보다 뛰어난 경우가 많은 것은 사실이지만, 특정 상황에서는 MapReduce를 대안으로 사용해야 할 수도 있다는 점을 인식하는 것이 중요합니다. 각 개별 사례를 신중하게 고려하지 않고 집계 파이프라인을 선호하기 위해 MapReduce가 제공하는 잠재적인 이점을 완전히 무시하는 것은 현명하지 못합니다.

By 이지원

상상력이 풍부한 웹 디자이너이자 안드로이드 앱 마니아인 이지원님은 예술적 감각과 기술적 노하우가 독특하게 조화를 이루고 있습니다. 모바일 기술의 방대한 잠재력을 끊임없이 탐구하고, 최적화된 사용자 중심 경험을 제공하기 위해 최선을 다하고 있습니다. 창의적인 비전과 뛰어난 디자인 역량을 바탕으로 All Things N의 잠재 독자가 공감할 수 있는 매력적인 콘텐츠를 제작합니다.