一个 Java 库,用于汇总无法存储所有事件的流中的数据。更具体地说,有一些用于估计的类:基数(即计算事物);设置成员资格; top-k 元素和频率。一项特别有用的功能是具有兼容配置的基数估计器可以安全地合并。
这些类可以直接在 JVM 项目中使用,或者与提供的 shell 脚本和旧式 Unix IO 重定向一起使用。
这里的想法并非我们原创。我们努力通过迭代现有的学术文献来创建有用的实现。因此,这个库在很大程度上依赖于其他人的工作。请阅读来源和参考部分。
$ echo -e "foonfoonbar" | ./bin/topk
item count error
---- ----- -----
foo 2 0
bar 1 0
Item count: 3
$ echo -e "foonfoonbar" | ./bin/cardinality
Item Count Cardinality Estimate
---------- --------------------
3 2
< dependency >
< groupId >com.clearspring.analytics</ groupId >
< artifactId >stream</ artifactId >
< version >2.9.5</ version >
</ dependency >
假设您已安装并配置 Apache Maven:
mvn package
你应该已经准备好了。
邮件列表:http://groups.google.com/group/stream-lib-user
设置的成员资格代码是大约 2009 年 12 月来自 Apache Cassandra 的 Bloom Filter 实现。此处的更改很小,并且是为了测试和独立使用的目的。 Apache Software Foundation 标头已保留在这些文件上。通过扩展,我们还包括 murmurhash。
我们受到乔纳森·埃利斯 (Jonathan Ellis) 的文章《关于编写布隆过滤器的所有你想知道的一切》的启发,使用了此代码。
有特定论文的 javadoc 参考。这些是我们在研究过程中发现最相关的。
蔡敏、潘建平、郭于国、黄凯。使用自适应基数计数快速准确地测量流量矩阵。 MineNet '05:2005 年 ACM SIGCOMM 挖矿网络数据研讨会论文集,第 205–206 页,美国纽约州纽约市,2005 年。ACM。
艾哈迈德·梅特瓦利、迪维亚坎特·阿格拉瓦尔和阿姆尔·E·阿巴迪。如果我们可以线性化,为什么要采用对数?:实现搜索流量的有效不同计数。 EDBT '08:第 11 届扩展数据库技术国际会议论文集,第 618–629 页,美国纽约州纽约市,2008 年。ACM。
尼科斯·恩塔莫斯、彼得·特里安塔菲卢和格哈德·韦库姆。大规模计数:互联网规模数据网络中的有效基数估计。 ICDE '06:第 22 届国际数据工程会议论文集,第 40 页,美国华盛顿特区,2006 年。IEEE 计算机协会。
玛丽安·杜兰德和菲利普·弗拉霍莱。大基数的 LogLog 计数。 ESA03,LNCS 第 2832 卷,第 605-617 页,2003 年。
Kyu Y. Whang、Brad T. Vander Zanden 和 Howard M. Taylor。用于数据库应用程序的线性时间概率计数算法。 ACM 翻译。数据库系统,15(2):208–229,1990。
摩西·查里卡 (Moses Charikar)、凯文·陈 (Kevin Chen) 和马丁·F·科尔顿 (Martin F. Colton)。查找数据流中的频繁项。载于 ICLP '02:第 29 届国际自动机研讨会论文集,语言与编程,第 693-703 页,英国伦敦,2002 年。Springer-Verlag。
斯特凡·赫勒、马克·南凯瑟、亚历克斯·霍尔。 HyperLogLog 实践:最先进的基数估计算法的算法工程。 EDBT 2013 会议论文集,ACM,意大利热那亚
金澈清、钱伟宁、沙超峰、于杰弗里和周傲英。动态维护数据流上的频繁项。 CIKM '03:第十二届信息和知识管理国际会议记录,第 287-294 页,美国纽约州纽约市,2003 年。ACM。 10.1145/956863.956918 http://dl.acm.org/itation.cfm?id=956918
艾哈迈德·梅特瓦利、迪维亚坎特·阿格拉瓦尔和阿姆鲁·阿巴迪。数据流中频繁元素和前 k 元素的高效计算。第 398-412 页。 2005.10.1007/978-3-540-30570-5_27 http://link.springer.com/chapter/10.1007/978-3-540-30570-5_27