[Seaside] Re: Seaside & Ruby Rails Compared

Avi Bryant avi.bryant at gmail.com
Fri Sep 9 06:31:09 CEST 2005


On Sep 8, 2005, at 7:27 PM, Victor Rodriguez wrote:
>
> My concern is that it is very easy to blow away the  object holding
> the data. I guess I need to play around, but I suppouse you initialize
> the class variable in a (class-side) initialize method, then call this
> method using the workspace or some such. Will a class variable set
> like that survive a file-in?

It might not - but keep in mind that the damage isn't permanent until  
you save the image.  If you blew away your data, you'd presumably  
notice right away, and could just revert to the last saved state -  
which hopefully is from right before doing anything dangerous like  
loading new code.  And of course that's not even counting all the  
backup copies of the image you've no doubt been making...

One of the projects I'm working on right now was designed from the  
start to keep the entire data set in the image - we need the  
performance of having everything in RAM, and individual data sets are  
unlikely to get above 100MB or so (there will be many such datasets,  
but those can be partitioned across multiple images, possibly on  
multiple machines).  We've gone through a lot of iterations of how to  
avoid data loss, however, with various vaguely prevayler like  
strategies for logging transactions to external files and databases.   
One of the biggest problems has been evolving the persistence to keep  
pace with a changing data model: not only do you need to extend the  
logging mechanism to support any changes, you've also got to deal  
with all of the historical transactions in the older format on disk.   
In-image migrations are, in general, much easier.     Frankly, just  
using OSProcess to fork and save timestamped copies of the image  
every N minutes is looking pretty good right now.  The question is  
whether you can find an acceptable value of N: high enough that  
you're not using all of your resources on image saves, low enough  
that you're unlikely to ever lose more than a single transaction in  
case of power loss (which is the best you can ever guarantee  
anyway).  Whether or not any such N exists is going to be very  
application-dependent.

Of course, we can only consider this at all because this one project  
happens to have highly partitionable data.  For most of the other  
applications I've worked on, it simply wouldn't be an option to keep  
everything in RAM.  But when it is an option, it's a very appealing one.

Avi


More information about the Seaside mailing list