这段时间项目里遇到有这样一个rake,所以就把它分享了。
valid_hotels_ids = [1, 2, 3, ...]
这是一个需要update的hotel表的id数组。
法一:逐一update
统计了一下。四万条数据, 15分钟, 这效率低得。
法二:批量update
统计了一下。同样是四万条数据,半分钟不到就OK了,可见批量update的效率之高喔。
valid_hotels_ids = [1, 2, 3, ...]
这是一个需要update的hotel表的id数组。
法一:逐一update
valid_hotels_ids.each do |id|
Hotel.update(id, "status = 'VALID'")
end
统计了一下。四万条数据, 15分钟, 这效率低得。
法二:批量update
valid_hotels_ids.each_index do |index|
if index == valid_hotels_ids.length - 1
Hotel.update_all("status = 'VALID'", "id in (#{valid_hotels_ids[(index-index%500)..index].join(',')})")
break#这句要加上,不然当length为500的倍数时,下面这句也会被执行,造成重复update
end
if (index + 1) % 500 == 0
Hotel.update_all("status = 'VALID'", "id in (#{valid_hotels_ids[index - 499..index].join(',')})")
end
end
统计了一下。同样是四万条数据,半分钟不到就OK了,可见批量update的效率之高喔。