Выборка данных из большого файла

Здравствуйте. Есть файл, весом в 64 гб. Там больше 1кк строк. Нужно сделать из него выборку. Т.е. сравниваем каждую строку с шаблоном(регулярка), и, если совпало, то записываем в другой файл. А проблема вся в скорости. Я написал скрипт на перле, но выборка из такого файла занимает более 3-х суток(само регулярное выражение большое), что очень много. Есть какие нибудь идеи? Вообще, не обязательно делфи, главное что бы это можно было как то ускорить.Заранее спасибо за ответы.
6 ответов

да там в принципе дело в переборе. может вам все-таки разбить файл на части и попробовать распараллелить?


может вам все-таки разбить файл на части и попробовать распараллелить?
Не может, а обязательное условие =) На ПК просто ОЗУ не хватит на это, а если хватит, то будет он до второго пришествия ждать предзагрузки а затем ещё и окончания поиска. Режьте файл, переделайте его в БД, а из БД делайте выборку. БД по-шустрее будет в плане всего.


Не обязательно базу создавать. Тот же FileStream совершенно не читает весь файл в ОП. Читать поблочно, отказаться от регулярок, использовать для парсинга Pos, PosEx. 3-ое суток как минимум не будет. И распараллелить не помешает как выше подсказывают


Всем спасибо за ответы, пойду пробовать.


Хочу уточнить у тех, кто сталкивался с такими конскими объемами данных, если файл данных читать в оперативку блоками скажем по 2Гб и уже там обрабатывать - будет существенно быстрее или не особо?


igh0st, нет, не будет. В систме есть встроеные средства для очень больших файлов. Называется "Файловый маппинг".