[Moscow.pm] Очень медленное нахождение элемента в массиве

zhecka zhecka на gmail.com
Пт Ноя 25 04:07:16 PST 2016


ну я бы не сказал.

$banned = new Net::Patricia;
if(!$banned->match_string($banip))
     {
          $banned->add_string($banip);
     }

просто заполняешь базу Patricia когда тебе нужно и матчишь что есть и 
чего нет.



On 25.11.2016 14:54, Naim Sh via Moscow-pm wrote:
>
> да кроме 2 и 3  его нету .
>
> Кстати как я понял Net::Patricia не очень мне подходит(удобен) ведь 
> мне надо найти адрес которого нет в массиве
>
> This module uses a Patricia Trie data structure to quickly perform IP 
> address prefix matching for applications such as IP subnet, network or 
> routing table lookups ?
>
> On 11/25/2016 03:50 PM, Толян II via Moscow-pm wrote:
>> У тебя может быть overload в нескольких местах:
>> 1) В массиве @ips
>> 2)  while( $ipn < $ipn->broadcast )              --- вызов метода + 
>> overload
>> 3) my $iponly = (split '/', $ipn++)[0]; #get     --- overload в 
>> чистом виде + преобразование в строку.
>>
>>
>>
>>
>> 25 ноября 2016 г., 14:38 пользователь Naim Sh via Moscow-pm 
>> <moscow-pm на pm.org> написал:
>>
>>     Оки и какой вариант быстрее того же map будет .
>>     код имеет такой вид ( точнее его кусок который больше всего
>>     времени и ест )
>>
>>     массив @ips имеет стандартные ipv4 адреса типа 10.56.6.2,
>>     10.135.8.23  , 10.135.22.43 и тд и тп .
>>
>>             my $ipn = NetAddr::IP->new("$first_ip/$netmask");
>>
>>             while( $ipn < $ipn->broadcast )
>>             {
>>                 my $iponly = (split '/', $ipn++)[0]; #get
>>
>>                 if ( ! ( grep {$iponly eq $_}  @ips )  )
>>                 {
>>                     return $iponly;
>>                 }
>>
>>             }
>>
>>     first отдает не то что мне нужно из под этой сети адрес в данном
>>     случае 10.135.x.y а 10.56.x.y хотя да он первый пустой, но grep
>>     выдает то что нужно.
>>
>>     Вроде tie переменных и т.д нету
>>
>>
>>
>>     On 11/25/2016 03:29 PM, Sergey Aleynikov via Moscow-pm wrote:
>>
>>         Добрый день,
>>
>>         map будет быстрее только если поисков по одному и тому же
>>         исходному
>>         массиву @ips будет несколько - т.к. операция построения хэша
>>         дорогая.
>>         Одноразовый поиск - греп быстрее. first возвращает другое (по
>>         смыслу)
>>         значение, чем греп (элемент, а не количество), но логически
>>         для этой
>>         задачи разницы быть не должно.
>>
>>         PS: my %ips; @ips{@ips} = (); быстрее, чем my %ips = map { $_
>>         => 1 } @ips;
>>
>>         Best regards,
>>         Sergey Aleynikov
>>
>>
>>         25 ноября 2016 г., 14:00 пользователь Naim Sh via Moscow-pm
>>         <moscow-pm на pm.org <mailto:moscow-pm на pm.org>> написал:
>>
>>             Коллеги, столкнулся с тем что код такого вида ,
>>             используемый для поиска
>>             свободных ip v4 адресов на размерах 500-1000 элементов
>>             отрабатывается под 5
>>             секунд версия с map :
>>
>>             my %ips = map { $_ => 1 } @ips;
>>             if (not exists($ips{$iponly} ))
>>             {
>>                      return $iponly;
>>             }
>>
>>
>>               и с grep(sic!) ~2 секунду :
>>
>>             if ( ! ( grep {$iponly eq $_ } @ips ) )
>>             # spent 27.4ms making 814 calls to
>>             NetAddr::IP::Lite::broadcast, avg
>>             34µs/call
>>             # spent 9.56ms making 814 calls to
>>             NetAddr::IP::Lite::__ANON__[NetAddr/IP/Lite.pm:268], avg
>>             12µs/call
>>             {
>>                  return $iponly;
>>             }
>>
>>             Еще трабла в том что легендарный List::Util отдает быстро
>>             но почему не тот
>>             же результат( пробовал first , none ) что и grep?
>>
>>             коллеги это нормально на более-менее среднем сервачке ?
>>
>>
>>             --
>>             Moscow.pm mailing list
>>             moscow-pm на pm.org <mailto:moscow-pm на pm.org> |
>>             http://moscow.pm.org
>>
>>
>>     -- 
>>
>>     -- 
>>     Moscow.pm mailing list
>>     moscow-pm на pm.org <mailto:moscow-pm на pm.org> | http://moscow.pm.org
>>
>>
>>
>>
>
> -- 
>   
>
>

----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20161125/59f1ca15/attachment.html>


Подробная информация о списке рассылки Moscow-pm