Необходимо разработать приложение, которое:
- Имеет на входе таблицу
iptable
в БД PostgreSQL. При этом, данные в таблицу постоянно добавляются из сторонних источников, но не модифицируются и не удаляются. Схема таблицы:
user_id
- пользовательip_address
- IPv4 адресdate
— время добавления записи. При этом, таблица имеет ограничениеuniq(user_id, ip_address)
- Производит аналитику по пересечению пользователей с одинаковыми ip (правила пересечения см. ниже).
- Реализует web-сервис (REST API), который на основе двух
user_id
сообщает о том, есть ли между ними взаимосвязь с максимально высокой скоростью (миллисекунды).
Для определения того, что пользователи взаимосвязаны, должно соблюдаться условие: у них есть два и более одинаковых ip_address из различных сетей /24
, например:
1.2.3.4
и1.2.4.5
это разные подсети и, если у обоих пользователей есть оба эти адреса, то пользователи взаимосвязаны;1.2.3.4
и1.2.3.5
это одна подсеть и пользователей нельзя считать взаимосвязанными.
Необходимо ограничивать количество одновременных потоков анализа взаимосвязей, чтобы не исчерпать ресурсы сервера (если потоков несколько).
Использование вероятностных структур данных допустимо, precision и recall rate обсуждаемы. В любом случае, cервер должен хранить информацию о связках ip и пользователя между перезапусками, для этого можно использовать БД sqlite, PostgreSQL и иные самодостаточные хранилища данных / способы обеспечения персистентности.
Объем уникальных user_id
+ ip_address
гарантированно превышают объем RAM.
Требований к модели хранения данных нет, допустимо применять хэштаблицы с промежуточными значениями, не соблюдать нормализацию данных (для достижения скорости).
- Необходимо подготовить краткое словесное описание предполагаемого алгоритма и архитектурного решения.
- Оценить время, необходимое на разработку, в человеко-часах собственной работы.
- Обсудить первые 2 пункта с инженером Работодателя.
- Разработать приложение.
- Покрыть приложение автотестами (объём обсуждаем).
- Предоставить человекочитаемые дампы БД/персистентных хранилищ после выполнения автотестов, но перед очисткой/инициализацией :-)
- Представить доступ к задеплоенному REST-сервису проверки взаимосвязи IP-адресов.