ES聚合学习笔记之--HyperLogLog与BloomFilter

ES的聚合是其一大特色。然而出于性能的考虑, ES的聚合是以分片Shard为单位,而非Index为单位, 所以
有些聚合的准确性是需要注意的。 比如: TermAggregations.

成都创新互联专业为企业提供荣昌网站建设、荣昌做网站、荣昌网站设计、荣昌网站制作等企业网站建设、网页设计与制作、荣昌企业网站模板建站服务,十年荣昌做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

es的基数聚合使用到了hyperloglog算法。 出于好奇,了解了一下。

在海量数据场景下, 我们通常会遇到这样的两个问题:

  1. 数据排重。比如在推送消息场景,消息重复对用户是打扰, 用户发券场景, 重复发券就是损失了。

  2. pv/uv统计。这类场景下, 对精确度要求没必要锱铢必较。

如何高效解决这两类问题呢?

对于数据排重, 我们可以使用布隆过滤器。java 样列代码如下:

BloomFilter bloomFilter = BloomFilter.create(new Funnel() {

            private static final long serialVersionUID = 1L;

            @Override
            public void funnel(String arg0, PrimitiveSink arg1) {

                arg1.putString(arg0, Charsets.UTF_8);
            }

        }, 1024*1024*32);

        bloomFilter.put("asdf");
        bloomFilter.mightContain("asdf");

对于计数, 我们可以使用HyperLogLog算法,ES中已经有相关的实现。

其实封装一下,布隆过滤器也是能直接实现HyperLogLog算法的功能的。

这里遗留几个问题,思考清楚后补充:

  1. BloomFilter跟HyperLogLog算法的原理
  2. 相同量级数据下的效率及内存消耗
  3. 各自的适用场景有哪些

文章标题:ES聚合学习笔记之--HyperLogLog与BloomFilter
路径分享:http://hxwzsj.com/article/gjoido.html

其他资讯

Copyright © 2025 青羊区翔捷宏鑫字牌设计制作工作室(个体工商户) All Rights Reserved 蜀ICP备2025123194号-14
友情链接: 高端网站设计 网站建设方案 成都响应式网站建设公司 梓潼网站设计 网站制作公司 成都网站设计 成都网站制作 成都做网站建设公司 重庆电商网站建设 成都网站建设公司 成都定制网站建设 手机网站制作 网站设计 专业网站建设 网站制作报价 四川成都网站设计 手机网站建设 成都网站设计 外贸网站建设 高端网站设计推广 成都网站设计 四川成都网站建设