Моя компания каждый месяц получает набор файлов CSV, полный информации о банковском счете, который мне нужно импортировать в базу данных.Некоторые из этих файлов могут быть довольно большими.Например, один занимает около 33 МБ и около 65 000 строк.
Сейчас у меня есть приложение Symfony / Doctrine (PHP), которое читает эти CSV-файлы и импортирует их в базу данных.В моей базе данных около 35 разных таблиц, и в процессе импорта я беру эти строки, разделяю их на составляющие объекты и вставляю в базу данных.Все это прекрасно работает, за исключением того, что оно медленно (каждая строка занимает около четверти секунды) и использует много памяти.
Использование памяти настолько плохо, что мне приходится разделять своиCSV файлы.Файл с 20 000 строками едва справляется. К тому моменту, когда он подходит к концу, у меня примерно 95% использования памяти.Импортировать этот файл из 65 000 строк просто невозможно.
Я обнаружил, что Symfony является исключительной средой для создания приложений, и обычно я бы не стал использовать что-либо еще, но в этом случае я готов броситьвсе мои предубеждения выходят в окно во имя спектакля.Я не привержен какому-либо конкретному языку, СУБД или чему-либо еще.
Переполнение стека не любит субъективные вопросы, поэтому я постараюсь сделать его как можно более субъективным: для тех из васу вас есть не только мнение, но и опыт импорта больших файлов CSV , какие инструменты / практики вы использовали в прошлом , которые были успешными?
Например, выпросто используйте Django ORM / OOP, и у вас не было проблем?Или вы читаете весь файл CSV в память и готовите несколько громадных INSERT
заявлений?
Опять же, я хочу не просто мнение, а то, что действительно работало для вас в прошлом.
Редактировать: я не просто импортирую таблицу CSV из 85 столбцов в одну таблицу базы данных из 85 столбцов.Я нормализую данные и помещаю их в десятки разных таблиц.По этой причине я не могу просто использовать LOAD DATA INFILE
(я использую MySQL) или любую другую функцию СУБД, которая просто читает в файлах CSV.
Кроме того, я не могу использовать какие-либо решения для Microsoft.