09.02.2010 19:16, Alex Kapranoff пишет:
Отсутствие домена в базе будет самым худшим случаем в смысле
алгоритмической сложности и к тому же самым частным :)
Поэтому в таких системах часто в качестве первого уровня проверки
реализуют фильтры Блума, которые позволяют очень быстро узнать, что
домена нет в базе.
Рекомендую.
Ну почему же худший случай ?
запрос домена второго уровня из базы вернёт либо да, либо нет.
Если есть домен третьего и выше уровней - значит есть ключевой домен
второго.
memcached или Cache::FastMmap по хешам отдают очень быстро, поэтому
задержек почти не будет.
Вообще под эту тему идеально подходит radix tree, но им будет неудобно
определять множество вхождений.
Саму базу я бы хранил просто в памяти в виде хэш-таблицы.
Оно так и будет md5($domain) и к нему ключи.
Не вполне ясно, откуда взялась задача из оригинального поста :) Весь
парсинг в таких системах делают оффлайново и заранее.
оффлайново уже устарело :) увы.
я за realtime обработку :) ибо фильтра которые у меня сейчас работают -
практически realtime.
не сбрасывая кеш самой базы и не пересчитывая данные мы можем
синхронизировать её без потери времени на перезагрузку.
а основная задача выросла вот отсюда http://habrahabr.ru/blogs/sysadm/74754/
Суть в том, что в большой конторе тяжело уследить кто чего откуда
случайно стянул. Каспер уже не помогает, народ хватает
новых Locker и Zbot ежедневно, поэтому в ход должны пойти антималварные
и антивирусные списки.
Мне необходимо иметь теоретически бесконечное количество листов
блокировки в реальном режиме времени и чтоб они были независимы.
статика:
- malware, virus, fishing домены (2-5 листов)
- Online TOR лист
всякие squidguard, rejik и тыды листы.
Внешние realtime сервисы:
- опрос Orange Filter
- опрос OpenDNS
- опрос dnsbl и прочих списков
- опрос dul списков
И чтобы всё это рулилось из одного места :) ну и чтобы был какойто
callback(в будущем) для определенных категорий.
Вотъ.
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org