Как осуществить парсинг 5-7 ГБ-ных файлов?

Подскажите, какие методы есть для работы с массивными объектами в памяти, мне нужно считать файл весом порядка 5-6 гб, разбить его на столбцы и отфильтровать и дедуплицировать по столбцам, такие объемы данных в памяти не очень подержишь, что можно придумать, чтобы это осуществить?
  • Вопрос задан
  • 3317 просмотров
Решения вопроса 1
@caper
Если структура файла известна (например, файл с разделителями), то:
1. перегон в промежуточную таблицу MS SQL с использованием BULK INSERT (либо bcp) (0,5 Гб за 12 сек, 4 Гб за 1,5 мин.)
2. проверки/преобразования данных и раскладка в нужные таблички уже из промежуточной таблицы (зависит от сложности проверок/преобразований и т.п.)
Если же структура неизвестна, все несколько хуже... либо порционно читать, либо - Memory-mapped files?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
Способ "в лоб": перегнать в базу данных и уже в ней делать всё, что угодно.
Ответ написан
Комментировать
@portfelio
Если бы вы привели пример файла... С абстрактными же данными, можно сказать с уверенностью, вам подойдет Hadoop.
Ответ написан
Комментировать
@gleb_kudr
FileStream читает ваш файл кусками как вы хотите. Он последовательно возвращает массив байтов, с этим массивом уже делаете что угодно (например, обрабатываете и пишете в другой файл). Надо только нормально продумать алгоритм, чтобы сделать это с минимальным количеством проходов.
StreamReader делает то же самое для текстовых файлов.
Ответ написан
Комментировать
afiskon
@afiskon
Я так понимаю, у вас там просто строчки? Тогда cat ... | cut -d '|' -f 1,2,3 | sort - как-то так.

Или напишите скрипт на Perl/Python/чем угодно. 5-7 Гб - не так уж много. Если только вам не нужны какие-то еще группировки с другими файлами, тогда да, используйте какую-нибудь РСУБД.
Ответ написан
Комментировать
vipuhoff
@vipuhoff Автор вопроса
Всем спасибо! Буду читать файлы через FileStream, предварительно обрабатывать и укладывать в БД!
Ответ написан
Комментировать
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
я недавно писал мелкую утилитку как раз для создания из csv файла инструкций tsql для вставки в таблицу. могу подкинуть исходники на сишарпе, чуть допишете и будете прямо в таблицу писать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы