IT外包网管服务,ClickHouse暂挂分析工具10亿数据秒级查询方案

发布者:上海IT外包来源:http://www.lanmon.net点击数:1829

蓝盟IT小贴士,来喽!
我认为各数据/产品同学在过去的计数分析过程中有一个弱点。 也就是说,每次保存相关的数据,最近的优化方案的目的是提高查询效率,减少数据存储,使产品能够快速查询/分析和存储相关数据。
优化方案的核心是通过在Clickhouse中使用Roaringbitmap压缩用户,并将保留率校正算法传递给高效的位图函数,来提高节省空间和查询速度。
希望本实践方案能给予你帮助和启发。 以下主要分Roaringbitmap的概要、构想与实现、总结与思考3个部分进行详细介绍。
以下是一些有效的位图压缩方法: Roaringbitmap。 我们先看问题:
给出40亿个不重复的[ 0,2 ^ 32-1 ]区间内的整数集合,如何快速判定某个个数在该集合内?

很明显,如果保留这40亿个,则最多需要14.9GB的内存。 我不能接受这个。 因此,可以使用“位图”(bitmap  )进行存储。 也就是说,第0位表示数字0,第1位表示数字1。 如果某个个数在原来的集合内,则通过将与其对应的位图内的位设为1,否则保持为0,能够简单地调查结果,仅占用512MB的存储器就不足原来的3.4 % [3]。 但是,这种方式也有缺点。 例如,显然,我需要存储从1到5000w的5000w连续的整数,并且在正常的bitmap中也需要消耗512M的存储,在这种情况下实际上有很大的优化空间。


2016年S. Chambi、D. Lemire、O. Kaser等人在论文《Better  bitmap  performance  with  Roaring  bitmaps》和《Consistently  faster  and  smaller  compressed  bitmaps  with  Roaring》中提出roaringbitmap的主要特征是,能够大幅节省存储,提供快速的位图校正运算,因此对其进行了优化上述连续存储的5000w个整数只需要几十KB。
其主要构思是将32位无符号整数分成16个高比特的桶,即,最多可能有2^16=65536个桶,在论文中称为container。 保存数据时,在数据的前16位中找到container  (如果找不到则新建),将后16位放入container中。 也就是说,1个roaringbitmap是很多container的集合[3],具体的细节可以自己看到句末的参考文章。想法和实现
我们的原始数据主要被分类如下
用户操作行为数据table_oper_raw包括时间分类(ds  )、用户标识符(user  _ id  )和用户操作行为名称(oper_name  )。 /在20200701|60551实践过程中,这张表每天记录数十亿行。
用户属性数据table_attribute_raw表示产品/图像中的用户属性,并且在进行包括时区(ds  )、用户id(user_id  )和各种用户属性字段(用户的新参与路线、位置省等)的实践中,此表显示用户属性1

现在,根据这两种数据,有必要求出某一天操作某一行为的用户在下一天操作另一行为的残存率。 例如,20200701日操作“点击banner”的用户有100人,这部分的用户20200702日操作“点击app签名”的用户有20人,另外,只考虑广东省的用户的保留率,小米店的用户的保留率。

文/上海蓝盟  IT外包专家

IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部