通过IP日志关联帐户

时间:2014-01-04 11:23:11

标签: sql algorithm

在我的应用程序中,我需要通过共享IP关联帐户以监控滥用/串通。

我提出了以下原则:

  • 两方共享IP超过5次的帐户主要关联
  • 共享与主要无关的IP的两个帐户次要关联
  • 主要关联的属性是传递性的(即,如果A与B关联,则A与C相关联。)
  • 帐户A 次要关联所有帐户与其主要关联的任何帐户都有轻微关联(即,如果C与D轻微关联,而A与C,A主要关联与D)有轻微联系。

我有一个帐户/ IP日志表,如下所示:

TABLE ip_logs (
    account_id INT,
    persona_id INT,
    ip TEXT,
    datetime TEXT,
    count INT
)

计数和日期时间会在用户登录时更新,如果他们的帐户/ persona / ip已存在一行。 persona_id与此问题无关。

我也有一个简化:

  • 只需将主要相关帐户与起始帐户相关联,最多可包含2个跃点即可,我无需在传输帐户中正常使用。

我的问题是......通过查询数据库,对于任何给定的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派生它,这可能是一个巨大的开销。

0 个答案:

没有答案