Задача выбрать из лога 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 - подсчитывает кол-во вхождений
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/
http://awstats.sourceforge.net/
Спустя 5 минут, 42 секунды (20.05.2012 - 15:40) solomon написал(а):
вынимаю ip и количество их запросов, которые обращаются только с одним определенным запросом не совершая группы сопутствующих запросов
Спустя 20 минут, 13 секунд (20.05.2012 - 16:00) solomon написал(а):
проверено. strpos - быстрее работает. спасибо. запустил жду результатов))