我有260万条记录,我试图为其生成公共ID。在当地最多花了3个小时。
在heroku上运行rake任务需要相当长的时间:
Episode.where(public_id: nil).find_each do |e|
Rails.logger.info "updating #{e.id} ..."
e.set_public_id
e.save
end
set_public_id
只需生成代码并检查它是否重复:
code = generate_code
self.public_id = code
dupe = self.class.where(public_id: self.public_id)
查看记录器输出,似乎每隔约30分钟完成一批1000次。我在创建列时向:public_id
添加了一个索引。
我可以做些什么来加快速度?
答案 0 :(得分:0)
我认为find_each
默认批量大小对于heroku来说太多了。最终使其工作的是将批量大小减少到' 100'
.find_each(batch_size: 100)
答案 1 :(得分:0)
确定find_each
中的批次大小是一个很好的决定,因为默认的批次大小为1000,所以您还可以做的另一件事是将其与.lazy
,{{1} }