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

2024-01-10

我在本地机器上做了简单的性能测试,这是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?


来自Redis 文档 http://redis.io/topics/benchmarks

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

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

适合正确工作的正确工具,有时是 redis,有时是 sqlite,有时是完全不同的东西。如果这个速度测试正确地展示了你的应用程序实际上会做什么,那么 sqlite 将为你提供更好的服务,并且你做了这个基准测试是件好事。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在这个简单的基准测试中 SQLite 比 Redis 更快? 的相关文章

随机推荐