4. ClickHouse在苏宁用户画像场景的实践7 Contents 苏宁如何使用ClickHouse ClickHouse集成Bitmap 用户画像场景实践 8 Bitmap位存储和位计算 每个bit位表示一个数字id,对亍40亿个的用户id,只需要40亿bit位, 约477m大小 = (4 * 109 / 8 / 1024 / 1024) 但是如果使用上述的数据结构存储单独一个较大数值的数字id,会造成空间上的浪费,例如 21] RoaringBitmap原理介绍 主要原理:将32bit的Integer划分为高16位和低16位(两个short int),两者之间是Key-Value的 关系。高16位存到short[] keys,通过高16位(Key)找到所对应Container,然后把剩余的低 16位(Value)放入该Container中,RoaringBitmap有三类Container: Array 0xEE6B 0xFF01 Array Container 0x0001 0x0002 0x0003 0x2800 0xEE6B2800 高16位 Key 0xEE6B 0x2800 低16位 Value Bitmap Container 0 1 1 0 ① ② ③ ④ ClickHouse集成RoaringBitmap0 码力 | 32 页 | 1.47 MB | 1 年前3
2. ClickHouse MergeTree原理解析-朱凯换为YYYYMMDD日期格式的整型,则使用按照 YYYYMMDD日期格式化后的字符形式输出作为分区 ID的取值。 l 使用其它类型 如果分区键取值既不属于整型,也不属于日期 类型,例如String、Float等。则通过128位Hash 算法取其Hash值作为分区ID的取值。 分区目录的命名规则 PartitionID_MinBlockNum_MaxBlockNum_Level • PartitionID 分区ID,无 一级索引 稀疏索引 primary.idx文件内的一级索引采用稀疏索引实现 如果把MergeTree比作是一本书,那么稀 疏索引就好比是这本书的一级章节目录。 一级章节目录不会具体对照到每个字的位 置,只会记录每个章节的起始页码。 以默认的索引粒度(8192)为例, MergeTree只需要12208行索引标 记就能为1亿行数据记录索引。 索引粒度 基于索引粒度,将数据标记成多个小的区间 x、set和ngrambf_v1和tokenbf_v1。 数据存储 按列存储,精心编排,错落有致 压缩数据块,就好比是一本书的文字段落,是组织文字的基本单元。 压缩数据块 头信息固定使用9位字节表示,具体 由1个UInt8(1字节)整型和2个 UInt32(4字节)整型组成 。 压缩数据块大小 l 单个批次数据 size < 64K 如果单个批次数据小于64K,则继续获取下一批 数据,直至累积到size0 码力 | 35 页 | 13.25 MB | 1 年前3
2. Clickhouse玩转每天千亿数据-趣头条(timestamp, eventType)进行索引 的,这样在计算累时指标的时候出现非常耗时(600亿+数据量) 分析: 对于累时数据,时间索引基本就失效了,由于timestamp”基数”比较高,对于排在第二位eventType索引, 这个时候对数据的过滤就非常有限了,这个时候几乎就要对当天的数据进行全部扫描 解决: 1:调整索引的顺序,推荐索引列的基数不要太高. 我们遇到的问题 Too many parts(304)0 码力 | 14 页 | 1.10 MB | 1 年前3
共 3 条
- 1













