[Zope-dev] New version of BTreeFolder
Kapil Thangavelu
kthangavelu@earthlink.net
Mon, 28 Aug 2000 20:41:05 -0700
Kapil Thangavelu wrote:
>
> Shane Hathaway wrote:
> > BTW has anyone done any semi-formal speed tests? It's rumored that a
> > custom getattr in Python can cause a bit of a slowdown. We could write
> > a custom getattr in C to solve the problem. But we don't want to do
> > any premature optimization.
> >
> > Shane
>
> I'll work on some tests.
>
> Kapil
semi-formal test
i ran some basic tests comparing a btree folder against a folder. i'm
not sure about my testing methodology but here are the results. the test
code is at the end of this email.
the first pair of numbers is a timed creation test for size xxx of DTML
Documents.
the second pair of numbers is a timed test for len(objectIds())
the third pair of numbers is a timed test for attribute access with a
call to
int(dtmldoc.title_or_id()) # all the ids are stringed numbers
my test box is running mandrake 7.1 with 512 M ram, dual proc celerons
550s (oc'd)
some quick conclusions. the btree folder is slower on average for
creation by anywhere from 15-25% andt btree's __getattr is on average
almost twice as slow as the folder's getattr.
order folder followed by btreefolder
for size 100
0.0974419116974 :::0.126843929291
0.000378012657166 :::0.000354051589966
0.0101770162582 :::0.0186030864716
for size 100
0.0978569984436 :::0.125252962112
0.000376105308533 :::0.000353932380676
0.0101470947266 :::0.0185579061508
for size 500
0.52112698555 :::0.657492995262
0.00154399871826 :::0.00154197216034
0.0524510145187 :::0.0956329107285
for size 500
0.53660595417 :::0.714686989784
0.00154197216034 :::0.00157594680786
0.0532569885254 :::0.100463986397
for size 1000
1.11411702633 :::1.40103697777
0.00302505493164 :::0.00306105613708
0.105547070503 :::0.193196058273
for size 1000
1.12388503551 :::1.58762395382
0.00370097160339 :::0.00381696224213
0.106634020805 :::0.194367051125
for size 2000
2.60056698322 :::3.20675897598
0.007483959198 :::0.00741696357727
0.216197967529 :::0.396993994713
for size 2000
2.64964604378 :::3.26421093941
0.0074850320816 :::0.00761103630066
0.214147925377 :::0.40997505188
for size 5000
9.50434195995 :::11.0002789497
0.0184400081635 :::0.018413901329
0.533676981926 :::0.997251987457
just to be fair i reversed the positions and
did a second set of runs with only 1 run per size as
the results were consistent with the first set.
for size 100
0.128319978714 :::0.10124707222
0.000413060188293 :::0.000383019447327
0.018816113472 :::0.0104240179062
for size 100
0.12813603878 :::0.101204037666
0.00040602684021 :::0.000380039215088
0.0188159942627 :::0.0105849504471
for size 500
0.681550979614 :::0.546862006187
0.00152194499969 :::0.00160706043243
0.0983099937439 :::0.0540620088577
for size 1000
1.47808301449 :::1.17385303974
0.00308799743652 :::0.00319290161133
0.197283029556 :::0.108732938766
for size 5000
11.1204429865 :::9.15097498894
0.015163064003 :::0.0150960683823
1.00954806805 :::0.535046935081
Despite this evidence. at size 5000, looking at the btreefolder contents
in the management screen was near instaneous while the folder took
almost a minute. based on the above evidence though that has more to do
with the interface than the underlying speed of the folder methods.
night.
Kapil
test code to follow.
external method
import time
import os
import Products.BTreeFolder
def btest(self, REQUEST, MMMM=None):
''' '''
if not MMMM: MMMM=100
results = []
bf = Products.BTreeFolder.BTreeFolder.BTreeFolder()
bf.id = 'btree_test_b'
self._setObject(bf.id, bf)
id = 'btree_test_f'
rf = self.manage_addFolder(id)
# creation test for completeness
stime = time.time()
for num in xrange(MMMM):
self.btree_test_b.manage_addDTMLDocument(str(num))
etime = time.time()
result = etime-stime
#self.get_transaction().commit()
stime = time.time()
for num in xrange(MMMM):
self.btree_test_f.manage_addDTMLDocument(str(num))
etime = time.time()
results.append(result, etime-stime)
# access test
stime = time.time()
len(self.btree_test_b.objectIds())
etime = time.time()
result = etime-stime
stime = time.time()
len(self.btree_test_f.objectIds())
etime = time.time()
results.append(result, etime-stime)
# iteration test
stime = time.time()
for oid, item in self.btree_test_b.objectItems():
int(item.title_or_id())
etime = time.time()
result=etime-stime
stime = time.time()
for oid, item in self.btree_test_f.objectItems():
int(item.title_or_id())
etime = time.time()
results.append(result, etime-stime)
return results