![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка текстовых файлов больших размеров (2 - 3 ГГб) [D7, WinXP]
bsframer © (2006-04-26 08:59:00)Здраствуйте, Уважаемые. Может вопрос и глупый, но мучаюсь уже второй день. Есть текстовый файл большого размера (2-3 ГГб), строки порядка 200 символов. Вопрос, как можно провести в нем сортировку по возрастанию (убыванию)? Пробовал ReadLn, BlockRead, TFileStream - медленно (нужно чтоб 50 МГб примерно за 5 минут пробегало). Через TStringList можно (100 МГб - 2,5 минуты), но в него влазит порядка 500 МГб (Оперативки 1 ГГб), дальше сообщение Out of Memory и стопор. Разрезание файла на куски думал, но это геморойно. Слышал про FileMapping, но не знаю как с ним работать и подойдет ли он вообще. Может есть какой способ, чтоб оперативки меньше жрало и работало быстрее, или я не так пробовал?
bsframer (2006-04-26 09:57:00) [21]Еще с собой Оракл таскать, нет уж увольте.
ANB (2006-04-26 09:54:00) [22]
> bsframer (26.04.06 09:52) [9]
1. Самая доступная - FB или IB
2. Самая навороченная - Оракл - там можно вообще все на PL/SQL написать, он с файлами работать умеет и довольно шустро.
ANB (2006-04-26 09:52:00) [23]
> СУБД можно, но не нужно. Нужно именно стандартными стредствами
> Delphi или WinAPI
Ну прям как у нас на флоте :
- Бери лом и мети плац
- А можно я метлу возьму - будет быстрее и чище
- А мне не надо, чтобы было быстрее и чище, мне надо чтобы ты за<Удалено модератором>
Вам шашечки или ехать ?
Самый быстрый способ (если уж в файле все надо хранить) :
1. Загрузить все в таблицу БД
2. Проиндексировать
3. Выгрузить обратно в файл
bsframer (2006-04-26 09:52:00) [24]Хорошо, а какая СУБД наиболее подходящая, для решения данной задачи. Просто я использовал импорт в mdb с последующим экспортом обратно. Сортировка файла 1 ГГб заняла примерно 10 часов.
Сергей М. (2006-04-26 09:48:00) [25]
> bsframer (26.04.06 09:16) [3]
>
> СУБД можно, но не нужно
Тогда тебе придется изобрести еще один велосипед.
Индексы так или иначе придется строить, но в случае с СУБД нет необходимости реализовывать механизм индексации - он там уже реализован.
bsframer (2006-04-26 09:39:00) [26]Спасибо, уже Кнута изучаю
TUser (2006-04-26 09:31:00) [27]> Разрезание файла на куски думал, но это геморойно.
Смотри на алгоритмы внешней сортировки. От предков с гораздо меньшими ОЗУ, чем у тебя, много осталось. Например, в книге Вирта описаны, ад и много где еще.
bsframer (2006-04-26 09:30:00) [28]А это где?
Anatoly Podgoretsky (2006-04-26 09:21:00) [29]Стандартных средств Дельфи и WinAPI нет.
У Кнута хорошо расписаны различные алгоритмы сортировка, аж целый толстенный том.
bsframer (2006-04-26 09:16:00) [30]СУБД можно, но не нужно. Нужно именно стандартными стредствами Delphi или WinAPI
Сергей М. (2006-04-26 09:09:00) [31]Воспользуйся готовой СУБД.
MBo (2006-04-26 09:05:00) [32]Нужно почитать о внешней сортировке.
Простая - слиянием, но для нее требуется дополнительное место (размер файла)