집 >
기사 > 백엔드 개발 > Mongodb mapreduce 사용법 및 PHP 샘플 코드
Mongodb mapreduce 사용법 및 PHP 샘플 코드
WBOY원래의
2016-08-08 09:30:301263검색
MongoDB는 mysql, sqlserver, oracle과 같이 일반적으로 사용되는 관계형 데이터베이스의 기능별로 그룹화하는 것만큼 편리하지는 않지만 MongoDB에도 그룹화를 달성하는 세 가지 방법이 있습니다. * Mongodb 세 가지 그룹화 방법 : * 1. 그룹(필터링 후 그룹, 샤딩 지원 안함, 데이터 양 제한, 효율적이지 않음) * 2. mapreduce(js 엔진 기반, 단일 스레드 실행, 낮은 효율성, 백그라운드 통계에 적합 등) * 3. 집계(권장) (PHP mongodb 드라이버 버전에 >=1.3.0이 필요한 경우 집계 사용을 권장함) 더 높은 성능을 가지고 있는 것이 많고, 사용하기 더 간편하지만, 1.3은 현재 계정 인증 모드를 지원하지 않습니다. http://pecl.php.net/package/mongo를 통해 업데이트 로그 및 버그를 확인할 수 있습니다. 🎜>다음은 다음과 같습니다. mapreduce 방법을 살펴보세요. Mongodb 공식 웹사이트에서 MapReduce를 소개합니다. MongoDB의 Map/reduce는 데이터 일괄 처리 및 집계 작업에 유용합니다. . 이는 모든 입력이 컬렉션에서 나오고 출력이 컬렉션으로 이동하는 Hadoop과 같은 것을 사용하는 것과 유사합니다.
SQL에서 GROUP BY를 사용하면 map/reduce는 MongoDB에서 적합한 도구입니다. 대략적인 의미는 다음과 같습니다. Mongodb의 Map/reduce는 주로 일괄 처리 및 데이터 집계에 사용됩니다. Hadoop을 사용하는 경우와 다소 비슷합니다. 컬렉션 데이터를 처리하면 모든 입력 데이터가 컬렉션에서 얻어지고 MapReduce 이후의 데이터 출력도 컬렉션에 기록됩니다. 일반적으로 SQL에서 Group By 문을 사용하는 방법과 유사합니다. MapReduce를 사용하려면 Map과 Reduce라는 두 가지 기능을 구현해야 합니다. Map 함수는 Emit(key, value)을 호출하여 컬렉션의 모든 레코드를 순회하고 처리를 위해 키와 값을 Reduce 함수에 전달합니다. Map 함수와 Reduce 함수는 Javascript로 작성되었으며 db.runCommand 또는 mapreduce 명령을 통해 MapReduce 작업을 수행할 수 있습니다. MapReduce 명령은 다음과 같습니다. db.runCommand(
{ mapreduce : <collection>,
map : <mapfunction>,
reduce : <reducefunction>
[, query : <queryfilterobject>]
[, sort : <sortthequery.usefulforoptimization>]
[, limit : <numberofobjectstoreturnfromcollection>]
[, out : <output-collectionname>]
[, keeptemp: <true|false>]
[, finalize : <finalizefunction>]
[, scope : <objectwherefieldsgointojavascriptglobalscope >]
[, verbose : true]
}
); 매개변수 설명: mapreduce: 연산할 대상 설정 map: 매핑 함수(Reduce 함수의 매개변수로 키-값 쌍의 시퀀스를 생성) reduce: 통계 함수query: 대상 레코드 필터링sort: 대상 레코드 정렬limit: 대상 레코드 수 제한out: 통계 결과 저장 컬렉션 (지정하지 않은 경우) 임시 컬렉션 사용, 클라이언트 연결 끊김 후 자동 삭제) keeptemp : 임시 컬렉션 유지 여부 finalize : 최종 처리 기능 수행 감소 반환 결과에 대한 최종 정렬 및 결과 집합에 저장) 범위: 매핑, 축소, 마무리를 위해 외부 변수 가져오기 상세: 자세한 시간 통계 표시 map 함수 map 함수는 현재 객체를 호출하고, 객체의 속성을 처리한 후, Reduce에 값을 전달하는 방식으로 map 메소드가 동작합니다. 현재 객체를 반환하고, 적어도 한 번은 Emit(key, value) 메소드를 호출하여 감소할 값을 전달합니다. 여기서 Emit의 키는 최종 데이터의 ID입니다. reduce函数 接收一个值和数组,根据需要对数组进行合并分组等处理,reduce的key就是emit(key,value)的key,value_array是同个key对应的多个value数组。 Finalize函数 此函数为可选函数,可在执行完map和reduce后执行,对最后的数据进行统一处理。 看完基本介绍,我们再来看一个实例:已知集合feed,测试数据如下:{
"_id": ObjectId("50ccb3f91e937e2927000004"),
"feed_type": 1,
"to_user": 234,
"time_line": "2012-12-16 01:26:00"
}{
"_id": ObjectId("50ccb3ef1e937e0727000004"),
"feed_type": 8,
"to_user": 123,
"time_line": "2012-12-16 01:26:00"
}{
"_id": ObjectId("50ccb3e31e937e0a27000003"),
"feed_type": 1,
"to_user": 123,
"time_line": "2012-12-16 01:26:00"
}{
"_id": ObjectId("50ccb3d31e937e0927000001"),
"feed_type": 1,
"to_user": 123,
"time_line": "2012-12-16 01:26:00"
} 我们按动态类型feed_type和用户to_user进行分组统计,实现结果: