[Python-3000] Nonlinearity in dbm.ndbm?

Josiah Carlson josiah.carlson at gmail.com
Sun Sep 7 00:47:49 CEST 2008


On Sat, Sep 6, 2008 at 3:36 PM,  <skip at pobox.com> wrote:
> While doing a little testing of my dbm.sqlite module (it's pretty damn slow
> at the moment) I came across this chestnut.  Given this shell for loop:
>
>    for n in 10 100 1000 10000 ; do
>        rm -f /tmp/trash.db*
>        python3.0 -m timeit -s 'import dbm.ndbm as db' -s 'f = db.open("/tmp/trash.db", "c")' 'for i in range('$n'): f[str(i)] = str(i)'
>    done
>
> I get this output:
>
>    100000 loops, best of 3: 16 usec per loop
>    1000 loops, best of 3: 185 usec per loop
>    100 loops, best of 3: 5.04 msec per loop
>    10 loops, best of 3: 207 msec per loop
>
> Replacing dbm.ndbm with dbm.sqlite shows more linear growth (only went to
> n=1000 because it was so slow):
>
>    10 loops, best of 3: 44.9 msec per loop
>    10 loops, best of 3: 460 msec per loop
>    10 loops, best of 3: 5.26 sec per loop
>
> My guess is there is something nonlinear in the ndbm code, probably the
> underlying library, but it may be worth checking the wrapper quickly.
>
> Platform is Mac OSX 10.5.4 on a MacBook Pro.
>
> Now to dig into the abysmal sqlite performance.

The version I just posted to the tracker reads/writes about 30k
entries/second.  You may want to look at the differences (looks to be
due to your lack of a primary key/index).

 - Josiah


More information about the Python-3000 mailing list