人们普遍提到,Redis是“燃烧的快速”,mongoDB也是快速的。但是,我很难找到比较这两种结果的实际数字。考虑到类似的配置、特性和操作(也许还可以显示因素在不同的配置和操作中如何变化),等等,Redis是快10倍,快2倍,还是快5倍?
我说的只是表演。我知道mongoDB是一种不同的工具,拥有更丰富的特性集。这不是“mongoDB比Redis更好”的争论。我的问题是,Redis在多大程度上优于mongoDB?
在这一点上,即使是廉价的基准也比没有基准好。
发布于 2011-05-03 14:08:16
以下基准测试的粗略结果:2x写,3x读。
这里是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当然,用一点点盐来接受结果吧!如果您使用另一种语言进行编程,使用其他客户端/不同的实现等,则您的结果会发生变化。更别提你的用法会完全不同!你最好的选择是自己来衡量它们,准确地说你打算使用它们。作为推论,你可能会想出最佳的方法来利用每一种方法。永远为你自己做基准!
发布于 2011-03-10 10:27:18
请查看这个职位有关Redis和MongoDB插入性能分析:
与Redis相比,mongodb $push的速度甚至更快,因此它的速度非常慢,很可能mongodb数组类型具有线性插入时间,因此它变得越来越慢。mongodb可能通过公开一个固定时间插入列表类型来获得一些性能,但是即使是线性时间数组类型(它可以保证恒定时间查找),它也有它对小数据集的应用。
发布于 2013-11-20 09:06:32
良好而简单的基准
我尝试使用当前版本的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。它显示了随着时间的推移,数据库中条目数量的增加所带来的影响。
https://stackoverflow.com/questions/5252577
复制相似问题