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 BY
SQL.결과 집합을 인라인으로 반환합니다(그룹화된 항목의 배열로).
JavaScript 엔진을 사용하여 구현; 사용자 정의
reduce()
함수는 JavaScript로 작성할 수 있습니다.전류 제한
키가 20,000개를 초과하는 결과 집합으로 그룹화하지 않습니다.
결과는 BSON 문서(현재 16MB)의 제한 내에 있어야 합니다.
읽기 잠금을 설정하고 실행 중인 동안 다른 스레드가 JavaScript를 실행할 수 없도록 합니다.
샤드 컬렉션에서는 작동하지 않습니다.
맵리듀스
대용량 데이터 세트를 처리하기 위한 MapReduce 모델을 구현합니다.
여러 출력 옵션 중 하나를 선택할 수 있습니다(인라인, 새 컬렉션, 병합, 대체, 축소).
MapReduce 함수는 JavaScript로 작성됩니다.
샤드되지 않은 입력 컬렉션과 샤드된 입력할 수 있습니다.
큰 컬렉션에 대한 증분 집계에 사용할 수 있습니다.
전류 제한
단일 배출물은 MongoDB의 최대 BSON 문서 크기(16MB)의 절반만 저장할 수 있습니다.
mongod 서버는 자바스크립트 잠금 기능이 있으므로 한 번에 하나의 자바스크립트 기능만 실행할 수 있습니다.그러나 MapReduce의 대부분의 단계는 매우 짧기 때문에 잠금이 자주 발생할 수 있습니다.
MapReduce 함수는 디버깅하기 어려울 수 있습니다.사용할 수 있습니다.
print()
그리고.printjson()
를 진출 에 포함합니다.mongod
vmdk.MapReduce는 일반적으로 관계형 쿼리 집계 경험을 번역하려는 프로그래머에게 직관적이지 않습니다.
집계 프레임워크
MongoDB 2.2.0 프로덕션 릴리스의 새로운 기능(2012년 8월).
성능 및 사용성 향상을 목표로 설계되었습니다.
결과 집합을 인라인으로 반환합니다.
샤드되지 않은 입력 컬렉션과 샤드된 입력할 수 있습니다.
일치, 투영, 정렬 및 그룹화와 같은 일련의 파이프라인 연산자를 통과할 때 객체가 변환되는 "파이프라인" 접근 방식을 사용합니다.
파이프라인 운영자는 모든 입력 문서에 대해 하나의 출력 문서를 생성할 필요가 없습니다. 운영자는 새 문서를 생성하거나 문서를 필터링할 수도 있습니다.
투영을 사용하여 계산 필드를 추가하고, 새 가상 하위 개체를 생성하고, 하위 필드를 최상위 수준의 결과로 추출할 수 있습니다.
필요에 할 수 를 들어, 다중 파이프라인 연산자: 여러개예다니있수습반할복파따라).
$project
또는$group
층계참전류 제한
참고 항목:집계 프레임워크의 예.
누가 예시를 제시하거나 이 세 가지 개념이 함께 설명되는 링크로 안내하여 동일한 샘플 데이터를 가져가서 쉽게 비교할 수 있을까요?
일반적으로 세 가지 접근 방식을 모두 비교하는 것이 유용한 예는 찾을 수 없지만, 다음은 변형을 보여주는 이전의 StackOverflow 질문입니다.
언급URL : https://stackoverflow.com/questions/12337319/mongodb-aggregation-comparison-group-group-and-mapreduce
'programing' 카테고리의 다른 글
문 사용 vs.일회용.폐기() (0) | 2023.05.21 |
---|---|
가져오기 오류: 'jinja2'에서 'escape' 이름을 가져올 수 없습니다. (0) | 2023.05.21 |
PowerShell에서 추가 유형을 다시 제거할 수 있습니까? (0) | 2023.05.21 |
공용 VBA 메서드가 Excel 매크로 목록에 표시되지 않도록 하기 (0) | 2023.05.21 |
Postgres 9.3에서 현재 표준 시간대 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.05.21 |