[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как ускорить работу вложенных циклов
solomon
Здравствуйте!

Задача выбрать из лога ip соответствующие некому критерию. Выборку делаю вложенными циклами с использованием регулярки. Все работает но крайне медленно, занимает несколько часов. Как можно ускорить работу?

$ok_ip = array();
for($i=0; $i < count($unic_ip); $i++){ //цикл по ip
for( $j=0; $j < count($strs); $j++ ){ //цикл по строкам
if (preg_match('/'.$unic_ip[$i].'/s', $strs[$j])) { //заходим в строку, смотрим есть ли в ней наш ip из списка
if (!preg_match( '/gcost/s', $strs[$j] )) { //проверяем что в строке не содержится подстрока gcost
//echo '<pre>'; echo $unic_ip[$i]. ' : ок'; echo '</pre>'; //ip подходящий

array_push($ok_ip, $qoute_ip[$i]); // $ok_ip массив подходящих ip
}
}
}
}




Спустя 25 минут, 56 секунд (20.05.2012 - 13:12) Игорь_Vasinsky написал(а):
заменить preg_match на substr_count() или strpos()

Спустя 1 час, 4 минуты, 58 секунд (20.05.2012 - 14:17) vagrand написал(а):
Как уже правильно написал вам Игорь_Vasinsky тормозят в данном случае не циклы а регулярки

Спустя 11 минут, 25 секунд (20.05.2012 - 14:28) solomon написал(а):
Сейчас попробую

Спустя 2 минуты, 52 секунды (20.05.2012 - 14:31) Игорь_Vasinsky написал(а):
НУ КАК?

Спустя 40 минут, 6 секунд (20.05.2012 - 15:11) solomon написал(а):
Цитата (Игорь_Vasinsky @ 20.05.2012 - 10:31)
НУ КАК?

попробовал substr_count() - удалось сократить выполнение до 1 часа. что быстрее substr_count() или strpos() ?

Спустя 1 минута, 30 секунд (20.05.2012 - 15:13) Игорь_Vasinsky написал(а):
трудно сказать. по логике strpos

strpos - ищет совпадение
substr_count - подсчитывает кол-во вхождений

Спустя 35 секунд (20.05.2012 - 15:13) Семён написал(а):
Логи по расписанию конвертировать в формат SQL, и искать непосредственно по базе по нужным критериям

Спустя 3 минуты, 51 секунда (20.05.2012 - 15:17) solomon написал(а):
Цитата (Семён @ 20.05.2012 - 11:13)
Логи по расписанию конвертировать в формат SQL, и искать непосредственно по базе по нужным критериям

как конвертировать?

Спустя 1 минута, 47 секунд (20.05.2012 - 15:19) Семён написал(а):
Руками, я не знаю какой у тебя лог, какого формата и откуда (apache, awstats, nginx или еще что-нибудь). 1 раз парсишь файл и результат отправляешь в базу. Весь последующий поиск будет моментальным

Спустя 11 минут, 45 секунд (20.05.2012 - 15:31) solomon написал(а):
Цитата (Семён @ 20.05.2012 - 11:19)
Руками, я не знаю какой у тебя лог, какого формата и откуда (apache, awstats, nginx или еще что-нибудь). 1 раз парсишь файл и результат отправляешь в базу. Весь последующий поиск будет моментальным

access.log апача

Спустя 3 минуты, 41 секунда (20.05.2012 - 15:35) Семён написал(а):
А что именно ты с ним делаешь, есть готовый продукт
http://awstats.sourceforge.net/

Спустя 5 минут, 42 секунды (20.05.2012 - 15:40) solomon написал(а):
вынимаю ip и количество их запросов, которые обращаются только с одним определенным запросом не совершая группы сопутствующих запросов

Спустя 20 минут, 13 секунд (20.05.2012 - 16:00) solomon написал(а):
проверено. strpos - быстрее работает. спасибо. запустил жду результатов))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.