From: Joel VanderWerf Date: 2009-04-21T08:58:32+09:00 Subject: Re: Accessing ruby objects across VMs Piyush Ranjan wrote: > I have 1 ruby instance running for a website. I do heavy polling using in > memory data and to do run a few more. I have all my data stored in a MySQL > DB. Right now whenever an entry is made to this DB (containing only a single > table), I cache this data in memory and that serves my purpose. Now as the > traffic is increasing I need to start more ruby instances. Is there any way > to store this data in a single in-memory location and access it from all > other vms ? > > There are a few options that come to my mind like > 1. Storing in a memcache > 2. Storing in localmemcache > The problem with both of these options is that I need to store heavily > nested objects. If I do that in memcache I may have to do using something > like Marshal dump and load which is a little slow for my liking. > Other option could be to keep seperate copies in all VMs and refresh it > using a hhtp get call to all VMs whenever the data changes in the DB. > > Now the question is , is there a way to access in a shared manner between > all the VMs ? Or am I mssing something very obvious here? or is it not > doable ? AFAIK there's no way for two VMs to share live, writable object storage. Looks like the choice is between deserializing on every read (opts 1 and 2) vs. deserializing on every write (your "other option"). So if reads outnumber writes, as they often do, the other option might be better. You could use drb (which does marshal over sockets) instead of http for this. Probably faster, and certainly easier to use. Use the drbunix:/path/to/socket protocol instead of tcp, and it will be even faster (maybe 50%, in my experience). YMMV, and standard cautions against premature optimization apply.... -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407