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

Ответить