[解決済み] この単純なベンチマークで、なぜSQLiteはRedisより速いのか?
2022-02-19 15:54:55
質問
私は、私のローカルマシンで簡単なパフォーマンステストを行いました。
import redis
import sqlite3
import time
data = {}
N = 100000
for i in xrange(N):
key = "key-"+str(i)
value = "value-"+str(i)
data[key] = value
r = redis.Redis("localhost", db=1)
s = sqlite3.connect("testDB")
cs = s.cursor()
try:
cs.execute("CREATE TABLE testTable(key VARCHAR(256), value TEXT)")
except Exception as excp:
print str(excp)
cs.execute("DROP TABLE testTable")
cs.execute("CREATE TABLE testTable(key VARCHAR(256), value TEXT)")
print "[---Testing SQLITE---]"
sts = time.time()
for key in data:
cs.execute("INSERT INTO testTable VALUES(?,?)", (key, data[key]))
#s.commit()
s.commit()
ste = time.time()
print "[Total time of sql: %s]"%str(ste-sts)
print "[---Testing REDIS---]"
rts = time.time()
r.flushdb()# for empty db
for key in data:
r.set(key, data[key])
rte = time.time()
print "[Total time of redis: %s]"%str(rte-rts)
Redisはもっと高速に動作すると思っていましたが、結果はもっと遅かったです。
[---Testing SQLITE---]
[Total time of sql: 0.615846157074]
[---Testing REDIS---]
[Total time of redis: 10.9668009281]
では、redisはメモリベースですが、sqliteはどうでしょうか?なぜredisはこんなに遅いのでしょうか?Redisを使うべきとき、sqliteを使うべきとき?
解決方法は?
から redis ドキュメント
Redisはサーバです。すべてのコマンドはネットワークまたはIPCのラウンドトリップを伴います。SQLite、Berkeley DB、Tokyo/Kyoto Cabinetなどの組み込み型データストアと比較するのは無意味です。ほとんどの操作のコストは、まさにネットワークやプロトコルの管理に支配されているからです。
それは、ある種のケースにおけるスピードの問題を認めていることになりますが、理にかなっています。例えば、何倍もの並列アクセスでは、Redisはsqliteよりずっと良いパフォーマンスを示すかもしれません。
適材適所のツール あるときはredis、あるときはsqlite、またあるときは全く別のものになります。このスピードテストが、あなたのアプリが現実的に行うことを適切に示しているのであれば、sqliteはより良いサービスを提供するでしょうし、あなたがこのベンチマークを行ったことは良いことです。
関連
-
[解決済み】Pythonでgoogle APIのJSONコードを読み込むとエラーになる件
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜPythonのコードは関数の中でより速く実行されるのですか?
-
[解決済み] なぜ[]はlist()よりも速いのですか?
-
[解決済み] ビューは単純なクエリよりも高速ですか?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】PyPyが6.3倍速いなら、CPythonよりPyPyを使うべきじゃないのか?
-
[解決済み】Redisは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 実装 サイバーパンク風ボタン
おすすめ
-
python implement mysql add delete check change サンプルコード
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
任意波形を生成してtxtで保存するためのPython実装
-
Pythonショートビデオクローラーチュートリアル
-
Python 入出力と高次代入の基礎知識
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】numpyの配列連結。"ValueError:すべての入力配列は同じ次元数でなければならない"
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")