Hello, Is it safe to store ActiveRecord objects in a session? I want to avoid too much overhead. Perhaps storing the object id would suffice too, but is that safe? Bart --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Yes, you can store whole objects (as long as they can be marshaled). The potential pitfall is that, if your model changes, then you''ll have old instantiations of the model that don''t match the current, which depending on the model and changes, may not be a problem, or it might be disastrous. There are ways to deal with this, including wiping out all the sessions when you deploy a new version with those model changes, but that may not be desirable either. Yes, you can also store just the object id. For most purposes, that''s what I prefer to do these days. YMMV Bart Braem wrote:> Hello, > > Is it safe to store ActiveRecord objects in a session? I want to avoid too > much overhead. > Perhaps storing the object id would suffice too, but is that safe? > > Bart > > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Keep in mind that sessions are stored either as temp session files or in a database. I don''t think you''ll save much in terms of performance as you are either pulling the data from the session file on the web server or pulling it from the session database. My assumption is that the same cost in performance would occur whether you are actively pulling it from the DB every time or calling on a session object which is stored in the DB. A session is good for maintaining a constant state throughout an app, but shouldn''t be confused with caching. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
On Oct 6, 2006, at 8:33 AM, Bryan Haggerty wrote:> > Keep in mind that sessions are stored either as temp session files or > in a database. > > I don''t think you''ll save much in terms of performance as you are > either pulling the data from the session file on the web server or > pulling it from the session database. My assumption is that the same > cost in performance would occur whether you are actively pulling it > from the DB every time or calling on a session object which is stored > in the DB. > > A session is good for maintaining a constant state throughout an app, > but shouldn''t be confused with caching.Actually yes you should only store model id atrributes and simple string or numeric values in the session. Its a common misconception that the session should be the same speed as the database. It is not. If you store model objects in the sessions they can get stale and also these objects have to be marshalled and unmarshalled from the session on each hit after they are pulled from the filesystem or db. So it is better performance to store an id and do a loohup in the db to get it back when you need it. Don''t store model objects in the session, you should try to store as little as possible to maintain the state you need but no more. -Ezra --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
On 10/6/06, Ezra Zygmuntowicz <ezmobius-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > > > On Oct 6, 2006, at 8:33 AM, Bryan Haggerty wrote: > > > > > Keep in mind that sessions are stored either as temp session files or > > in a database. > > > > I don''t think you''ll save much in terms of performance as you are > > either pulling the data from the session file on the web server or > > pulling it from the session database. My assumption is that the same > > cost in performance would occur whether you are actively pulling it > > from the DB every time or calling on a session object which is stored > > in the DB. > > > > A session is good for maintaining a constant state throughout an app, > > but shouldn''t be confused with caching. > > > Actually yes you should only store model id atrributes and simple > string or numeric values in the session. Its a common misconception > that the session should be the same speed as the database. It is not. > If you store model objects in the sessions they can get stale and > also these objects have to be marshalled and unmarshalled from the > session on each hit after they are pulled from the filesystem or db. > So it is better performance to store an id and do a loohup in the db > to get it back when you need it. Don''t store model objects in the > session, you should try to store as little as possible to maintain > the state you need but no more. > > -Ezra >Ezra has a good point about speed and efficiency but if that''s not the issue then yeah you can save them in the session, albeit with a very important caveat: The whole AR model is not guarenteed to be saved in the session, just the type and id. The rest of the record can and will disappear and has to be pulled again from the database when needed. Thus, you *cannot* store unsaved AR objects in the session, for reasons of serializability (AR objects basically can''t be serialized in and of themselves). So you have to be careful about AR objects in the session, but yes it is possible. Jason --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Hi Bart, Consider that as soon as you modify the model code (i.e. rename an attribute), you will have no way to reconstruct the session stored instances of that model. In a production system this is not something really acceptable, unless you can stop everything and remove the all the sessions (or through sophisticated scripting). Mauro -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---
Bart Braem wrote:> Is it safe to store ActiveRecord objects in a session? I want to avoid too > much overhead.Thanks for your reactions, I''m not going to store the AR objects in the session. You''ve warned me enough... Bart --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk -~----------~----~----~----~------~----~------~--~---