Les résultats bruts de l'analyse comparative suivante : 2x écriture, 3x lecture .
Voici un simple benchmark en python que vous pouvez adapter à vos besoins. J'ai cherché à savoir si chacun d'entre eux pouvait simplement définir/récupérer des valeurs :
#!/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)
Résultats avec mongodb 1.8.1 et redis 2.2.5 et la dernière version de 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
Prenez les résultats avec un grain de sel, bien sûr ! Si vous programmez dans un autre langage, si vous utilisez d'autres clients/des implémentations différentes, etc. vos résultats varieront considérablement. Sans oublier que votre utilisation sera complètement différente ! Votre meilleure chance est de les comparer vous-même, précisément de la manière dont vous avez l'intention de les utiliser. En corollaire, vous découvrirez sans doute que les meilleur la manière d'utiliser chacun d'entre eux. Faites toujours des comparaisons pour vous-même !
2 votes
En général, se soucier de la différence entre 5 000 ops/sec et 10 000 ops/sec est souvent un cas d'optimisation prématurée. Cela dit, c'est une réponse intéressante :)