在我的应用程序中,我需要通过共享IP关联帐户以监控滥用/串通。
我提出了以下原则:
我有一个帐户/ IP日志表,如下所示:
TABLE ip_logs (
account_id INT,
persona_id INT,
ip TEXT,
datetime TEXT,
count INT
)
计数和日期时间会在用户登录时更新,如果他们的帐户/ persona / ip已存在一行。 persona_id与此问题无关。
我也有一个简化:
我的问题是......通过查询数据库,对于任何给定的account_id构建此关联帐户列表(主要和次要)的最佳方法是什么?
例如,我可以立即获得主要关联的帐户:
SELECT account_id FROM ip_logs WHERE account_id AND ip IN (SELECT ip FROM ip_logs WHERE account_id=:account_id GROUP BY ip HAVING SUM(count) > 5) GROUP BY account_id HAVING SUM(count) > 5
我可以在结果上递归(或深达2)使用此调用来创建主要关联帐户的主列表,然后在最后使用类似的查询(没有HAVING)获得次要关联帐户。
有更有效的方法吗?
我还在考虑在更新ip_logs时将这些数据保存在一个单独的表中,而不是每次都必须从ip_logs派生它,这可能是一个巨大的开销。