X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FUSDB.pm;h=89cd9fe5661c9e1988e6e4a2954f58fdf9a2d85f;hb=8178d787d7cc8040fa8958197582bba5c80e6f59;hp=3b62fa5d59c5d995b5371a1e4c4a4e9460533b95;hpb=08912ec52dee25bbe00aef10387e1822dcd574bc;p=spider.git diff --git a/perl/USDB.pm b/perl/USDB.pm index 3b62fa5d..89cd9fe5 100644 --- a/perl/USDB.pm +++ b/perl/USDB.pm @@ -5,6 +5,8 @@ # # +package USDB; + use strict; use DXVars; @@ -19,14 +21,19 @@ $BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0)) $main::build += $VERSION; $main::branch += $BRANCH; -use vars qw(%db $present); +use vars qw(%db $present $dbfn); -my $dbfn = "$main::data/usdb.v1"; +$dbfn = "$main::data/usdb.v1"; sub init { end(); - tie %db, 'DB_File', $dbfn and $present = 1; + if (tie %db, 'DB_File', $dbfn, O_RDONLY, 0664, $DB_BTREE) { + $present = 1; + dbg("US Database loaded"); + } else { + dbg("US Database not loaded"); + } } sub end @@ -64,17 +71,28 @@ sub getcity # # Note that this removes and overwrites the existing DB file # You will need to init again after doing this -# +# sub load { + return "Need a filename" unless @_; + # create the new output file my $a = new DB_File::BTREEINFO; $a->{psize} = 4096 * 2; - my $s; - if ($s = -s $dbfn && $s > 1024 * 1024) { - $a->{cachesize} = int(($s / (1024*1024)) / 2) * 1024 * 1024; + my $s = 0; + + # guess a cache size + for (@_) { + my $ts = -s; + $s = $ts if $ts > $s; + } + if ($s > 1024 * 1024) { + $a->{cachesize} = int($s / (1024*1024)) * 3 * 1024 * 1024; } + +# print "cache size " . $a->{cachesize} . "\n"; + my %dbn; if (-e $dbfn ) { syscopy($dbfn, "$dbfn.new") or return "cannot copy $dbfn -> $dbfn.new $!"; @@ -86,9 +104,10 @@ sub load for (@_) { my $fn = shift; my $f = gzopen($fn, "r") or return "Cannot open $fn $!"; - while ($f->gzreadline) { - chomp; - my ($call, $city, $state) = split /\|/; + my $l; + while ($f->gzreadline($l)) { + chomp $l; + my ($call, $city, $state) = split /\|/, $l; # lookup the city my $s = "$city|$state"; @@ -108,6 +127,7 @@ sub load untie %dbn; rename "$dbfn.new", $dbfn; + return (); } 1;