NAME
Apache2::FileHash - Methods to store and retrieve files using a hashing methodology.
SYNOPSIS
use Apache2::FileHash;
<VirtualHost *:80>
    <Location /storeFile>
        PerlHeaderParserHandler Apache2::FileHash::PUT
        <Limit PUT> 
            order deny,allow
            deny from all 
            allow from 192.168.5.5
        </Limit> 
    </Location>
 
    <Location /getFile>
        PerlHeaderParserHandler Apache2::FileHash::GET
    </Location>
</VirtualHost>
<VirtualHost *:8080>
    <Location /storeFile>
        PerlHeaderParserHandler Apache2::FileHash::PUT
        <Limit PUT> 
            order deny,allow
            deny from all 
            allow from 192.168.5.5
        </Limit> 
    </Location>
    <Location /getFile>
        PerlHeaderParserHandler Apache2::FileHash::GET
    </Location>
</VirtualHost>
 *** startup.pl ***
  #!/opt/perl
  use strict;
  use warnings;
  use lib qw(/opt/mod_perl);
  use lib qw(/opt/mod_perl/lib);
  use lib qw(/opt/Apache2);
  use lib qw(/opt/Apache2/FileHash);
  use Apache2::FileHash;
  use Apache2::FileHash::PUT;
  use Apache2::FileHash::GET;
  use MIME::Types;
  my @array = ();
  foreach my $dir (@INC) {
      my $file = "$dir/$Apache2::FileHash::ConfigFile";
      eval {
          @array = &YAML::Tiny::LoadFile($file) or die("LoadFile($YAML::Tiny::errstr)");
      };
      unless ($@) {
          last;
      }
  }
  $Apache2::FileHash::Config = \@array;
  BEGIN { MIME::Types->new() };
  1;
  *** startup.pl ***
  *** FileHash.yml **
  ---
  GLOBALS:
    base_dir: '/tmp'
  BUCKETS:
    -
      method: http
      name: localhost
      port: 80
    -
      method: http
      name: localhost
      port: 8080
  METHOD:
    GET:
      root_uri: '/getFile'
    PUT:
      root_uri: '/storeFile'
  *** FileHash.yml ***
DESCRIPTION
This is an attempt at solving a problem with hosting millions of static files. It should be straight forward enough to take a suite of n servers and store x files across them.
It is assumed that each bucket is publically accessible and that the disks may or may not be. It is non-trivial to add a bucket later.
SEE ALSO
Apaceh2:::RequestRec
AUTHOR
Brian Medley, <freesoftware@bmedley.org<gt>
COPYRIGHT AND LICENSE
Copyright (C) 2012 by Brian Medley
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.8 or, at your option, any later version of Perl 5 you may have available.