Оки, я просто думаю щас затестить не весь модуль NetAddr::IP а его lite версию ( хотя как я предполагаю выигрыш будет маленький) + щас переустановил точнее пересобрал его xs стало лучше .

+ надо затестить как она будет с broadcast и subnet-zero сетками пахать .

On 11/25/2016 04:07 PM, zhecka via Moscow-pm wrote:
ну я бы не сказал.

$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 <[email protected]> написал:

    Оки и какой вариант быстрее того же 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
        <[email protected] <mailto:[email protected]>> написал:

            Коллеги, столкнулся с тем что код такого вида ,
            используемый для поиска
            свободных 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
            [email protected] <mailto:[email protected]> |
            http://moscow.pm.org


-- -- Moscow.pm mailing list
    [email protected] <mailto:[email protected]> | http://moscow.pm.org





--





--
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить