Получаю список урлов из базы, загоняю в массив где ключ - урл, значение - его id.
Есть два типа проверки, точное совпадение или поиск с помощью регулярного выражения, то есть любой урл типа *.google.com должен быть найден.
Когда список урлов в базе был небольшим, все работало быстро, но после того как число улов превысило 7000, начались тормоза, на проверку 15 доменных имен уходит 3 секунды. Это очень медленно. Т.к. в логе, в одной строчке два разных урла, и оба их надо сравнивать со списком из базы, строчек очень много итд...
Вот функция
Код: Выделить всё
<?php
function domain_from_urls($domain, $urls, $check_type = "extended") {
if ($check_type == "exact") {
if (in_array($domain, array_keys($urls))) {
return $urls[$domain];
}
}
if ($check_type == "extended") {
foreach($urls as $key => $value) {
$regex = "/^[a-zA-Z0-9\-\.]+\.($key)$/";
preg_match($regex, $domain, $matches);
if ($key == $domain) {
return $urls[$key];
}
if (count($matches)) {
if ($key == $matches[1]) {
return $urls[$key];
}
}
}
}
return false;
}посоветуйте как можно улучить, мне все равно на каком языке, perl,python, может даже осилю c или java