Created
October 5, 2011 14:23
-
-
Save perses76/1264551 to your computer and use it in GitHub Desktop.
Redis vs SQLite
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from datetime import datetime | |
import redis | |
import random | |
import sqlite3 | |
BROKER_HOST = "localhost" # Maps to redis host. | |
REDIS_PASSWORD = None | |
KEY_PREFIX = "speed_" | |
ALPHABETE = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM" | |
SQLITE_DB = ":memory:" | |
redis = redis.Redis( | |
host=BROKER_HOST, | |
password=REDIS_PASSWORD, | |
) | |
start_time = None | |
def showtime(message): | |
global start_time | |
if not start_time: | |
start_time = datetime.now() | |
td = datetime.now() - start_time | |
sec = td.seconds | |
micsec = td.microseconds / 1000 | |
print "%s.%s sec: %s" % (sec, micsec, message) | |
start_time = datetime.now() | |
def generate_key(key_length=10): | |
return "".join([random.choice(ALPHABETE) for x in range(key_length)]) | |
def generate_data(): | |
return [(generate_key(), generate_key()) for x in range(10**3)] | |
class SQLiteDB(object): | |
def __init__(self): | |
self.cn = sqlite3.connect(SQLITE_DB) | |
self.cur = self.cn.cursor() | |
self.cur.execute("CREATE TABLE T1 (key1 varchar(100), val varchar(100), PRIMARY KEY (key1) )") | |
self.cn.commit() | |
def __del__(self): | |
self.cur.execute("DROP TABLE T1") | |
self.cn.commit() | |
def clear(self): | |
self.cur.execute("DELETE FROM T1") | |
self.cn.commit() | |
def save(self, data): | |
self.cur.executemany("INSERT INTO T1(key1, val) VALUES (?, ?)", data) | |
self.cn.commit() | |
def get_val(self, key): | |
self.cur.execute("SELECT val FROM T1 where key1='%s'" % key) | |
row = self.cur.fetchone() | |
return row[0] | |
def keys(self, pattern): | |
self.cur.execute("SELECT key1 FROM T1 where key1 like '%s%%'" % pattern) | |
#print "SELECT key1 FROM T1 where key1 like '%s%%'" % pattern | |
return [row[0] for row in self.cur] | |
class RedisDB(object): | |
def __init__(self): | |
self.clear() | |
def __del__(self): | |
self.clear() | |
def clear(self): | |
keys = redis.keys(KEY_PREFIX+"*") | |
for key in keys: | |
redis.delete(key) | |
def save(self, data): | |
for key, val in data: | |
redis.set(KEY_PREFIX+key, val) | |
def get_val(self, key): | |
return redis.get(KEY_PREFIX+key) | |
def keys(self, pattern): | |
return redis.keys(KEY_PREFIX+pattern+"*") | |
def run_test(db): | |
showtime("Start") | |
data = generate_data() | |
showtime("GENERATE DATA end") | |
for x in range(100): | |
db.save(data) | |
db.clear() | |
showtime("INSERT TEST end") | |
db.save(data) | |
for x in xrange(10**5): | |
dt = random.choice(data) | |
val = db.get_val(dt[0]) | |
assert val == dt[1] | |
showtime("READ TEST end") | |
pattern = data[0][0] | |
keys = db.keys(pattern) | |
assert len(keys), 1 | |
for x in xrange(10**3): | |
pattern = generate_key(2) | |
keys = db.keys(pattern) | |
showtime("KEYS end") | |
db.clear() | |
print "END!!!!!!!!!!!!!" | |
def main(): | |
print "SQLite TEST---------------------------------" | |
run_test(SQLiteDB()) | |
print "RedisDB TEST---------------------------------" | |
run_test(RedisDB()) | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment