read big dbm-file

18/10/2007 - 13:04 von tlehmann | Report spam
Mahlzeit,

Ich habe ein sehr grosses DBM-File.
Jegliche versuche diese Datei zu lesen (auch nur partiell)
werden vom oom-Killer beendet.

Die Datei ist ca. 160 MB gross und es stehen nur
ca. 300 MB RAM (inkl. Swap) zur Verfuegung.
In beiden Versuchen scheint das Problem erst beim lesen
des Hash aufzutreten. (s.u.)
Evtl. ist das DBM-File komprimiert und benoetigt deshalb soviel RAM.


Gibt es noch eine Moeglichkeit die DB zu lesen und evtl. zu bearbeiten?



Torsten


#!//usr/bin/perl
BEGIN { @AnyDBM_File::ISA = qw(DB_File GDBM_File NDBM_File SDBM_File); }
use AnyDBM_File ;


my $db;
$db = $ARGV[0];

#&testdbmopen; ## (soll man eigentl. nicht mehr verwenden)
&testtie;

## sub
sub testdbmopen {
print "D: dbmopen";
dbmopen(%dbm, $db, 0444) || die "cannot open $db for read $!";
print "D: for keys";
## hang on keys
# 30084 foo 18 0 212m 207m 1804 R 46.9 54.0 0:06.04 readdbm
foreach $key (keys %dbm) { # step through all values
print "$key\t%dbm{$key}";
}
dbmclose(%dbm);
}

sub testtie {
print "D: tie";
tie %h, "AnyDBM_File",$db, O_RDONLY,0600
or die "Cannot open file $db: $!";
print "D: for keys";
## hang on keys
for my $key (keys(%h))
{
my $totscore = $h{"$key|totscore"};
my $count = $h{$key};
print "D: $count $totscore";
next unless defined($totscore);
}
}
 

Lesen sie die antworten

#1 J. Strübig
18/10/2007 - 14:18 | Warnen spam
Torsten L. schrieb:
sub testtie {
print "D: tie";
tie %h, "AnyDBM_File",$db, O_RDONLY,0600
or die "Cannot open file $db: $!";
print "D: for keys";
## hang on keys
for my $key (keys(%h))



versuch mal hier:
while( my ($key, $val) = each %h)

Struppi.

Ähnliche fragen