人们普遍提到,Redis"非常快",mongoDB也非常快.但是,我很难找到比较两者结果的实际数字.考虑到相似的配置、功能和操作(可能还显示了因子如何随着不同的配置和操作而变化),Redis是否比以前快了10倍?,快两倍?,快5倍?

我只是说性能.我知道mongoDB是一种不同的工具,具有更丰富的功能集.这不是"mongoDB better比Redis更强大"的辩论.我在问,Redis的表现比mongoDB好多少?

在这一点上,即使是便宜的基准也比没有基准要好.

推荐答案

以下基准的粗略结果:2x write, 3x read.

下面是一个简单的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

当然,对结果持怀疑态度!如果你用另一种语言编程,使用其他客户机/不同的实现,等等,你的结果会大相径庭.更不用说你的用法会完全不同!你最好的办法是自己对它们进行基准测试,精确地按照你打算使用它们的方式.作为推论,你可能会想出best种方法来利用每一种.永远为自己设定基准!

Mongodb相关问答推荐

MongoDB通过查找具有多个数组的对象进行聚合

数组中字符串的Mongo查询集合和推送到新数组嵌套对象

MongoDB Aggregate 根据时间进行多重分组

MongoDB 支持的最 Big Data 库数

MongoError:$subtract 累加​​器是一元运算符

无法使用机器 ip 连接到 mongodb

在 Nodejs 中找不到模块

mongod 和 mongo 命令在 Windows 10 上不起作用

如何返回 MongoDB 中文档的 ObjectId 或 _id?和错误$in 需要一个数组

在 mongodb 的一次更新调用中推送到两个单独的数组

mongodb-nodejs-driver,DeprecationWarning:collection.count 已弃用

将 JSON 与 MongoDB 一起使用?

如何获取 Mongoid 文档的所有字段名称?

Django admin 和 MongoDB,可能吗?

使用 Spring Security + Spring 数据 + MongoDB 进行身份验证

如何仅通过一次调用将一组对象保存到mongoose数据库?

Mongoose Select 要从 findOneAndUpdate 返回的字段

MongoDB 的 MMAPV1、WiredTiger 或 In-Memory StorageEngine 如何 Select ?

MongoDb - 利用多 CPU 服务器进行写入繁重的应用程序

Pymongo/bson:将 python.cursor.Cursor 对象转换为可序列化/JSON 对象