starrocks
分布式OLAP数据库系统,高效支持大数据量级的多维分析、实时分析、高并发分析等多种数据分析场景
定位
面向在线报表和分析的数据仓库系统。它采用了全面向量化技术,比同类产品平均快3-5倍。在查询性能上远超当代最快的开源数据库clickhouse
整体架构
- FE 前端节点。多个FE组成第一层,提供FE的横向扩展和高可用。主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成
- BE 后端节点。多个BE组成第二层,负责数据存储与管理、查询计划执行
采用列式存储、对数据以高压缩比进行压缩存储、向量化执行等先进技术,因此获得了极高的查询效率
列式存储
表中的每一列数据都会在物理上相邻存储,而不是将整个行的数据存储在一起
- 压缩率高:由于列中的数据通常是同一类型的,因此可以应用高效的压缩算法,从而减少存储空间的需求
- RLE:压缩列中连续相同值的情况,例如日期列
- Bit Packing:将列中的多个值打包成一个字节,压缩稀疏列,0/1较多的列
- Delta Encoding:将列中的值替换为前一个值与当前值之间的差值。排序或有序列的列
- 快速扫描:非常适合执行聚合操作,因为只需扫描和加载需要的列,而不必加载整个行
- 快速过滤:过滤操作,列式存储可以跳过不相关的列,从而减少I/O操作
向量化技术
基于列式存储
充分利用 CPU 的缓存。例如,有 10 列的一行数据和只需操作一列的查询计划。在基于行的查询处理模式中,9 列数据会不必要的占用缓存,限制了可以进入缓存的数据数量。在基于列的处理中,只会读入感兴趣的列数据,这样可以一起处理更多的值
核心思想:由列找行的实际转化推迟到查询计划的很靠后的位置进行处理
且现代CPU提供了SIMD(Single Instruction, Multiple Data)指令集,允许同时对多个数据元素执行相同的操作。向量化代码利用这些指令来执行相同操作的多个数据元素,从而减少了指令的数量和循环次数。