programing

MongoDB 집계 비교: group(), $group 및 MapReduce

goodsources 2023. 5. 21. 11:22
반응형

MongoDB 집계 비교: group(), $group 및 MapReduce

group(), aggregate with $group 또는 mapreduce를 언제 사용해야 할지 다소 혼란스럽습니다.$group에 대한 groups http://docs.mongodb.org/manual/reference/aggregation/group/ #_S_group에 대한 설명서를 http://www.mongodb.org/display/DOCS/Aggregation 에서 읽었습니다.그룹()이 작동하지 않는 상황은 샤딩뿐입니까?또한 $group이 group()보다 더 강력하다는 느낌이 듭니다. 왜냐하면 집계 프레임워크의 다른 파이프라인 운영자와 함께 사용할 수 있기 때문입니다.$group과 mapreduce를 비교하면 어떻게 됩니까?제가 어디선가 읽은 바로는, 맵리듀스는 일시적인 수집을 생성하지 않는다고 합니다.그런가요?
누가 예시를 제시하거나 이 세 가지 개념이 함께 설명되는 링크로 안내하여 동일한 샘플 데이터를 가져가서 쉽게 비교할 수 있을까요?


또한, 새로운 2.2 릴리스가 출시된 이후로 이 명령에서 특별히 새로운 것을 지적해 주시면 감사하겠습니다.

이름이 비슷해서 다소 헷갈리지만 명령어는 Aggregation Framework의 파이프라인 연산자와 다른 기능 및 구현입니다.

group() 명령어, Aggregation Framework 및 MapReduce는 MongoDB의 집합적인 기능입니다.MongoDB 2.2.0과 같이 기능이 중복되는 부분이 있지만 각각의 차이점과 한계를 설명해 보겠습니다.

참고: 아래에 언급된 인라인 결과 집합은 함수 호출이 끝날 때 결과가 반환된 메모리에서 처리되는 쿼리를 말합니다.대체 출력 옵션(현재 MapReduce에서만 사용 가능)에는 결과를 새 컬렉션 또는 기존 컬렉션에 저장하는 것이 포함될 수 있습니다.

group()

  • 및 그화를간구기및능문단위룹한한▁to와 유사합니다.과 유사합니다.GROUP BYSQL.

  • 결과 집합을 인라인으로 반환합니다(그룹화된 항목의 배열로).

  • JavaScript 엔진을 사용하여 구현; 사용자 정의reduce()함수는 JavaScript로 작성할 수 있습니다.

  • 전류 제한

    • 키가 20,000개를 초과하는 결과 집합으로 그룹화하지 않습니다.

    • 결과는 BSON 문서(현재 16MB)의 제한 내에 있어야 합니다.

    • 읽기 잠금을 설정하고 실행 중인 동안 다른 스레드가 JavaScript를 실행할 수 없도록 합니다.

    • 샤드 컬렉션에서는 작동하지 않습니다.

  • 참고 항목: group() 명령 예제.

맵리듀스

  • 대용량 데이터 세트를 처리하기 위한 MapReduce 모델을 구현합니다.

  • 여러 출력 옵션 중 하나를 선택할 수 있습니다(인라인, 새 컬렉션, 병합, 대체, 축소).

  • MapReduce 함수는 JavaScript로 작성됩니다.

  • 샤드되지 않은 입력 컬렉션과 샤드된 입력할 수 있습니다.

  • 큰 컬렉션에 대한 증분 집계에 사용할 수 있습니다.

  • MongoDB 2.2는 샤드 리덕션 출력을 훨씬 더 잘 지원합니다.

  • 전류 제한

    • 단일 배출물은 MongoDB의 최대 BSON 문서 크기(16MB)의 절반만 저장할 수 있습니다.

    • mongod 서버는 자바스크립트 잠금 기능이 있으므로 한 번에 하나의 자바스크립트 기능만 실행할 수 있습니다.그러나 MapReduce의 대부분의 단계는 매우 짧기 때문에 잠금이 자주 발생할 수 있습니다.

    • MapReduce 함수는 디버깅하기 어려울 수 있습니다.사용할 수 있습니다.print()그리고.printjson()를 진출 에 포함합니다.mongodvmdk.

    • MapReduce는 일반적으로 관계형 쿼리 집계 경험을 번역하려는 프로그래머에게 직관적이지 않습니다.

  • 참고 항목: 예제 매핑/축소.

집계 프레임워크

  • MongoDB 2.2.0 프로덕션 릴리스의 새로운 기능(2012년 8월).

  • 성능 및 사용성 향상을 목표로 설계되었습니다.

  • 결과 집합을 인라인으로 반환합니다.

  • 샤드되지 않은 입력 컬렉션과 샤드된 입력할 수 있습니다.

  • 일치, 투영, 정렬 및 그룹화와 같은 일련의 파이프라인 연산자를 통과할 때 객체가 변환되는 "파이프라인" 접근 방식을 사용합니다.

  • 파이프라인 운영자는 모든 입력 문서에 대해 하나의 출력 문서를 생성할 필요가 없습니다. 운영자는 새 문서를 생성하거나 문서를 필터링할 수도 있습니다.

  • 투영을 사용하여 계산 필드를 추가하고, 새 가상 하위 개체를 생성하고, 하위 필드를 최상위 수준의 결과로 추출할 수 있습니다.

  • 필요에 할 수 를 들어, 다중 파이프라인 연산자: 여러개예다니있수습반할복파따라).$project또는$group 층계참

  • 전류 제한

    • 결과는 인라인으로 반환되므로 서버에서 지원하는 최대 문서 크기(16MB)로 제한됩니다.

    • MapReduce만큼 많은 출력 옵션을 지원하지 않음

    • Aggregation Framework에서 지원하는 연산자식으로 제한됨(즉, 사용자 정의 함수를 쓸 수 없음)

    • 통합을 위한 최신 서버 기능으로, 문서, 기능 세트 및 사용 측면에서 성숙해질 수 있는 공간이 더 많습니다.

  • 참고 항목:집계 프레임워크의 예.

누가 예시를 제시하거나 이 세 가지 개념이 함께 설명되는 링크로 안내하여 동일한 샘플 데이터를 가져가서 쉽게 비교할 수 있을까요?

일반적으로 세 가지 접근 방식을 모두 비교하는 것이 유용한 예는 찾을 수 없지만, 다음은 변형을 보여주는 이전의 StackOverflow 질문입니다.

언급URL : https://stackoverflow.com/questions/12337319/mongodb-aggregation-comparison-group-group-and-mapreduce

반응형