Требование равно
Мы получаем огромный набор данных из базы данных (> 1 млрд. Записей) и должны экспортировать его в файл CSV или Excel.
В настоящее время реализация использует CSV класс CSV.generate
CSV.generate(headers: true) do |csv|
csv << header
@obj.find_each do |c|
arr = [c.id,c.name,soon]
csv << array
end
end
и отправка вывода на
Zip::File.open(file, Zip::File::CREATE) do |zip|
zip.get_output_stream("test.#{@format}") { |f| f.puts(convert_to_csv) }
end
Вся эта операция выполняется другими отложенными заданиями
Это хорошо работает, когда запись <20000
Но когда строки начинают расти, возникают проблемы с памятью. </p>
Я думал о том, чтобы разбить запись на части, скажем, 1 миллион строк в 50 файлах (1 миллион / 20000) (csv1.csv, csv2.csv, csv3.csv, csv4.csv, csv5.csv) и затем выполнить конкат их в один файл или сжать все файлы вместе (более быстрый способ)
Может ли кто-нибудь дать мне представление, как я могу начать с него.