[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