我在我的Rails應用程序創建如果記錄不存在
class Contact < ActiveRecord::Base
belongs_to :survey, counter_cache: :contact_count
belongs_to :voter
has_many :contact_attempts
end
class Survey < ActiveRecord::Base
has_many :questions
has_many :contacts
end
class Voter < ActiveRecord::Base
has_many :contacts
end
的聯繫由voter_id和survey_id的3款車型。我的應用程序的邏輯是,在任何給定的調查中,只能有一個選民聯繫人。
現在我正在使用下面的代碼來執行這個邏輯。我在聯繫人表中查詢與給定的voter_id和survey_id匹配的記錄。如果不存在,則創建它。否則它什麼都不做。
if !Contact.exists?(:survey_id => survey, :voter_id => voter)
c = Contact.new
c.survey_id = survey
c.voter_id = voter
c.save
end
顯然這需要一個select和insert插入查詢來創建1個潛在的聯繫人。當我一次添加潛在數千個聯繫人時。
現在我正在使用Resque來允許在後臺運行並遠離ui線程。我能做些什麼來加快速度,並提高效率?
如果你一次添加十萬,爲什麼不與BULK INSERT或其他一些做AR之外的機制? –