The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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.