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