滑动窗口方法中的唯一计数?

时间:2018-03-27 19:34:19

标签: algorithm bloom-filter

被修改

我有以下情况,我很感激如何最好地解决它:

假设我有IP,每个IP都有一个唯一的用户名。 IP可以记录到多个用户。 我的系统从外部进程获取所有用户的列表,其中IP记录在天,分辨率为分钟,如:

00:00 1.1.1.1 "Ben"
00:00 1.1.1.1 "Dan"
00:00 1.1.1.1 "David"
00:00 1.1.1.2 "Ben"
00:01 1.1.1.1 "Dan"
00:01 1.1.1.1 "Bob"
00:01 1.1.1.2 "Dan"
00:01 1.1.1.1 "David"
    ...
    etc 

我需要看到的是,如果有一个IP在1小时内记录到超过某个阈值的多个唯一身份用户。

我的想法是在这里使用Bloom过滤器,因为我们需要存储信息,每分钟的每个IP都有自己的Bloom过滤器字段(从我看到的目前为止它是保存空间的最佳方法)保存数据其中记录了那一分钟的唯一用户。 我想使用单个哈希函数(k = 1),这样通过做大小为60分钟(一小时)的s滑动窗口和xor每个IP各自的Bloom feild,通过计算'1'位数我会得到该IP在该小时内记录的唯一用户数。

现在,如果我有avarage 1000 IP,并且让我们说每个人都有一个unigue用户,那么1000个用户,误报率的概率不超过0.005和单个哈希值,每个IP在一分钟内我需要199,500bit或24.35KiB

白天1440分钟* 1000个IP * 24.35KiB大约35910MB这是太多的内存...而这只是一个普通的情况,可能有10,000个IP和20,000个用户:/ 是否有更好的方法来解决这个问题,并且空间需求更少(即使在性能范围很广的情况下)?

谢谢:)

0 个答案:

没有答案