1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw(:all);
use Sys::Hostname;
our $VERSION = '0.01';
my @ips = map {
join '.',
map { int( rand(256) ) } 1 .. 4
} ( 1 .. 5_000 );
my $max_ips = $#ips;
use MaxMind::DB::Reader;
use MaxMind::DB::Reader::XS;
my $file = '/usr/local/share/GeoIP2/GeoIP2-City.mmdb';
my $reader = MaxMind::DB::Reader->new( file => $file ) or die;
my $reader_xs = MaxMind::DB::Reader::XS->new( file => $file ) or die;
my $fast_reader_xs = MaxMind::DB::Reader::XS->open( $file, 2 ) or die;
#use Data::Dumper;
#print Dumper( $fast_reader_xs->lookup_by_ip('24.24.24.24') );
my ( $reader_idx, $reader_xs_idx, $fast_reader_xs_idx ) = ( 0, 0, 0 );
print scalar(localtime), ' ', hostname, "\n";
print "MaxMind::DB::Reader ", $MaxMind::DB::Reader::VERSION, "\n";
print "MaxMind::DB::Reader::XS ", $MaxMind::DB::Reader::XS::VERSION, "\n";
print "libmaxminddb ", MaxMind::DB::Reader::XS->lib_version, "\n";
cmpthese(
-5,
{
'reader' => sub {
eval {
$reader->record_for_address(
$ips[ $reader_idx++ % $max_ips ] );
};
},
'reader_xs' => sub {
eval {
$reader_xs->record_for_address(
$ips[ $reader_xs_idx++ % $max_ips ] );
};
},
'fast_reader_xs' => sub {
eval {
$fast_reader_xs->lookup_by_ip(
$ips[ $fast_reader_xs_idx++ % $max_ips ] );
};
},
}
);
__END__
perl -Mblib ./benchmark/bench.pl
s/iter reader reader_xs
reader 42.1 -- -100%
reader_xs 0.104 40379% --
|