Mathieu
Mathieu

Reputation: 4787

Rails 4 - Is there a performance win between using self. vs Model call in after_create callbacks

When creating a model Deal, I use an after_create to create 10 prizes on the prize table.

Is there a performance difference or any performance-related (like garbage colleciton maybe) that would help me decide between a and B

A

after_create :create_prizes

 def create_prizes
   300000.times do
      prizes = self.prizes.create(:deal_id => self.id, :admin_user_id => self.admin_user_id)
    end
 end

B

after_create :create_prizes

 def create_prizes
  300000.times do
    prizes = Prize.create(:deal_id => self.id, :admin_user_id => self.admin_user_id)
  end
end

B

Note that when the Admin creates a deal, it will create a very large number of prizes (up to 300,000).

Thanks for any help,

Mathieu

Upvotes: 0

Views: 58

Answers (1)

dinomix
dinomix

Reputation: 976

Option B should be slightly faster as AR does't need to traverse the relations to find the foreign key. However, inserting 300,000 records will be slow either way.

Consider generating a SQL INSERT statement or passing an array to create.

Prize.create([{deal_id: 1}, {deal_id: 2}])

https://www.coffeepowered.net/2009/01/23/mass-inserting-data-in-rails-without-killing-your-performance/

Upvotes: 2

Related Questions