Skip to content

Instantly share code, notes, and snippets.

@fnielsen
Created November 16, 2010 15:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fnielsen/701922 to your computer and use it in GitHub Desktop.
Save fnielsen/701922 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
#
# $Id: Nielsen2010Python_sqlspeed.py,v 1.3 2010/11/15 00:59:14 fn Exp $
import os
import random
import sqlite3
import time
conversion = { 1: "one", 2: "two", 3: "three", 4: "four", 5: "five",
6: "six", 7: "seven", 8: "eight", 9: "nine", 10: "ten",
11: "eleven", 12: "twelwe", 13: "thirteen",
14: "fourteen", 15: "fifteen", 16: "sixteen",
17: "seventeen", 18: "eighteen", 19: "nineteen",
20: "twenty", 30: "thirty", 40: "fourty", 50: "fifty",
60: "sixty", 70: "seventy", 80: "eighty", 90: "ninety" }
def convert(value):
[s5,s4,s3,s2,s1] = map(lambda c: int(c), str(value))
if s5 == 1:
t = conversion[s5*10+s4]
else:
t = conversion[s5*10]
if s4 != 0:
t += " " + conversion[s4]
t += " thousand"
if s3 != 0:
t += " " + conversion[s3] + " hundred"
if s2 == 1:
t += " " + conversion[s2*10+s1]
else:
if s2 != 0:
t += " " + conversion[s2*10]
if s1 != 0:
t += " " + conversion[s1]
return t
def n2sqls(n):
s1 = """CREATE TABLE t1(a INTEGER, b INTEGER, c VARCHAR(100));\n"""
for n in range(n):
value = int(random.random()*90000+10000)
s1 += "INSERT INTO t1 VALUES(%d,%d,'%s');\n" % (n+1, value, convert(value))
s2 = "BEGIN;\n" + s1 + "COMMIT;\n"
return [s1, s2]
def sql2time(s):
if os.path.exists('data.db'):
os.unlink('data.db')
con = sqlite3.connect('data.db')
start_time = time.time()
start_cpu = time.clock()
con.executescript(s)
con.commit()
elapsed_cpu = time.clock() - start_cpu
elapsed_time = time.time() - start_time
con.close()
return [elapsed_cpu, elapsed_time]
N = [3, 10, 33, 100, 333, 1000, 3333, 10000]
timing = zeros((8,2,2,1))
for i in range(len(N)):
s1, s2 = n2sqls(N[i])
timing[i,:,0,0] = sql2time(s1)
timing[i,:,1,0] = sql2time(s2)
print(timing)
grid(color=(0.9,0.9,0.9), linewidth=2, linestyle='-')
loglog(N, timing[:,:,0,0])
hold(True)
loglog(N, timing[:,:,1,0], ':')
xlabel('Insert size')
ylabel('Time')
legend(('CPU', 'Elapsed', 'CPU (transaction)', 'Elapsed (transaction)'),
loc='upper left')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment