Необходимо разработать приложение, которое:
iptable
в БД PostgreSQL. При этом, данные в таблицу постоянно добавляются из сторонних источников, но не модифицируются и не удаляются. Схема таблицы:user_id
- пользовательip_address
- IPv4 адресdate
— время добавления записи. При этом, таблица имеет ограничение uniq(user_id, ip_address)
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.
Требований к модели хранения данных нет, допустимо применять хэштаблицы с промежуточными значениями, не соблюдать нормализацию данных (для достижения скорости).