comparison test/benchmark.py @ 1181:49aebf5a8691

some speedups, some fixes to the benchmarking
author Richard Jones <richard@users.sourceforge.net>
date Mon, 23 Sep 2002 00:50:32 +0000
parents 8e318dfaf479
children 69bf0d381fd7
comparison
equal deleted inserted replaced
1180:ba133c895f2d 1181:49aebf5a8691
17 status=Link("status"), nosy=Multilink("user"), deadline=Date(), 17 status=Link("status"), nosy=Multilink("user"), deadline=Date(),
18 foo=Interval(), files=Multilink("file"), assignedto=Link('user')) 18 foo=Interval(), files=Multilink("file"), assignedto=Link('user'))
19 session = module.Class(db, 'session', title=String()) 19 session = module.Class(db, 'session', title=String())
20 session.disableJournalling() 20 session.disableJournalling()
21 db.post_init() 21 db.post_init()
22 status.create(name="unread")
23 status.create(name="in-progress")
24 status.create(name="testing")
25 status.create(name="resolved")
26 user.create(username='one')
27 user.create(username='two')
28 db.commit() 22 db.commit()
29 23
30 class config: 24 class config:
31 DATABASE='_test_dir' 25 DATABASE='_benchmark'
32 GADFLY_DATABASE = ('test', DATABASE) 26 GADFLY_DATABASE = ('test', DATABASE)
33 MAILHOST = 'localhost' 27 MAILHOST = 'localhost'
34 MAIL_DOMAIN = 'fill.me.in.' 28 MAIL_DOMAIN = 'fill.me.in.'
35 TRACKER_NAME = 'Roundup issue tracker' 29 TRACKER_NAME = 'Roundup issue tracker'
36 TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN 30 TRACKER_EMAIL = 'issue_tracker@%s'%MAIL_DOMAIN
46 try: 40 try:
47 exec('from roundup.backends import %s as backend'%backendname) 41 exec('from roundup.backends import %s as backend'%backendname)
48 except ImportError: 42 except ImportError:
49 return 43 return
50 44
51 if os.path.exists(config.DATABASE): 45 times = []
52 shutil.rmtree(config.DATABASE)
53 46
54 times = [] 47 config.DATABASE = os.path.join('_benchmark', '%s-%s'%(backendname,
55 db = backend.Database(config, 'test') 48 numissues))
56 setupSchema(db, backend) 49 if not os.path.exists(config.DATABASE):
50 db = backend.Database(config, 'admin')
51 setupSchema(db, backend)
52 # create a whole bunch of stuff
53 db.user.create(**{'username': 'admin'})
54 db.status.create(name="unread")
55 db.status.create(name="in-progress")
56 db.status.create(name="testing")
57 db.status.create(name="resolved")
58 pc = -1
59 for i in range(numissues):
60 db.user.create(**{'username': 'user %s'%i})
61 for j in range(10):
62 db.user.set(str(i+1), assignable=1)
63 db.user.set(str(i+1), assignable=0)
64 db.issue.create(**{'title': 'issue %s'%i})
65 for j in range(10):
66 db.issue.set(str(i+1), status='2', assignedto='2', nosy=[])
67 db.issue.set(str(i+1), status='1', assignedto='1',
68 nosy=['1','2'])
69 if (i*100/numissues) != pc:
70 pc = (i*100/numissues)
71 sys.stdout.write("%d%%\r"%pc)
72 sys.stdout.flush()
73 db.commit()
74 else:
75 db = backend.Database(config, 'admin')
76 setupSchema(db, backend)
57 77
58 # create a whole bunch of stuff
59 for i in range(numissues):
60 db.issue.create(**{'title': 'issue %s'%i})
61 for j in range(10):
62 db.issue.set(str(i+1), status='2', assignedto='2', nosy=[])
63 db.issue.set(str(i+1), status='1', assignedto='1', nosy=['1','2'])
64 db.user.create(**{'username': 'user %s'%i})
65 for j in range(10):
66 db.user.set(str(i+1), assignable=1)
67 db.user.set(str(i+1), assignable=0)
68 db.commit()
69 sys.stdout.write('%7s: %-6d'%(backendname, numissues)) 78 sys.stdout.write('%7s: %-6d'%(backendname, numissues))
70 sys.stdout.flush() 79 sys.stdout.flush()
71 80
72 times.append(('start', time())) 81 times.append(('start', time()))
73 82
74 # fetch 83 # fetch
84 db.clearCache()
75 for i in db.issue.list(): 85 for i in db.issue.list():
76 db.issue.get(i, 'title') 86 db.issue.get(i, 'title')
77 times.append(('fetch', time())) 87 times.append(('fetch', time()))
78 88
79 # journals 89 # journals
90 db.clearCache()
80 for i in db.issue.list(): 91 for i in db.issue.list():
81 db.issue.history(i) 92 db.issue.history(i)
82 times.append(('journal', time())) 93 times.append(('journal', time()))
83 94
84 # "calculated" props 95 # "calculated" props
96 db.clearCache()
85 for i in db.issue.list(): 97 for i in db.issue.list():
86 db.issue.get(i, 'activity') 98 db.issue.get(i, 'activity')
87 db.issue.get(i, 'creator') 99 db.issue.get(i, 'creator')
88 db.issue.get(i, 'creation') 100 db.issue.get(i, 'creation')
89 times.append(('jprops', time())) 101 times.append(('jprops', time()))
90 102
91 # lookup 103 # lookup
104 db.clearCache()
92 for i in range(numissues): 105 for i in range(numissues):
93 db.user.lookup('user %s'%i) 106 db.user.lookup('user %s'%i)
94 times.append(('lookup', time())) 107 times.append(('lookup', time()))
95 108
96 # filter 109 # filter
110 db.clearCache()
111 for i in range(100):
112 db.issue.filter(None, {'assignedto': '1', 'title':'issue'},
113 ('+', 'activity'), ('+', 'status'))
114 times.append(('filter', time()))
115
116 # filter with multilink
117 db.clearCache()
97 for i in range(100): 118 for i in range(100):
98 db.issue.filter(None, {'nosy': ['1'], 'assignedto': '1', 119 db.issue.filter(None, {'nosy': ['1'], 'assignedto': '1',
99 'title':'issue'}, ('+', 'activity'), ('+', 'status')) 120 'title':'issue'}, ('+', 'activity'), ('+', 'status'))
100 times.append(('filter', time())) 121 times.append(('filtml', time()))
101 122
102 # results 123 # results
103 last = None 124 last = None
104 for event, stamp in times: 125 for event, stamp in times:
105 if last is None: 126 if last is None:
111 sys.stdout.flush() 132 sys.stdout.flush()
112 133
113 if __name__ == '__main__': 134 if __name__ == '__main__':
114 # 0 1 2 3 4 5 6 135 # 0 1 2 3 4 5 6
115 # 01234567890123456789012345678901234567890123456789012345678901234 136 # 01234567890123456789012345678901234567890123456789012345678901234
116 print 'Test name fetch journl jprops lookup filter TOTAL ' 137 print 'Test name fetch journl jprops lookup filter filtml TOTAL '
117 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): 138 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split():
118 main(name) 139 main(name)
119 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): 140 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split():
120 main(name, numissues=20) 141 main(name, numissues=20)
121 # for name in 'anydbm bsddb bsddb3 metakit sqlite'.split(): 142 for name in 'anydbm bsddb bsddb3 metakit sqlite'.split():
122 # main(name, numissues=100) 143 main(name, numissues=100)
123 144

Roundup Issue Tracker: http://roundup-tracker.org/