[Python-checkins] r66329 - sandbox/trunk/dbm_sqlite/Lib/dbm/sqlite.py
skip.montanaro
python-checkins at python.org
Tue Sep 9 06:47:51 CEST 2008
Author: skip.montanaro
Date: Tue Sep 9 06:47:51 2008
New Revision: 66329
Log:
Add :memory: timings. Update from 3.4.0 to latest SQLite - 3.6.2. (Didn't
help.)
Modified:
sandbox/trunk/dbm_sqlite/Lib/dbm/sqlite.py
Modified: sandbox/trunk/dbm_sqlite/Lib/dbm/sqlite.py
==============================================================================
--- sandbox/trunk/dbm_sqlite/Lib/dbm/sqlite.py (original)
+++ sandbox/trunk/dbm_sqlite/Lib/dbm/sqlite.py Tue Sep 9 06:47:51 2008
@@ -3,10 +3,11 @@
XXX TO DO:
-* Obvious speed problems:
+* Obvious speed problems (all tests performed on 2.2GHz MacBook Pro running
+ OSX 10.5.4 with SQLite 3.6.2):
- Read performance:
-
+ # Using a file...
for m in dumb gnu ndbm sqlite ; do
echo $m
for n in 10 100 ; do
@@ -18,20 +19,33 @@
done
done
dumb
- 1000 loops, best of 3: 989 usec per loop
- 100 loops, best of 3: 9.93 msec per loop
+ 100 loops, best of 3: 4.06 msec per loop
+ 10 loops, best of 3: 43.8 msec per loop
gnu
- 100000 loops, best of 3: 4.06 usec per loop
- 10000 loops, best of 3: 36.6 usec per loop
+ 1000 loops, best of 3: 304 usec per loop
+ 100 loops, best of 3: 2.98 msec per loop
ndbm
- 100000 loops, best of 3: 3.54 usec per loop
- 10000 loops, best of 3: 30.9 usec per loop
+ 10000 loops, best of 3: 29.1 usec per loop
+ 1000 loops, best of 3: 299 usec per loop
sqlite
- 1000 loops, best of 3: 578 usec per loop
- 100 loops, best of 3: 5.78 msec per loop
+ 10 loops, best of 3: 25.9 msec per loop
+ 10 loops, best of 3: 271 msec per loop
+ # Using :memory:
+ for m in sqlite ; do
+ echo $m
+ for n in 10 100 ; do
+ python3.0 -m timeit -s 'import dbm.'$m' as db' \
+ -s 'f = db.open(":memory:", "c")' \
+ -s 'f[b"1"] = b"a"' \
+ 'for i in range('$n'): x = f[b"1"]'
+ done
+ done
+ sqlite
+ 1000 loops, best of 3: 249 usec per loop
+ 100 loops, best of 3: 2.48 msec per loop
- Write performance:
-
+ # Using a file...
for m in dumb gnu ndbm sqlite ; do
echo $m
for n in 10 100 ; do
@@ -41,43 +55,67 @@
'for i in range('$n'): f[bytes(str(i), "ascii")] = bytes(str(i), "ascii")'
done
done
- dumb
- 100 loops, best of 3: 4.06 msec per loop
- 10 loops, best of 3: 43 msec per loop
+ 100 loops, best of 3: 3.92 msec per loop
+ 10 loops, best of 3: 41.9 msec per loop
gnu
- 1000 loops, best of 3: 296 usec per loop
- 100 loops, best of 3: 3.03 msec per loop
+ 1000 loops, best of 3: 301 usec per loop
+ 100 loops, best of 3: 3.02 msec per loop
ndbm
- 10000 loops, best of 3: 28.4 usec per loop
- 1000 loops, best of 3: 305 usec per loop
+ 10000 loops, best of 3: 28.9 usec per loop
+ 1000 loops, best of 3: 296 usec per loop
sqlite
- 10 loops, best of 3: 23.5 msec per loop
- 10 loops, best of 3: 264 msec per loop
+ 10 loops, best of 3: 22.5 msec per loop
+ 10 loops, best of 3: 278 msec per loop
+ # Using :memory:
+ for m in sqlite ; do
+ echo $m
+ for n in 10 100 ; do
+ python3.0 -m timeit -s 'import dbm.'$m' as db' \
+ -s 'f = db.open(":memory:", "c")' \
+ 'for i in range('$n'): f[bytes(str(i), "ascii")] = bytes(str(i), "ascii")'
+ done
+ done
+ sqlite
+ 1000 loops, best of 3: 452 usec per loop
+ 100 loops, best of 3: 4.95 msec per loop
- Keys:
+ # Using a file...
for m in dumb gnu ndbm sqlite ; do
echo $m
for n in 10 100 ; do
rm -f /tmp/trash.db*
python3.0 -m timeit -s 'import dbm.'$m' as db' \
-s 'f = db.open("/tmp/trash.db", "c")' \
- -s ' f[b"1"] = b"a"' \
+ -s 'f[b"1"] = b"a"' \
'for i in range('$n'): x = f.keys()'
done
done
dumb
- 10000 loops, best of 3: 21.5 usec per loop
- 1000 loops, best of 3: 211 usec per loop
+ 10000 loops, best of 3: 21.6 usec per loop
+ 1000 loops, best of 3: 210 usec per loop
gnu
- 10000 loops, best of 3: 35.8 usec per loop
- 1000 loops, best of 3: 355 usec per loop
+ 10000 loops, best of 3: 36.6 usec per loop
+ 1000 loops, best of 3: 349 usec per loop
ndbm
- 100000 loops, best of 3: 5.38 usec per loop
- 10000 loops, best of 3: 49.1 usec per loop
+ 100000 loops, best of 3: 5.49 usec per loop
+ 10000 loops, best of 3: 50.8 usec per loop
sqlite
- 1000 loops, best of 3: 513 usec per loop
- 100 loops, best of 3: 5.1 msec per loop
-
+ 1000 loops, best of 3: 562 usec per loop
+ 100 loops, best of 3: 5.55 msec per loop
+ # Using :memory:
+ for m in sqlite ; do
+ echo $m
+ for n in 10 100 ; do
+ python3.0 -m timeit -s 'import dbm.'$m' as db' \
+ -s 'f = db.open(":memory:", "c")' \
+ -s 'f[b"1"] = b"a"' \
+ 'for i in range('$n'): x = f.keys()'
+ done
+ done
+ sqlite
+ 10000 loops, best of 3: 185 usec per loop
+ 1000 loops, best of 3: 1.85 msec per loop
"""
import sqlite3
More information about the Python-checkins
mailing list