in reply to flocking databases

Prepended From conversation with sulfericacid and other posts you'll note that zie is already using a dbm style database - SDBM if I recall correctly. So I'm suggesting this as a work-alike (except better).

When I first started out I was using DB_File::Lock (its documentation has pointers to Tie::DB_Lock and Tie::DB_LockFile). I've since gotten a clue and if I need to do this task then I use BerkeleyDB and use its concurrant locking system. This sort of task is something that is fully in the let-someone-else handle-it-if-you-can category.

Added It occurred to me that an example would be a good idea.

tie %hash, 'BerkeleyDB::Hash', -Filename => 'foo.db', -Flags => DB_CREATE | DB_INIT_CDB | DB_MPOOL;

Easy eh? Note that BerkeleyDB's locking mechanism uses flock so NFS users (probably not sulfericacid) have to use one of the other modules mentioned above.

Replies are listed 'Best First'.
Re: Re: flocking databases
by cees (Curate) on Apr 14, 2003 at 05:18 UTC

    Definately have a look at MLDBM::Sync if you are using SDBM. It will handle locking for you.

    From the docs:

    This module wraps around the MLDBM interface, by handling concurrent access to MLDBM databases with file locking, and flushes i/o explicity per lock/unlock.