On Thursday, December 02, 2010 14:26:36 Xiao Lan wrote:
> > But, looking at the module I think it can be slow because it relies
> > heavily on seek(). A better approach would be to mmap() the file. In
> > perl it would look then like a big string. My favourite tool for that is
> > File::Map.
> 
> OK thanks for this info. I will take a look at File::Map.

If I were you, I'd really consider to convert the database into an MMapDB, see 
http://search.cpan.org/perldoc?MMapDB

You can create the MMapDB object in a <Perl> section in the httpd.conf or in a 
ChildInit handler or something similar:

  <Perl>
    use MMapDB;
    # use a global variable here to make it accessible from everywhere
    $My::DB=MMapDB->new(filename=>..., readonly=>1);
  </Perl>

Then in your handler (simplest case):

  use MMapDB qw/:mode/;
  $My::MMapDB->start;   # update the object if the database file has changed
  $My::DB->datamode=DATAMODE_SIMPLE;
  ($value)=...@{$my::DB->main_index->{$key} || []};

If the extra step of converting the QQWry.Dat into a QQWry.mmdb can be built 
into your work flow that would be the route I'd take.

Otherwise I'd look for a C library to that database and build a perl interface 
layer in XS.

Torsten Förtsch

-- 
Need professional modperl support? Hire me! (http://foertsch.name)

Like fantasy? http://kabatinte.net

Reply via email to