복붙노트

[MONGODB] 빠른지도에 비해 MongoDB를 집계 프레임 워크인가 / 감소?

MONGODB

빠른지도에 비해 MongoDB를 집계 프레임 워크인가 / 감소?

집계 프레임 워크는 MongoDB를 2.2에 도입되어,지도를 통해 특별한 성능 향상이있다 / 감소?

그렇다면, 왜, 어떻게, 얼마나하면?

(이미 나 자신에 대한 테스트를 완료했으며, 성능은 거의 동일)

해결법

  1. ==============================

    1.감소 다중 빠른지도 이상의 것을 보여줍니다 통합 프레임 워크, 일반적으로 빠른 크기 순서 인 (자신의 데이터를 사용하는 것을 포함)를 개인적으로 실행 한 모든 테스트.

    감소 다중 빠른지도 이상의 것을 보여줍니다 통합 프레임 워크, 일반적으로 빠른 크기 순서 인 (자신의 데이터를 사용하는 것을 포함)를 개인적으로 실행 한 모든 테스트.

    :이있어 - 그냥 (필자는 집계의 성능을 측정하기 원하기 때문에, 그것은 데이터 페이지에 걸립니다 시간을 먼저 캐시를 따뜻하게 아니라 청산 OS의 캐시보다) 당신이 게시 된 데이터의 1 / 10을 복용

    맵리 듀스 : 1,058ms 집계 프레임 워크 : 133ms

    통합 프레임 워크에서 $ 일치를 제거하고 {조회} 맵리 듀스에서 (모두 그냥 색인을 사용하고 그렇지 우리가 측정 할 무엇 때문에)와 키 2하여 전체 데이터 집합을 그룹화 내가 가지고 :

    맵리 듀스 : 18,803ms 집계 프레임 워크 : 1,535ms

    사람들은 내 이전 실험과 일치 아주 많이 있습니다.

  2. ==============================

    2.내 벤치 마크 :

    내 벤치 마크 :

    == 데이터 생성 ==

    약 350 바이트 쉬운 (파이썬) 4million 행을 생성합니다. 각 문서는 이러한 키가 있습니다 :

    dB = 연결 ( '127.0.0.1'). 테스트 #의 몽고 연결 random.seed (1) _ 대 범위 (2) :     key1s = hexlify (os.urandom (10)). 디코드 범위 ( 'ASCII') 용 _ (10)]     key2s = hexlify (os.urandom (10)). 디코드 범위 ( 'ASCII') 용 _ (1000)]     baddata = '약간 긴 날'+ '*'* (300)     (2000) 범위의 I :         DATA_LIST = [{                 '키 1': random.choice (key1s)                 '키 2': random.choice (key2s)                 'baddata'baddata,                 '값'10                 } 범위 _ 대 (1000)]         DATA_LIST에서 데이터 :             db.testtable.save (데이터) 총 데이터 크기는 몽고에 6기가바이트에 대해이었다. (포스트 그레스와 2GB)

    == 테스트 ==

    나는 몇 가지 테스트를했지만 한 결과를 비교에 충분하다 :

    참고 : 서버가 다시 시작되고, OS 캐시가 캐시의 효과를 무시하고, 각 쿼리 후 청소한다.

    QUERY : 각 키 2에 대한 모든 키 1 = someValue와 가진 행 (200K에 대한 행)과 합계 값을 집계

    질의 :

    감소 /지도 :

    db.testtable.mapReduce (함수 () {발광 (this.key2, this.value);}; values.forEach (함수 (V) {내가 + = V], 기능 (키 값) {VAR 난 = 0}) 나는를 반환;}, {아웃 : {인라인 : 1}, 쿼리 : {키 1을 '663969462d2ec0a5fc34를'}})

    골재:

    db.testtable.aggregate ({$ 일치 : {키 1 : '663969462d2ec0a5fc34'}}, {$ 그룹 : {_id : '$ 키 2'는 팝 : {$ 합계 : '$ 값을'}}})

    그룹:

    db.testtable.group ({키 : 키 2 {1}, COND {KEY1 '663969462d2ec0a5fc34가'} 감소 : 함수 (OBJ, 이전) {prev.csum + = obj.value} 초기 {CSUM : 0}})

  3. from https://stackoverflow.com/questions/13908438/is-mongodb-aggregation-framework-faster-than-map-reduce by cc-by-sa and MIT license