복붙노트

[MONGODB] 얼마나 빨리 레디 스는 MongoDB를보다입니까?

MONGODB

얼마나 빨리 레디 스는 MongoDB를보다입니까?

널리 레디 스는 "빠른 타오르는"하고 MongoDB를 너무 빨리 것을 언급 한 것. 그러나, 나는 문제가 두 가지의 결과를 비교 실제 번호를 찾는 데 문제가 있습니다. 을 감안할 때 유사한 구성, 기능 및 작업 등, (그리고 어쩌면 다른 구성 및 운영에 어떻게 요인의 변화를 보여주는), 레디 스 10 배 빨라진?, 2 배 더 빨리?, 5 배는 빠르다?

난 단지 성능을 말하는거야. 나는 MongoDB를 다른 도구와 풍부한 기능 세트를 가지고 있음을 이해합니다. 이 "더 나은 레디 스보다 MongoDB를"토론하지 않. 레디 스가 MongoDB를 무엇 마진 능가 않습니다에 의해 내가 부탁 해요?

이 시점에서, 심지어 싼 벤치 마크없이 벤치 마크보다는 더 낫다.

해결법

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

    1.다음 벤치 마크에서 거친 결과 : 배 쓰기, 읽기 3 배.

    다음 벤치 마크에서 거친 결과 : 배 쓰기, 읽기 3 배.

    다음은 목적에 적응할 수 파이썬에서 간단한 벤치 마크입니다, 나는 각각 / 설정 값을 검색 간단하게 수행 할 것입니다 얼마나 잘보고 있었다 :

    #!/usr/bin/env python2.7
    import sys, time
    from pymongo import Connection
    import redis
    
    # connect to redis & mongodb
    redis = redis.Redis()
    mongo = Connection().test
    collection = mongo['test']
    collection.ensure_index('key', unique=True)
    
    def mongo_set(data):
        for k, v in data.iteritems():
            collection.insert({'key': k, 'value': v})
    
    def mongo_get(data):
        for k in data.iterkeys():
            val = collection.find_one({'key': k}, fields=('value',)).get('value')
    
    def redis_set(data):
        for k, v in data.iteritems():
            redis.set(k, v)
    
    def redis_get(data):
        for k in data.iterkeys():
            val = redis.get(k)
    
    def do_tests(num, tests):
        # setup dict with key/values to retrieve
        data = {'key' + str(i): 'val' + str(i)*100 for i in range(num)}
        # run tests
        for test in tests:
            start = time.time()
            test(data)
            elapsed = time.time() - start
            print "Completed %s: %d ops in %.2f seconds : %.1f ops/sec" % (test.__name__, num, elapsed, num / elapsed)
    
    if __name__ == '__main__':
        num = 1000 if len(sys.argv) == 1 else int(sys.argv[1])
        tests = [mongo_set, mongo_get, redis_set, redis_get] # order of tests is significant here!
        do_tests(num, tests)
    

    MongoDB를 1.8.1에 대한 결과 및 2.2.5 최신 pymongo / 레디 스-평을 레디 스 :

    $ ./cache_benchmark.py 10000
    Completed mongo_set: 10000 ops in 1.40 seconds : 7167.6 ops/sec
    Completed mongo_get: 10000 ops in 2.38 seconds : 4206.2 ops/sec
    Completed redis_set: 10000 ops in 0.78 seconds : 12752.6 ops/sec
    Completed redis_get: 10000 ops in 0.89 seconds : 11277.0 ops/sec
    

    물론 에누리 결과를 가져! 당신이 다른 클라이언트 / 다른 구현을 사용하여, 다른 언어로 프로그래밍하는 경우 등 결과가 wildy 다를 수 있습니다. 완전히 다른 것입니다 귀하의 사용을 언급합니다! 가장 좋은 방법은 당신이 그들을 사용하고자하는 정확한 방법으로, 벤치 마크 그들에게 자신에게 있습니다. 추론으로 당신은 아마 각을 활용하는 가장 좋은 방법을 알아낼 수 있습니다. 자신을 위해 항상 벤치 마크!

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

    2.레디 스 및 MongoDB를 삽입 성능 분석에 대한이 게시물을 확인하시기 바랍니다 :

    레디 스 및 MongoDB를 삽입 성능 분석에 대한이 게시물을 확인하시기 바랍니다 :

  3. ==============================

    3.좋은 간단한 벤치 마크

    좋은 간단한 벤치 마크

    다시 현재 레디 스 버전 (2.6.16)과 몽고 (2.4.8)를 사용하여 결과를 다시 계산하기 위해 노력하고 여기 결과입니다

    Completed mongo_set: 100000 ops in 5.23 seconds : 19134.6 ops/sec
    Completed mongo_get: 100000 ops in 36.98 seconds : 2703.9 ops/sec
    Completed redis_set: 100000 ops in 6.50 seconds : 15389.4 ops/sec
    Completed redis_get: 100000 ops in 5.59 seconds : 17896.3 ops/sec
    

    또한이 블로그 게시물은 둘 다하지만 사용 node.js.을 비교 그것은 시간과 함께 데이터베이스에있는 항목의 수를 증가시키는 효과를 보여줍니다.

  4. ==============================

    4.두 사람은 꽤 같은 공간에있는 것처럼 숫자는 찾기 힘들 것입니다. 일반적인 응답은 그 레디 스 10-30% 빠르게 데이터가 단일 시스템의 작업 메모리에 들어가고 설정할 때. 데이터의 양을 초과하면, 레디 스 실패. 몽고는 부하의 종류에 따라 금액에 속도가 느려집니다. 삽입은 부하의 종류를 들어 한 사용자가 최근 크기의 6 ~ 7 주문 (10,000 100,000 회)하지만 보고서는 또한 구성 문제가 있다고, 이것은 아주 전형적인 작업 부하는 것을 인정의 둔화를보고했다. 일부 데이터가 디스크에서 읽을해야 할 경우 보통 10 배에 대한 일화 느린하여 무거운 하중을 읽습니다.

    두 사람은 꽤 같은 공간에있는 것처럼 숫자는 찾기 힘들 것입니다. 일반적인 응답은 그 레디 스 10-30% 빠르게 데이터가 단일 시스템의 작업 메모리에 들어가고 설정할 때. 데이터의 양을 초과하면, 레디 스 실패. 몽고는 부하의 종류에 따라 금액에 속도가 느려집니다. 삽입은 부하의 종류를 들어 한 사용자가 최근 크기의 6 ~ 7 주문 (10,000 100,000 회)하지만 보고서는 또한 구성 문제가 있다고, 이것은 아주 전형적인 작업 부하는 것을 인정의 둔화를보고했다. 일부 데이터가 디스크에서 읽을해야 할 경우 보통 10 배에 대한 일화 느린하여 무거운 하중을 읽습니다.

    결론 : 레디 스가 훨씬 더 빠르게이 아닌 것입니다.

  5. ==============================

    5.여기에 1 세에 대한 토네이도 프레임 워크 세션 성능에 대한 훌륭한 기사입니다. 이 레디 스 및 MongoDB를 포함하는 몇 가지의 상이한 구현 사이의 비교를 갖는다. 기사의 그래프는 레디 스이 특정 사용 예제에 약 10 %로 MongoDB를 뒤에 상태.

    여기에 1 세에 대한 토네이도 프레임 워크 세션 성능에 대한 훌륭한 기사입니다. 이 레디 스 및 MongoDB를 포함하는 몇 가지의 상이한 구현 사이의 비교를 갖는다. 기사의 그래프는 레디 스이 특정 사용 예제에 약 10 %로 MongoDB를 뒤에 상태.

    레디 스는 당신이있는 기계의 성능을 분석 벤치 마크에 내장되어 있습니다. 레디 스에 대한 벤치 마크 위키에서 그것에서 원시 데이터의 톤이있다. 하지만 당신은 몽고에 대한 조금 주위를 둘러해야 할 수도 있습니다. 여기처럼 여기, 그리고 어떤 임의의 폴란드어 번호는 (그러나 그것은 당신에게 몇 가지 MongoDB를 자신을 벤치 마크 실행하기위한 시작점을 제공합니다).

    나는이 문제에 대한 최선의 해결책은 당신이 기대하는 상황의 유형에 테스트를 직접 수행하는 것입니다 생각합니다.

  6. ==============================

    6.내 경우에는, 무슨 일이 성능 비교에서 결정하는 요인이되어 있으며, 사용되는 MongoDB를 WriteConcern입니다. 대부분의 몽고 드라이버는 요즘 그 관해서는, 대부분의 쓰기 작업을위한 레디 스 매우 비교했다 인정하는 수단 'RAM에 기록'(Mongo2.6.3-WriteConcern)에 기본 WriteConcern을 설정합니다.

    내 경우에는, 무슨 일이 성능 비교에서 결정하는 요인이되어 있으며, 사용되는 MongoDB를 WriteConcern입니다. 대부분의 몽고 드라이버는 요즘 그 관해서는, 대부분의 쓰기 작업을위한 레디 스 매우 비교했다 인정하는 수단 'RAM에 기록'(Mongo2.6.3-WriteConcern)에 기본 WriteConcern을 설정합니다.

    그러나 현실은 응용 프로그램의 요구와 생산 환경 설정에 따라, 당신은 WriteConcern.JOURNALED이 관심을 변경할 수 있습니다 (oplog에 기록) 또는 WriteConcern.FSYNCED는 (디스크에 기록) 또는 복제 세트 (백 업)에 기록 경우에 필요하다.

    그럼 당신은 몇 가지 성능 감소를보고 시작할 수 있습니다. 다른 중요한 요인은, 데이터 액세스 패턴이 최적화 된 인덱스 미스 % (mongostat 참조) 일반적으로 인덱스 방법 등이 있습니다.

  7. ==============================

    7.당신은 또한 하드웨어에 의존하는 경우 당신이 그것을 실행 이후 표시 기준의 2 ~ 3 배는 오해의 소지가 있다고 생각 - 내 경험에서의 '강한'기계이며, (레디 스 찬성) 격차 더 큰 될거야, 아마 벤치 마크가 메모리 경계가 꽤 빨리 제한에 도달한다는 사실에 의해.

    당신은 또한 하드웨어에 의존하는 경우 당신이 그것을 실행 이후 표시 기준의 2 ~ 3 배는 오해의 소지가 있다고 생각 - 내 경험에서의 '강한'기계이며, (레디 스 찬성) 격차 더 큰 될거야, 아마 벤치 마크가 메모리 경계가 꽤 빨리 제한에 도달한다는 사실에 의해.

    메모리 용량에 관해서는 - 그 주위를 이동하는 방법도 있기 때문에 이것은 부분적으로 사실이다, 쓰기 디스크에 레디 스 데이터를 백업하는 것이 (상업) 제품, 메모리 크기를 극복 또한 클러스터 (멀티 - 분산됩니다) 솔루션이있다 한정.

  8. from https://stackoverflow.com/questions/5252577/how-much-faster-is-redis-than-mongodb by cc-by-sa and MIT license