Guest User

Untitled

a guest
Jan 14th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.04 KB | None | 0 0
  1. from datetime import datetime
  2. import redis
  3. import random
  4. import sqlite3
  5.  
  6. BROKER_HOST = "localhost" # Maps to redis host.
  7. REDIS_PASSWORD = None
  8. KEY_PREFIX = "speed_"
  9. ALPHABETE = "qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM"
  10. SQLITE_DB = ":memory:"
  11.  
  12.  
  13. redis = redis.Redis(
  14. host=BROKER_HOST,
  15. password=REDIS_PASSWORD,
  16. )
  17.  
  18.  
  19.  
  20. start_time = None
  21.  
  22. def showtime(message):
  23. global start_time
  24. if not start_time:
  25. start_time = datetime.now()
  26. td = datetime.now() - start_time
  27. sec = td.seconds
  28. micsec = td.microseconds / 1000
  29. print "%s.%s sec: %s" % (sec, micsec, message)
  30. start_time = datetime.now()
  31.  
  32. def generate_key(key_length=10):
  33. return "".join([random.choice(ALPHABETE) for x in range(key_length)])
  34.  
  35. def generate_data():
  36. return [(generate_key(), generate_key()) for x in range(10**3)]
  37.  
  38.  
  39. class SQLiteDB(object):
  40.  
  41. def __init__(self):
  42. self.cn = sqlite3.connect(SQLITE_DB)
  43. self.cur = self.cn.cursor()
  44. self.cur.execute("CREATE TABLE T1 (key1 varchar(100), val varchar(100), PRIMARY KEY (key1) )")
  45. self.cn.commit()
  46.  
  47. def __del__(self):
  48. self.cur.execute("DROP TABLE T1")
  49. self.cn.commit()
  50.  
  51. def clear(self):
  52. self.cur.execute("DELETE FROM T1")
  53. self.cn.commit()
  54.  
  55. def save(self, data):
  56. self.cur.executemany("INSERT INTO T1(key1, val) VALUES (?, ?)", data)
  57. self.cn.commit()
  58.  
  59. def get_val(self, key):
  60. self.cur.execute("SELECT val FROM T1 where key1='%s'" % key)
  61. row = self.cur.fetchone()
  62. return row[0]
  63.  
  64. def keys(self, pattern):
  65. self.cur.execute("SELECT key1 FROM T1 where key1 like '%s%%'" % pattern)
  66. #print "SELECT key1 FROM T1 where key1 like '%s%%'" % pattern
  67. return [row[0] for row in self.cur]
  68.  
  69. class RedisDB(object):
  70.  
  71. def __init__(self):
  72. self.clear()
  73.  
  74. def __del__(self):
  75. self.clear()
  76.  
  77. def clear(self):
  78. keys = redis.keys(KEY_PREFIX+"*")
  79. for key in keys:
  80. redis.delete(key)
  81.  
  82. def save(self, data):
  83. for key, val in data:
  84. redis.set(KEY_PREFIX+key, val)
  85.  
  86. def get_val(self, key):
  87. return redis.get(KEY_PREFIX+key)
  88.  
  89. def keys(self, pattern):
  90. return redis.keys(KEY_PREFIX+pattern+"*")
  91.  
  92.  
  93. def run_test(db):
  94. showtime("Start")
  95. data = generate_data()
  96. showtime("GENERATE DATA end")
  97. for x in range(100):
  98. db.save(data)
  99. db.clear()
  100. showtime("INSERT TEST end")
  101. db.save(data)
  102. for x in xrange(10**5):
  103. dt = random.choice(data)
  104. val = db.get_val(dt[0])
  105. assert val == dt[1]
  106. showtime("READ TEST end")
  107.  
  108. pattern = data[0][0]
  109. keys = db.keys(pattern)
  110. assert len(keys), 1
  111.  
  112. for x in xrange(10**3):
  113. pattern = generate_key(2)
  114. keys = db.keys(pattern)
  115. showtime("KEYS end")
  116.  
  117. db.clear()
  118. print "END!!!!!!!!!!!!!"
  119.  
  120. def main():
  121. print "SQLite TEST---------------------------------"
  122. run_test(SQLiteDB())
  123. print "RedisDB TEST---------------------------------"
  124. run_test(RedisDB())
  125.  
  126. main()
Add Comment
Please, Sign In to add comment