Topic maps, dbm storage (synchronous)
use TM::ResourceAble::MLDBM; { my $tm = new TM::ResourceAble::MLDBM (file => '/tmp/map.dbm'); # modify the map here..... } # it goes out of scope here, and all changes are written back automagically # later in the game { my $tm = new TM::ResourceAble::MLDBM (file => '/tmp/map.dbm'); # we are back in business, no sync necessary }
This package just implements \s-1TM\s0 with a BerkeleyDB store. Unlike TM::Materialized::MLDBM this module does not need explicit synchronisation with the external resource (the \s-1DBM\s0 file here). It ties content-wise with the \s-1DBM\s0 file at constructor time and unties at \s-1DESTROY\s0 time.
This implementation technique is not so memory-efficient as I had thought. Whenever an assertion or a toplet is referenced, the whole block of toplets, resp. assertions, is loaded from the \s-1DB\s0 database. For small maps this is really fast, but it can become a drag for larger maps. See TM::ResourceAble::BDB for a more efficient solution.
\s-1NOTE\s0: Be careful to use this together with TM::Index::*. The indices will be held as part of the map, and so will be stored along side. If you heavily use the map, this can result in many swapin/swapouts. Better to look at TM::IndexAble for that matter.
The constructor expects a hash with the following keys:
This contains the file name of the \s-1DBM\s0 file to tie to.
\s-1TM\s0, TM::Materialized::MLDBM
Copyright 200[68], Robert Barta <[email protected]>, All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. http://www.perl.com/perl/misc/Artistic.html