QueryCache and AR objects

I was hoping that the Rails' QueryCache might cache the ActiveRecord
objects it creates and not just the SQL result set, but some
experimentation shows that this is not the case. For example:

ActiveRecord::Base.cache do

?> u = User.find(:first)

  u.name="z"
  u = User.find(:first)
end

returns a clean copy of the object.

My question is, is there a way to cache the ActiveRecord objects as
well? I have read that their construction is time consuming. I found
the plugin ActiveRecordContext (http://github.com/dcadenas/
active_record_context) but it was last updated *way* back in 2007, so
I wasn't sure it is the best thing to use (or if it even works with
the current Rails).

Thanks,
      --Paul

My question is, is there a way to cache the ActiveRecord objects as

well? I have read that their construction is time consuming.

I think that used to be the case, but I don’t think it is any more (which may be why the Query cache doesn’t cache them). Also, how many objects are you constructing? It should really only be a page worth, otherwise I’d use aggregate functions (if you’re just iterating anyway).

Cheers,

Andy

Thanks for the reply. I'm not sure about how many objects, but for
page (on which we are showing way, way too much information) we do
about 5000 SQL queries, a few of which might pull back 100 records or
so. I think a lot of those calls could be collapsed with eager
loading. But, lets say there are 6000 objects. On my system, I
calculated the object construction time (not including SQL time) as
being .000031s, which for 6000 objects adds up to 0.186s-- which is
not insignificant, though probably not our biggest performance issue.

I took a look at aggregate functions, and I don't think they would be
of much use in this case, but thanks for mentioning them because I
wasn't aware you could do that.

  --Paul

Wow!!! 5000 SQL queries!

I don’t know what you’re doing, but I hope you’re not allowing lots of people to view that page at the same time, MySQL meltdown :wink:

Cheers,

Andy