一尘不染

在这个简单的基准测试中,为什么SQLite比Redis快?

sql

我已经在本地计算机上完成了简单的性能测试,这是python脚本:

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?


阅读 405

收藏
2021-03-17

共1个答案

一尘不染

redis文档中

Redis是一台服务器:所有命令都涉及网络或IPC往返。将其与嵌入式数据存储(例如SQLite,Berkeley DB,Tokyo / Kyoto
Cabinet等)进行比较是没有意义的,因为大多数操作的成本恰好由网络/协议管理决定。

尽管在某些情况下这是对速度问题的承认,但这确实是有道理的。例如,在并行访问的倍数下,Redis的性能可能比sqlite好得多。

用于正确工作的正确工具
,有时是Redis,有时是Redite,有时则是完全不同的东西。如果此速度测试正确显示了您的应用程序将实际执行的操作,则sqlite将为您提供更好的服务,并且您达到了此基准也很好。

2021-03-17