[issue3783] dbm.sqlite proof of concept

Runar Tenfjord report at bugs.python.org
Thu Nov 19 17:56:51 CET 2009


Runar Tenfjord <runar.tenfjord at gmail.com> added the comment:

By utilizing triggers on inserts and deletes it is possible to
keep track of the size and speed up __len__ by 10 x.

SQL:

CREATE TABLE IF NOT EXISTS info
   (key TEXT UNIQUE NOT NULL,
    value INTEGER NOT NULL);

INSERT OR IGNORE INTO info (key,value) VALUES ('size',0);

CREATE TABLE IF NOT EXISTS shelf
    (key TEXT UNIQUE NOT NULL,
     value TEXT NOT NULL);

CREATE TRIGGER IF NOT EXISTS insert_shelf
    AFTER INSERT ON shelf
    BEGIN
         UPDATE info SET value = value + 1 WHERE key = 'size';
    END;

CREATE TRIGGER IF NOT EXISTS delete_shelf
    AFTER DELETE ON shelf
    BEGIN
         UPDATE info SET value = value - 1 WHERE key = 'size';
    END;

On my laptop this increase the speed of 'len' about 10x

I have a slightly modified version of dbsqlite.py for
running on python 2.5 utilizing the triggers for 
keep track of the size:

http://dpaste.com/hold/122439/

----------
nosy: +rute

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue3783>
_______________________________________


More information about the Python-bugs-list mailing list