how big are these data structures?

200k?  2mb?  20mb?

if they're not too big, you could just use memcached.

        http://danga.com:80/memcached/
        http://search.cpan.org/~bradfitz/Cache-Memcached-1.15/Memcached.pm

its ridiculously painless to implement. i found it easier that a lot of other approaches.

but if you have 50mb of data, i'd rethink what you're doing.

you're just going to keep getting screwed when your cache db updates (because the updates will only be per-child, not per parent process). so you've got the potential for a 50MB parent process having children that read in 50mb each in data? thats a cascading nightmare.

if you need to precache such giant data structures, i'd do something like 2 tiered server
        apache a - talks to web users / load balancer
                                sends data / whatever for specific processing to
daemon b - either apache or some custom server, which handles precaching of db and parsing requests from apache
        db - datastore

having all of that data in modperl would be a nightmare though. even with memcached, you'll update fast and everyone can access it, but you're going to keep eating memory. if every session is going to toss though 20mb hashes of info, i'd keep that info out of apache entirely




On Mar 8, 2006, at 12:16 AM, Will Fould wrote:

at this point, the application is on a single machine, but I'm being tasked with moving our database onto another machine and implement load balancing b/w 2 webservers.

william


On 3/7/06, Will Fould <[EMAIL PROTECTED]> wrote:
an old issue:
"a dream solution would be if all child processes could *update* a large global structure."

we have a tool that loads a huge store of data (25-50Mb+) from a database into many perl hashes at start up: each session needs access to all these data but it would be prohibitive to use mysql or another databases for multiple, large lookups (and builds), at each session: there are quite a few structures, each are very big.

if the data never changed, it would be trivial; load/build just at start-up.

but since the data changes often, we use a semaphore strategy to determine when childern should reload/rebuild the structures (after updates have been made).

this is painful. there has got to be a better way of doing this - I've seen posts on memcache and other, more exotic animals.

can someone point me in the right direction: a reference/read, or a stable modules that exist for our situation?

Reply via email to