Quero exportar meus dados de vendas para um arquivo CSV em uma tarefa rake. A tabela de vendas tem aproximadamente 100 milhões de entradas. Como posso otimizar esse código? Ele parece ficar mais lento quanto mais tempo é executado.
sales = Sales.where(year: 2024)
BATCH_SIZE = 10_000
header_names = %w[user_id article_id amount currency date]
batch = []
File.open(filepath, 'w') do |file|
sales.find_each(batch_size: BATCH_SIZE)do |sale|
batch << sale.slice(*header_names).values.join(';')
if batch.size >= BATCH_SIZE
file.puts batch.join("\n")
batch.clear
end
end
file.puts batch.join("\n") unless batch.empty?
end
Isso me leva aproximadamente 23 minutos para exportar 17 milhões de entradas.