![]() |
|
Модераторы: ginnie, korob2001 |
![]()
|
|
| Гость_Владимир |
|
|||
|
Unregistered |
Здравствуйте. Подскажите пожалуйста, как лучше искать в длинном файле (до 0,5 Мв), чтобы минимально нагружать сервер. В файле короткие записи разделенные специальными разделителями, которые можно просматривать по очереди. В результирующей странице появляются те записи, в которых найдено совпадение с образцом. Спасибо.
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Удачи. Это сообщение отредактировал(а) korob2001 - 21.5.2004, 17:30 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
korob2001 Я таким способом логи метров по 600 разбираю - весело
Гость, а 0.5 мб - это маленький файл |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Secandr Ты хочешь сказать, что такой способ не минимально нагружает сервер? Или вариант с сохранением в массив более оптимален? Я, например, считаю, что лучше привыкнуть обрабатывать файлы именно способом while ( <DESCRIPTOR> ) { };. Или я не прав?
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
я не считаю, я знаю, что кроме чем while ( <DESCRIPTOR> ) { } 600мб не обработаешь
Хотя нужно потестировать. Лог 600мб разбирается секунд за 20, с учётом того, что куча регекспов. |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
На мой взгляд, даже если файл весит 1MB, то его по возможности нужно обрабатывать именно вариантом while (<DESCRIPTOR>) { }, а не chomp( my @array = <DESCRIPTOR> ). Хотя работать с массивом гораздо проще, чем с файлом.
Это сообщение отредактировал(а) korob2001 - 23.5.2004, 14:17 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
korob2001 Нужно смотреть по конкретной задаче:
Если нужно раз в месяц читать файл и делать сложные манипуляции, то проще будет chomp( my @array = <DESCRIPTOR> ) Если нужно делать CGI, читающий файл немаленьких размеров лучше while (<DESCRIPTOR>) { }. Если нужно делать CGI, на ресурсе с высокой посещаемостью и фалами размером 10-50 мб, то есть смысл пользоваться базами данных, от стандартных dbm`ок (сохранять хеши), до MySQL. Гость_Владимир Может есть смысл использовать базы данных, он гораздо лучше справятся с выборкой информации, и не нужно будет изобретать велосипед. |
|||
|
||||
| Гость_Владимир |
|
|||
|
Unregistered |
Спасибо за ответы. Велосипед был изобретен в 98 году прошлого века и есть необходимость искать в файлах за шесть лет. Вариант с перенесением инфы другие базы рассматривал, но как представлю объем работы, то мне как-то плохеет. А как или чем определяется нагрузка на сервер? Какой критерий? Это будет использоваться на хобисстсом сайте и бесплатном хостинге. Не хотелось бы входить в конфликт с их тех. поддержкой.
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 6 Всего: 61 |
Смотри сам вариант с массивом ( chomp( my @array = <DESCRIPTOR> ); ) сохраняет весь файл в оперативную память, вариант с циклом while ( while ( <DESCRIPTOR> ) { }; ) читает файл построчно, а не весь сразу.
Вот теперь посмотри, какой из вариантов будет более оптимален в твоём случае. Если ты уверен что твой файл не разростётся до огромных размеров и он весит не много, 0.5MB - это не много, то конечно лучше воспользоваться вариантом с сохранением в массив, если же ты не знаешь сколько этот файл будет весить через месяц, то лучше воспользуйся вариантом с циклом while. Хотя насчёт базы данных я с Secandr, полностью согласен. Ещё многое зависит от того, что хранится в файле. Может стоит использовать старые и добрые DBM файлы. Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
Вообще-то работы по написанию программы работающей с базой данных меньше, чем с файлами, да и работает быстрее, поскольку БД сама преобразует данные, поддерживает ключи,...
А написать утилиту перегоняющую 0.5мб в базу не должно занять более одного-двух дней. |
|||
|
||||
![]()
|
| Правила форума "Perl: Системное программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |