Google Groups Home
Help | Sign in
Eager loading optimization patch
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  4 messages - Collapse all
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
Pratik  
View profile
 More options Oct 28 2007, 2:34 pm
From: Pratik <pratikn...@gmail.com>
Date: Sun, 28 Oct 2007 18:34:46 +0000
Local: Sun, Oct 28 2007 2:34 pm
Subject: Eager loading optimization patch
Hi,

I've uploaded a patch to optimize eager loading, which changes the
code to spend less time in ruby -
http://dev.rubyonrails.org/ticket/10011

The problem is because of following line in
associations.rb:#construct_associations :
collection.target.push(association) unless
collection.target.include?(association)

This basically compares every processed object with the new object, to
see if it hasn't been instansiated already.

For testing, I created two simple models :

class Person < ActiveRecord::Base
  has_many :items
end

class Item < ActiveRecord::Base
  belongs_to :person
end

Data : 1 Person and 1000 items belonging to that person.
Performance Script : http://pastie.caboo.se/111774
Before the patch : http://m.onkey.org/before.html
After the patch : http://m.onkey.org/after.html

Please test the patch if you can and also post your comments/suggestions.
--
Cheers!
- Pratik
http://m.onkey.org


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Tarmo Tänav  
View profile
 More options Oct 28 2007, 3:08 pm
From: Tarmo Tänav <ta...@itech.ee>
Date: Sun, 28 Oct 2007 21:08:53 +0200
Local: Sun, Oct 28 2007 3:08 pm
Subject: Re: [Rails-core] Eager loading optimization patch
Looks interesting.

I don't have time to test this but have you tried to eager load several
has_many associations at once (so there are M*N result rows)
and compare the memory consumption of the new approach with the old one?

On P, 2007-10-28 at 18:34 +0000, Pratik wrote:


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Mark Reginald James  
View profile
 More options Oct 28 2007, 9:39 pm
From: Mark Reginald James <m...@bigpond.net.au>
Date: Mon, 29 Oct 2007 12:39:56 +1100
Local: Sun, Oct 28 2007 9:39 pm
Subject: Re: Eager loading optimization patch

Pratik wrote:
> I've uploaded a patch to optimize eager loading, which changes the
> code to spend less time in ruby -
> http://dev.rubyonrails.org/ticket/10011

> The problem is because of following line in
> associations.rb:#construct_associations :
> collection.target.push(association) unless
> collection.target.include?(association)

> This basically compares every processed object with the new object, to
> see if it hasn't been instansiated already.

How does this compare to Fred Cheung's patch?

http://groups.google.com/group/rubyonrails-core/msg/b4da8cedcd73eaae

--
We develop, watch us RoR, in numbers too big to ignore.


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Frederick Cheung  
View profile
 More options Oct 29 2007, 3:54 am
From: Frederick Cheung <frederick.che...@gmail.com>
Date: Mon, 29 Oct 2007 07:54:20 +0000
Local: Mon, Oct 29 2007 3:54 am
Subject: Re: [Rails-core] Re: Eager loading optimization patch

On 29 Oct 2007, at 01:39, Mark Reginald James wrote:

That was rather fugly :-)  Array#uniq! basically builds up a hash and  
then collects the things in the hash, so it should be pretty similar.  
The one possible area of concern (as pointed out by tarmo) is memory  
consumption with a large result set.

Fredd


    Reply to author    Forward  
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »

Create a group - Google Groups - Google Home - Terms of Service - Privacy Policy
©2008 Google