read big dbm-file

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 { [at] 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\n";
dbmopen(%dbm, $db, 0444) || die "cannot open $db for read $!\n";
print "D: for keys\n";
## 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}\n";
}
dbmclose(%dbm);
}

sub testtie {
print "D: tie\n";
tie %h, "AnyDBM_File",$db, O_RDONLY,0600
or die "Cannot open file $db: $!\n";
print "D: for keys\n";
## hang on keys
for my $key (keys(%h))
{
my $totscore = $h{"$key|totscore"};
my $count = $h{$key};
print "D: $count $totscore\n";
next unless defined($totscore);
}
}
tlehmann [ Do, 18 Oktober 2007 13:04 ] [ ID #1848635 ]

Re: read big dbm-file

Torsten L. schrieb:
> sub testtie {
> print "D: tie\n";
> tie %h, "AnyDBM_File",$db, O_RDONLY,0600
> or die "Cannot open file $db: $!\n";
> print "D: for keys\n";
> ## hang on keys
> for my $key (keys(%h))

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

Struppi.
struebig [ Do, 18 Oktober 2007 14:18 ] [ ID #1848640 ]

Re: read big dbm-file

Torsten L. wrote:
>
> Ich habe ein sehr grosses DBM-File.
> Jegliche versuche diese Datei zu lesen (auch nur partiell)
> werden vom oom-Killer beendet.
^^^^^^^^^^
Was ist das? Hast du eine Fehlermeldung?

> 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.

Es ist eigentlich nicht Sinn einer DBM-Datei, komprimiert
oder komplett im Speicher gehalten zu werden.

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

Dein Programm ist mir zu krautig, um es genauer anzugucken.
Allgemeiner Tip: Setze

use strict;
use warnings;

an den Anfang und reduziere das Programm auf die
wenigen relevanten Zeilen.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank Seitz [ Do, 18 Oktober 2007 15:52 ] [ ID #1848644 ]

Re: read big dbm-file

In article <ff7ive$e44$1 [at] news1.zdv.uni-mainz.de>,
"J. Strübig" <struebig [at] uni-mainz.de> writes:
>
> versuch mal hier:
> while( my ($key, $val) = each %h)

Danke. Funktioniert.

Torsten
tlehmann [ Do, 18 Oktober 2007 16:21 ] [ ID #1848646 ]

Re: read big dbm-file

On 18 Okt., 15:52, Frank Seitz <devnull4... [at] web.de> wrote:
> Torsten L. wrote:
>
> > Ich habe ein sehr grosses DBM-File.
> > Jegliche versuche diese Datei zu lesen (auch nur partiell)
> > werden vom oom-Killer beendet.
>
> ^^^^^^^^^^
> Was ist das? Hast du eine Fehlermeldung?
>
> > 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.
>
> Es ist eigentlich nicht Sinn einer DBM-Datei, komprimiert
> oder komplett im Speicher gehalten zu werden.
>
> > Gibt es noch eine Moeglichkeit die DB zu lesen und evtl. zu bearbeiten?
>
> Dein Programm ist mir zu krautig, um es genauer anzugucken.
> Allgemeiner Tip: Setze
>
> use strict;
> use warnings;
>
> an den Anfang und reduziere das Programm auf die
> wenigen relevanten Zeilen.

..=2E. &und &laß &die & weg, &wo &sie &nicht &gebraucht &werden.
Ingo Menger [ Fr, 19 Oktober 2007 10:14 ] [ ID #1849724 ]
Perl » de.comp.lang.perl.misc » read big dbm-file

Vorheriges Thema: print Befehl hängtgelegentlich
Nächstes Thema: Schlüssel festlegen bei "GnuPG-0.09", Gibt es diese Option???