맵 축소
맵 리듀스 는 대량의 데이터를 집계된 결과로 압축하기 위한 데이터 처리 패러다임입니다.
참고
맵 리듀스 작업은 더 이상 사용되지 않습니다. 집계 프레임워크 는 맵 리듀스 작업보다 더 나은 성능과 유용성을 제공하므로 신규 개발에 선호되어야 합니다.
맵 리듀스 작업은 Collection#find
메서드에서 얻은 컬렉션 뷰에서 map_reduce
메서드를 호출하여 실행됩니다. map_reduce
메서드는 매퍼, 리듀서, 맵 리듀스 옵션의 세 가지 인수를 사용합니다. 매퍼와 리듀서는 JavaScript 함수가 포함된 문자열로 제공되어야 합니다.
예를 들어, 다음과 같은 collection이 1부터 10까지의 값을 가지고 있다고 가정해 보겠습니다.
coll = client['foo'] 10.times do |i| coll.insert_one(v: i) end
다음 호출은 6보다 작은 값을 합산합니다.
coll.find(v: {'$lt' => 6}).map_reduce( 'function() { emit(null, this.v) }', 'function(key, values) { return Array.sum(values) }', ).first['value'] # => 15.0
map_reduce
메서드는 작업에 사용할 매개변수를 보유하는 맵 리듀스 뷰인 Mongo::Collection::View::MapReduce
의 인스턴스를 반환합니다. 작업을 실행하려면 결과를 반복하거나(예: each
, first
또는 to_a
) 또는 execute
메서드를 호출합니다. execute
메서드는 맵 리듀스 작업을 실행하지만 서버에서 결과 세트를 반환하지 않으며, 주로 작업 출력이 다음과 같이 collection으로 전달될 때 유용합니다.
coll.find(...).map_reduce(...).out('destination_collection').execute
참고 사항:
맵 리듀스의 결과가 collection으로 전달되지 않으면 인라인으로 검색된다고 합니다. 이 경우 전체 결과 집합이 16MiB BSON 문서 크기 제한에 맞아야 합니다.
맵 리듀스 결과가 collection으로 전달되고 맵 리듀스 보기가 반복되면 드라이버는 자동으로 전체 collection을 검색하고 해당 내용을 결과 집합으로 반환합니다. collection 정렬 없이 검색됩니다. 비어 있지 않은 collection에 대해 맵 리듀스를 수행하는 경우 드라이버는 맵 리듀스 작업이 완료된 후 collection에 존재하는 문서를 반환하며 여기에는 맵 리듀스 이전에 collection에 있던 문서가 포함될 수 있습니다. 작동.
coll.find(...).map_reduce(...).out('destination_collection').each do |doc| # ... end coll.find(...).map_reduce(...).out(replace: 'destination_collection', db: 'db_name').each do |doc| # ... end
맵 리듀스 뷰가 주어지면 다음 메서드를 사용하여 구성할 수 있습니다.
메서드 | 설명 |
---|---|
| 작업에 대한 |
| 결과 집합을 반환하는 대신 출력을 지정된 collection으로 보냅니다. |
| 작업의 범위를 설정합니다. |
| 결과에 타이밍 정보를 포함할지 여부를 설정합니다. |
다음은 view 객체에 정의된 접근자 메서드입니다.
메서드 | 설명 |
---|---|
| 현재 |
| 지도 함수를 문자열로 반환합니다. |
| 작업의 현재 출력 위치를 반환합니다. |
| reduce 함수를 문자열로 반환합니다. |
| 작업의 현재 범위를 반환합니다. |
| 결과에 타이밍 정보를 포함할지 여부를 반환합니다. |