in reply to Re: Re: optimize this code?
in thread Optimization of DB_File sorting and processing code

After sleeping on this, I realized the obvious, which is that each $matrix[$j]->[$i] represents potential file I/O, since %matrix is tied to a DBM. Duh.

I can't believe that building the data structures is taking that large a percentage of the total time, even for that many cells. This simple test

my @array; my $t = time(); for my $i ( 0 .. 499 ) { for my $j ( 0 .. 6264 ) { $array[$i]->[$j] = 47; } } print "Elapsed: ", time() - $t, " seconds\n";
ran in 17 seconds on my 400Mhz laptop, so it has to be the disk I/O that's killing you.

If you're unable to use a different DBM representation (such as DB_TREE), then you might try pulling keys and values out of the DBM in whatever order it prefers to give them to you, and then sort them by key in memory. By pulling out the keys and sorting before going after the values, you might be trashing around a bit in the file.

Replies are listed 'Best First'.
Re: Re: Re: Re: optimize this code?
by Evanovich (Scribe) on Feb 11, 2002 at 17:40 UTC
    Hi dws--I did your test on my computer, and you're right, it only took eight seconds. Would you mind elaborating a bit about how to pull keys and values out of the DBM? Maybe a little bit of example code would make it easier to understand.... Thanks so much, Evan