[Pdx-pm] Instance hash ( keyed array )

Eric Wilhelm scratchcomputing at gmail.com
Wed Oct 18 01:51:47 PDT 2006


# from Roderick A. Anderson
# on Tuesday 17 October 2006 01:32 pm:

>I need to build a, sometimes, quite large hash table ( 40,000 -
> 470,000 records ) one record at a time.  

Is the question about a speed/memory problem or code style?  I would 
expect to see another comma before it became an issue (if that's really 
the top of the expected scope (unless you're trying to do build it up 
from zero for every hit on a webserver (don't do that.)))

  $ time perl -e 'my %h; $h{$_} = [$_, $_, $_] for(0..500_000);'

  real    0m3.456s
  user    0m3.261s
  sys     0m0.188s

> The method will return the 
> key it is used to the caller so it can be used to key the rest of the
> data not passed in to the method.

Sounds like a possible encapsulation problem.

I'll also second the comments about the join -- save that for output.  
And I'll throw in a cringe regarding the global (hopefully just 
package) variables $FldDelim and $RcdDelim (make that 4 cringes: one 
for camel casing plus the global per each.)

But we're just guessing at the real problem, which is why you need to 
build this hash table and how often you have to build it.  If this is 
anything besides some one-off code, you should really ponder if there 
is a way to avoid it because there's no way to do big cheaply, 
especially often.

--Eric
-- 
Speak softly and carry a big carrot.
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------


More information about the Pdx-pm-list mailing list