code

Redis는 mongoDB보다 얼마나 빠릅니까?

starcafe 2023. 2. 22. 22:21
반응형

Redis는 mongoDB보다 얼마나 빠릅니까?

Redis는 "Blazing Fast"이며 mongoDB도 빠르다고 널리 알려져 있습니다.하지만 두 가지 결과를 비교해 보니 실제 수치를 찾는 데 어려움을 겪고 있습니다.유사한 구성, 기능 및 운용(및 구성 및 운용에 따라 요소가 어떻게 변화하는지 표시) 등을 고려할 때 Redis는 10배, 2배, 5배 더 빠릅니까?

나는 단지 성과에 대해서만 말하고 있다.mongoDB는 다른 툴로 기능 세트가 풍부하다는 것을 알고 있습니다.이것은 "MongoDB가 Redis보다 나은가" 토론이 아닙니다.Redis가 mongoDB를 얼마나 능가하는지 묻고 싶습니다.

이 시점에서는 저렴한 벤치마크라도 벤치마크가 없는 것보다는 낫다.

다음 벤치마크의 대략적인 결과: 쓰기 2배, 읽기 3배.

다음은 python의 간단한 벤치마크입니다.저는 각각의 기능이 단순히 값을 설정/검색할 때 얼마나 잘 수행되는지 살펴봤습니다.

#!/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 및 redis 2.2.5 및 최신 pymongo/redis-py에 대한 결과:

$ ./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

물론 그 결과를 눈여겨 보세요!다른 언어로 프로그래밍하는 경우, 다른 클라이언트/다른 구현 등을 사용하는 경우 결과는 다양합니다.사용법이 완전히 다른 것은 말할 것도 없습니다!사용하려는 방식으로 직접 벤치마킹하는 것이 최선의 방법입니다.그 결과, 각각을 활용하는 최선의 방법을 찾을 수 있을 것입니다.항상 자신을 벤치마킹하세요!

Redis 및 MongoDB 삽입 성능 분석에 대한 다음 게시물을 확인하십시오.

최대 5000엔트리 mongodb $push는 Redis RPUSH와 비교해도 고속입니다.그 후 매우 느립니다.아마 mongodb 어레이 타입은 선형 삽입 시간을 가지고 있기 때문에 속도가 느려집니다.mongodb는 일정 시간 삽입 리스트 타입을 표시함으로써 약간의 퍼포먼스를 얻을 수 있습니다.arantee 고정 시간 조회) 작은 데이터 세트에 대한 응용 프로그램이 있습니다.

적절하고 심플한 벤치마크

현재 버전의 redis(2.6.16)와 mongo(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 를 사용하고 있습니다.시간과 함께 데이터베이스의 항목 수가 증가하는 효과를 보여줍니다.

이 둘은 같은 공간에 있지 않기 때문에 숫자를 찾기가 어려울 것이다.일반적인 대답은 데이터 세트가 단일 시스템의 작업 메모리에 적합할 때 Redis 속도가 10~30% 빨라진다는 것입니다.데이터량이 초과되면 Redis는 실패합니다.몽고는 부하 종류에 따라 감속합니다.삽입 전용 타입의 부하에 대해서는 최근 한 사용자가 6~7배(10,000~100,000회)의 속도 저하를 보고했지만, 이 보고서에서는 설정상의 문제가 있음을 인정했으며, 이는 매우 비정상적인 작업 부하였습니다.디스크에서 데이터를 읽어야 할 경우 일반적인 읽기 부하가 약 10배 느려집니다.

결론:레디스가 더 빠르겠지만 많이는 그렇지 않다.

이것은 약 1년 전의 토네이도 프레임워크에서의 세션 퍼포먼스에 관한 훌륭한 기사입니다.여기에는 Redis와 MongoDB가 포함된 몇 가지 다른 구현이 비교됩니다.이 기사의 그래프에서는 Redis가 이 특정 사용 사례에서 MongoDB에 약 10% 뒤처져 있음을 나타내고 있습니다.

Redis에는 현재 사용하고 있는 머신의 퍼포먼스를 분석하는 벤치마크 기능이 포함되어 있습니다.Benchmark Wiki for Redis에는 많은 원시 데이터가 있습니다.하지만 몽고를 좀 둘러보셔야 할 것 같아요.여기, 여기, 그리고 랜덤하게 다듬은 수치(단, MongoDB 벤치마크를 직접 실행할 수 있는 출발점이 됩니다).

이 문제에 대한 최선의 해결책은 예상되는 상황에서 직접 테스트를 수행하는 것이라고 생각합니다.

제 경우 퍼포먼스 비교에서 중요한 요소는 사용되는 MongoDb WriteConcern입니다.오늘날 대부분의 mongo 드라이버는 기본 WriteConsern을 ACKNEGED(RAM에 쓰기)(Mongo2.6.3-WriteConsern)로 설정합니다.이 점에서 대부분의 쓰기 조작에서는 redis와 매우 유사합니다.

다만, 실제로는, 애플리케이션의 요구나 실가동 환경의 설정에 따라서는, 이 문제를 Write Concern으로 변경하는 것이 좋을지도 모릅니다.JORDIALED(oplog에 쓰기) 또는 WriteConsern.FSYNCED(디스크에 쓰기) 또는 필요한 경우 복제본 세트에 쓰기(백업)할 수도 있습니다.

그러면 성능이 저하될 수 있습니다.또, 데이터 액세스 패턴이 얼마나 최적화되어 있는지, 인덱스 미스 %(mongostat 참조), 인덱스 전반도 중요한 요인입니다.

표시된 벤치마크의 2-3X는 오해의 소지가 있다고 생각합니다.그것도 실행하는 하드웨어에 따라 달라집니다.제 경험으로는 머신이 강할수록 (Redis에 유리한) 갭은 커집니다.아마 벤치마크가 메모리 한계에 도달하는 것이 매우 빠를 것입니다.

메모리의 용량에 대해서는, 이것은 부분적으로 사실이지만, 그것을 회피하는 방법도 있기 때문에, Redis 데이터를 디스크에 다시 쓰는 (상용) 제품이나, 메모리 사이즈의 제한을 극복한 클러스터(멀티 샤드) 솔루션도 있습니다.

언급URL : https://stackoverflow.com/questions/5252577/how-much-faster-is-redis-than-mongodb

반응형