在Rails应用中使用parallel gem。
在并行块中执行where
和first_or_create
时,如果数据库具有多个唯一键将导致错误。
def method1
Parallel.each(users.each_slice(4).to_a) do |thread_users|
Parallel.each(thread_users, in_threads: 4) do |user|
save_users(user_infos)
end
end
end
def save_users(user_infos)
User.transaction do
user_infos.each do |user|
User.where(name: user[:name]).first_or_create!(age: user[:age])
end
end
end
即使在ActiveRecord::Base.connection.clear_query_cache
之前添加User.where
,结果相同。
error: Parallel::UndumpableException - ActiveRecord::RecordNotUnique: Mysql2::Error: Duplicate entry 'abc-1' for key 'name-number': INSERT INTO ...
如何避免呢?