ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] Сжатие Ге о-базы для mod_geo.



> У  меня есть гео-база c неперескающимися интервалами ip-адресов в виде
> двух  4-х  байтных  чисел  и  кода  страны.  Я  её  сконвертил  в вид:
> xx.xx.xx.xx\xx  .  Я  брал  каждый интервал и спомощью Net::Netmask на
> перле  конвертировал  в  1 или несколько записей вида xx.xx.xx.xx\xx .
> Размер файла получился 2 мега с копейками или около 100тыс. записей.
> 
> Вопрос:  как  мне  этот  файл  уменьшить,  ведь  сейчас  в  нём  много
> избыточных  данных,  которые можно объединить. Есть готовое решение, а
> то mod_geo раздувает процессы Апача до 20 мегов?

Можно сшивать соседние блоки с одинаковой нетмаской если у них одинаковый
код страны. При этом вложенность - допускается.

Т.е:
10.0.0.0/8 US
10.128.0.0/9 ZA
11.0.0.0/8 US
можно склеить в 
10.0.0.0/7 US
10.128.0.0/9 ZA

Далее - рекурскивно.

Простейший алгоритм, нифига не эффективный, но сходящийся максимум за
32 итерации:
 a) сортируем все по IP (началу диапазона)
 б) склеиваем все подходящие /32 в /31 (отличающиеся 32-м битом и с одинаковым
   кодом страны), затем /31 в /30 и так далее.
 При этом маски у склеиваемых должны быть одинаковыми.

Алексей Тутубалин
mailto: lexa@xxxxxxx
Web: http://www.lexa.ru/lexa 



 




Copyright © Lexa Software, 1996-2009.