Re: mod_perl for multi-process file processing?

Dr James Smith <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
Alan/Alexandr,

There will always be an overhead with using a webserver to do this - 
even using mod_perl.

Assumiptions:
     *    from what you are saying that there is no actual website 
involved but you want to use mod_perl to cache data for an offline process;
     *    One set of data is used once and once only for a run?

Pros:
     *    Make sure you use your module in startup so that each child 
thread uses the same memory not generating a copy of the data;
     *    If you use something like curl multi as the fetcher you can 
write a simple parallel fetching queue to get the data - great if you 
have a multi-core box;

Cons:
     *    There is an overhead of using HTTP protocol webserver - if you 
aren't going to gain much from the parallelization of processes above 
you may find that writing a simple script which loops over all data 
would be more efficient...
     *    In your case we are probably looking at about 10ms (or less) 
the apache/http round tripping will probably take much more time than 
the actual processing...

On 03/02/2015 05:02, Alexandr Evstigneev wrote:
> Pre-loading is good, but what you need, I belive, is Storable module. 
> If your files contains parsed data (hashes) just store them as 
> serialized. If they containing raw data, need to be parsed, you may 
> pre-parse, serialize it and store as binary files.
> Storable is written in C and works very fast.
>
>
> 2015-02-03 7:11 GMT+03:00 Alan Raetz <[email protected] 
> <mailto:[email protected]>>:
>
>     So I have a perl application that upon startup loads about ten
>     perl hashes (some of them complex) from files. This takes up a few
>     GB of memory and about 5 minutes. It then iterates through some
>     cases and reads from (never writes) these perl hashes. To process
>     all our cases, it takes about 3 hours (millions of cases). We
>     would like to speed up this process. I am thinking this is an
>     ideal application of mod_perl because it would allow multiple
>     processes but share memory.
>
>     The scheme would be to load the hashes on apache startup and have
>     a master program send requests with each case and apache children
>     will use the shared hashes.
>
>     I just want to verify some of the details about variable sharing. 
>     Would the following setup work (oversimplified, but you get the
>     idea…):
>
>     In a file Data.pm, which I would use() in my Apache startup.pl
>     <http://startup.pl>, I would load the perl hashes and have hash
>     references that would be retrieved with class methods:
>
>     package Data;
>
>     my %big_hash;
>
>     open(FILE,"file.txt");
>
>     while ( <FILE> ) {
>
>           … code ….
>
>           $big_hash{ $key } = $value;
>     }
>
>     sub get_big_hashref {   return \%big_hash; }
>
>     <snip>
>
>     And so in the apache request handler, the code would be something
>     like:
>
>     use Data.pm;
>
>     my $hashref = Data::get_big_hashref();
>
>     …. code to access $hashref data with request parameters…..
>
>     <snip>
>
>     The idea is the HTTP request/response will contain the relevant
>     input/output for each case… and the master client program will
>     collect these and concatentate the final output from all the requests.
>
>     So any issues/suggestions with this approach? I am facing a
>     non-trivial task of refactoring the existing code to work in this
>     framework, so just wanted to get some feedback before I invest
>     more time into this...
>
>     I am planning on using mod_perl 2.07 on a linux machine.
>
>     Thanks in advance, Alan
>
>



---
This email has been checked for viruses by Avast antivirus software.
http://www.avast.com



-- 
 The Wellcome Trust Sanger Institute is operated by Genome Research 
 Limited, a charity registered in England with number 1021457 and a 
 company registered in England with number 2742969, whose registered 
 office is 215 Euston Road, London, NW1 2BE.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.