这是我参与「第五届青训营 」笔记创作活动的第14天
列式存储
优点
- 数据压缩数据压缩可以使读的数据量更少,在IO密集型计算中获得更大的性能优势
- 相同类型压缩效率更高
- 排序之后压缩效率更高
- 可以针对不同类型使用不同的压缩算法
- Delta encoding
- 将数据存储为连续数据之间的差异,而不是直接存储数据本身
- 特定算子也能直接在压缩数据上计算
- 数据选择
- 可以选择特定的列做计算而不是读所有列对聚合计算友好
- 延迟物化
- 将列数据转换为可以被计算或者输出的行数据或者内存数据结果的过程,物化后的数据通常可以用来做数据过滤,聚合计算,join
- 缓存友好
- CPU / 内存带宽友好
- 可以利用到执行计划和算子的优化,例如filter保留直接在压缩列做计算的机会
- 向量化
- SIMD(SIMD (single instruction multiple data) , 对于现代多核CPU,其都有能力用一条指令执行多条数据)
- 数据格式(需要处理多个数据,因此数据需要是连续内存需要明确数据类型)
- 执行模型(数据需要按批读取\函数的调用需要明确数据类型)
ClickHouse存储设计
分布式表:不存储数据,用于将查询路由到集群的各个节点cluster: 逻辑集群,由多个节点组成shard_key: 指导数据写人分布式表时的分布方式本地表:实际存储数据的表
Hash Index
1.将输入的key通过一个HashFunction映射到一组bucket上2. 每个bucket都包含一个指向一条记录的地址3. 哈希索引在查找的时候只适用于等值比较
索引设计
B-Tree
- 数据写入是有序的,支持增删查改
- 每个节点有多个孩子节点
- 每个节点都按照升序排列key值4.每个key有两个指向左右孩子节点的引用左孩子节点保存的key都小于当前key右孩子节点的保存的key都大于当前key
未完、。。。