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

Andrey Kovbovich akovbovich на gmail.com
Сб Апр 4 15:40:37 PDT 2015


Взял на себя смелость поискать за вас в гугле по запросу  "Longest prefix
matching". Мне показалась интересной реализация на основе bloom filter
структуры -
http://conferences.sigcomm.org/sigcomm/2003/papers/p201-dharmapurikar.pdf

4 апреля 2015 г., 17:14 пользователь Nick Knutov <mail на knutov.com> написал:

>  Есть трехмагабайтный список формата
> 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 Knutovhttp://knutov.com
> ICQ: 272873706
> Voice: +7-904-84-23-130
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20150405/1638b9f7/attachment.html>


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