Ruby on rails 按比赛条件处理查找或创建

Ruby on rails 按比赛条件处理查找或创建,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,正如许多人所知,这很容易受到竞争条件和同时请求的影响 一种解决办法是: 验证:唯一\u id,唯一性:true 然后 begin Model.find_or_create_by(attributes) rescue ActiveRecord::RecordNotUnique retry end 有没有其他没有唯一性约束的方法?这是一个经常发生的操作,如果我没有弄错的话,唯一性约束每次都需要运行整个DB表,IMO很慢。正确的方法是在“unique_id”上添加UK,这将使用BTree索引

正如许多人所知,这很容易受到竞争条件和同时请求的影响

一种解决办法是:

验证:唯一\u id,唯一性:true

然后

begin
  Model.find_or_create_by(attributes)
rescue ActiveRecord::RecordNotUnique
  retry
end

有没有其他没有唯一性约束的方法?这是一个经常发生的操作,如果我没有弄错的话,唯一性约束每次都需要运行整个DB表,IMO很慢。

正确的方法是在“unique_id”上添加UK,这将使用BTree索引,这意味着不慢,或者可以使用乐观锁