[解決済み】RedisはmongoDBよりどれくらい速いのか?
2022-04-22 05:31:32
質問
RedisはBlazing Fastであり、mongoDBも高速であることが広く知られています。しかし、両者の結果を比較した実際の数値が見つからず困っています。同じような構成、機能、操作(そして異なる構成や操作でどのように係数が変化するかを示す)などを考えると、Redisは10倍速いのか、2倍速いのか、5倍速いのか。
私はパフォーマンスのことだけを言っているのです。mongoDBは別のツールであり、より豊富な機能を備えていることは理解しています。 これは "Is 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
もちろん、この結果は大目に見てください。もしあなたが他の言語でプログラミングしていたり、他のクライアントや異なる実装を使用していたりすれば、結果は大きく異なるでしょう。もちろん、あなたの使い方が全く異なることは言うまでもありません。あなたの最善の策は、あなたが使おうとしている方法で、自分でベンチマークを取ることです。その結果、あなたはおそらく ベスト を活用することができます。常に自分自身でベンチマークを行うことです。
関連
-
[解決済み] mongoimport : 'error validating settings: positional argument is only one allowed' (設定の検証エラー:位置引数は1つしか許可されません。
-
[解決済み] MongoDBでコレクションを削除するには?
-
[解決済み] MongoDB 3.2 の認証に失敗しました
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] なぜJavaでは2 * (i * i)の方が2 * i * iより速いのですか?
-
[解決済み] Redisですべてを削除するには?
-
[解決済み] Redisを使用してパターンに一致するキーをアトミックに削除する方法
-
[解決済み] MongoDB SELECT COUNT GROUP BY
-
[解決済み】MongoDBのすべてのドキュメントのフィールド名を変更するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] E: mongodb-org パッケージが見つかりません。
-
[解決済み] ネストされた配列の中で、マッチしたサブドキュメントの要素のみを返す
-
[解決済み] mongodb サービスが開始されない
-
[解決済み] mongodb Failed: error connecting to db server: no reachable servers
-
[解決済み] MongoDB 3.2 の認証に失敗しました
-
問題 --- MongoDB --- 複数のデータソースを設定するとエラーが報告される 一致するBeanは1つだが、2つ見つかった
-
[解決済み】シェルスクリプトでmongoのコマンドを実行するには?
-
[解決済み】MongoDBのシェルで20以上のアイテム(ドキュメント)をプリントアウトする方法は?
-
[解決済み】2つの異なるコレクションで重複したMongo ObjectIdが生成される可能性?
-
[解決済み】MongoDBのすべてのドキュメントのフィールド名を変更するにはどうすればよいですか?