![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
На машине стоит 4 гб оперативки.
Есть 10 файлов общим весом 6 Гб. Их необходимо распарсить и составить 1 файл с отфильтрованными и объединенными данными (примерный размер будет около 1 Гб). При парсинге я создаю 1 большой хеш хешей (или 10 маленьких хешей, или двумерный массив = один фиг). Когда использование памяти доходит до 2 Гб, то Perl вылетает с ошибкой "Perl out of memory", хотя еще как минимум 1 Гб оперативки свободен. Что делать? Если вместо оперативки писать с помощью SQLite в базу данных, то процесс тянется вечность. По идее, оперативки хватает, почему же Perl вылетает? :( |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: 1 Всего: 17 |
можно попробовать использовать sysread, sysseek, sysopen
они будут по-байтово, по строчно считывать данные из файла |
|||
|
||||
| ming |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 30.1.2009 Где: Новосибирск Репутация: 2 Всего: 3 |
на 32-битной системе процессу доступно максимум 2 гб памяти.
|
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
ААА :(((
Это сообщение отредактировал(а) Suppir - 30.3.2011, 20:01 |
|||
|
||||
| Suppir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 588 Регистрация: 20.4.2009 Репутация: нет Всего: нет |
А можно ли как-то обойти ограничение? Нужно 3 Гб на процесс.
|
|||
|
||||
| ming |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 30.1.2009 Где: Новосибирск Репутация: 2 Всего: 3 |
если не хотите привлекать БД, попробуйте http://search.cpan.org/~cangell/Tie-File-A.../File/AsHash.pm
|
|||
|
||||
| vivu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 3.11.2009 Репутация: нет Всего: нет |
Если построчное считывание файлов вас устраивает, то воспользуйтесь Tie::File и работайте с файлом как с массивом. Стопов по памяти быть не должно.
|
|||
|
||||
| DurRandir |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 335 Регистрация: 27.9.2009 Репутация: 14 Всего: 17 |
Комбинация cut/sort/uniq не подойдёт? В любом случае, придётся использовать какое-то внешнее хранилище, в том или ином виде. Проще, если результат точно поместится в оперативу, сложнее - если нет.
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |