[Moscow.pm] Алтернатива subnet_matcher

zhecka zhecka на gmail.com
Вс Апр 5 02:14:35 PDT 2015


On 04.04.2015 17:14, Nick Knutov wrote:
> Есть трехмагабайтный список формата
> ip/bitmask $category
> Например
> 1.2.3.4/24 5
>
> Требуется по ип очень быстро получить $class.
> использую Net::Subnet.
>
> Сделал для каждой строчки
> # собираем хеш $cat->@networks
> push @{$reverse_cat->{$cat}}, $ip_mask;
>
> # Для каждого блока делаем subnet_matcher (памяти много)
> our $matcher;
> foreach ( keys $reverse_cat ) {
>     $matcher->{$_} = subnet_matcher @{$reverse_cat->{$_}};
> }
>
> # для каждого запроса возвращаем категорию если ип попал в матчер
> foreach ( keys $matcher ) {
>     return $_ if $matcher->{$_}->($ip);
> }
>
> Когда исходный файл с категориями на 200к строчек - все это работает 
> недостаточно быстро.
>
> Вопрос - чем бы это заменить?
>
> Как из моего списока ип сетей сделать бинарную базу для Geo::IP я не 
> смог нагуглить (и вообще и с учетом того, что по запросу надо получать 
> именно нашу категорию, которая сейчас число, а не двухбуквенный код).
>
> На сайте Geo::IP в разделе про CSV базы предложен вариант с хранением 
> структуры в мускульной базе, но для наших нагрузок оно так же будет 
> недостаточно быстрым.
>
> Какие еще есть альтернативы?
>
> -- 
> Best Regards,
> Nick Knutov
> http://knutov.com
> ICQ: 272873706
> Voice: +7-904-84-23-130
>
>
Привет.
я юзаю Patricia. быстрее её Radix Tree ничего не будет.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150405/b6dd53d9/attachment-0001.html>


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