一、StarRocks 架构原理
StarRocks 采用 FE(Frontend)+ BE(Backend)的经典二层架构,从 3.0 版本开始引入 CN(Compute Node)支持存算分离部署模式。
用户 SQL 先进入 FE,被解析成逻辑计划,再被优化成物理执行计划;FE 会把一个查询拆成多个执行片段,下发到多个 BE 并行运行,这是典型MPP模式;查询过程中会涉及Join、聚合、过滤、排序、Shuffle/Broadcast 分发等分布式算子选择,所以 StarRocks 的性能上限,不只取决于单机 CPU,而取决于计划是否合理 + 数据是否能被局部化处理 + 集群并行度。
FE 负责SQL 解析、元数据管理、权限、查询优化、调度协调;BE 节点同时承担计算和存储,数据以列式格式存储在本地磁盘,这是经典的 Shared-Nothing 架构,适合对延迟敏感的实时分析场景;CN 节点为无状态计算节点,数据持久化到对象存储(S3、HDFS、OSS),这一模式支持弹性伸缩、降低存储成本,适合数据量大但查询负载波动明显的场景。这本质上是“控制面/数据面分离”:FE 负责决定怎么跑,BE/CN 负责高吞吐地真正执行。
FE 通常以多副本方式部署以支持高可用,BE/CN 节点可以横向扩展,数据通常有副本机制以提高可用性和容错性,实际上,StarRocks 的扩展方式更像“加机器扩并行度”,而不是“升级单机吃更大查询”。
二、StarRocks 核心特性
1.MPP 并行执行
StarRocks 是 MPP 分析型数据库,一个查询会被切成多个子任务,在多个 BE 上同时执行,它擅长大扫描、大聚合、多维分析;不擅长高频点写、强事务更新那类 OLTP 工作负载。
2.向量化执行引擎
StarRocks 采用全面向量化(Fully Vectorized)执行引擎,从存储层读取到计算层输出,所有算子均以列式批量(Column Batch)方式处理数据,充分利用 CPU SIMD 指令集(SSE4.2 / AVX2),显著减少虚函数调用和分支预测失败的开销。与传统逐行模型相比,向量化引擎在典型聚合查询上可获得3-10 倍性能提升。
3.列式存储
StarRocks 使用列式存储,分析查询只读需要的列,这比行存更适合 BI、报表、宽表聚合,因为能显著减少 I/O。
4.数据跳过与索引能力
StarRocks 具备分区、分桶、列统计等机制,用于减少扫描范围;它支持多种加速过滤/命中的能力,例如 Bitmap 类思路与数据块级跳过能力。它的关键思想不是“把所有数据都扫一遍再算”,而是尽量提前排除不可能命中的数据块。
5.CBO 优化器
StarRocks 具有基于代价的优化器,会综合统计信息选择 Join 顺序、分发策略和物理算子。真正难的不是“支持 SQL”,而是在复杂多表场景下选对执行计划;这一点直接决定查询尾延迟。
6.物化视图
StarRocks 支持物化视图,用于预计算高频聚合或复杂查询结果,可基于调度策略自动刷新;在合适条件下,优化器可以自动把原查询改写为命中物化视图,无需应用层改造;这对固定口径报表、公共指标层、热点查询非常有杀伤力,因为它把“实时重算”变成了“预先算好”。
7.实时导入能力
StarRocks 支持多种导入方式,包括批量导入、流式导入、订阅式导入等,常被用于对接 Kafka/Flink 一类实时数据链路,这决定了它不像传统离线数仓那样只能 T+1,更适合分钟级甚至更低延迟的分析服务。
8.表模型
StarRocks 提供多种表模型,如 Duplicate Key、Aggregate、Unique/Primary Key 等,这些模型的本质不是“语法区别”,而是你在去重、聚合、更新语义、查询性能之间做取舍,实践里最容易犯错的是:没想清楚业务更新语义,就先选表模型,后面会很痛。
9.湖仓/外表能力
StarRocks 近年强化了对外部数据源与湖仓查询能力的支持,可直接查询部分外部存储数据,相比 Trino/Presto 的纯联邦查询模式,StarRocks 可将热数据导入本地获得更高性能,同时保留对冷数据的湖上直查能力,这使它不只是一套封闭存储,也能作为“统一查询层”接湖里的数据。
10.存算分离
3.0 版本引入的存算分离是 StarRocks 架构演进的重要里程碑:
- 弹性扩缩:CN 节点无状态,可按需快速扩容/缩容
- 成本优化:热数据本地缓存 + 冷数据对象存储,存储成本下降显著
- 多租户隔离:不同 Warehouse 可独立使用 CN 资源池
三、常用OLAP对比与选型
1.典型查询延迟对比
2.多维能力对比
3.综合对比表
维度 | StarRocks | ClickHouse | Apache Doris | Trino |
架构模型 | MPP,Shared-Nothing / Shared-Data | MPP,Shared-Nothing | MPP,Shared-Nothing | MPP,Shared-Nothing(纯计算) |
存算分离 | 3.0+ 原生支持 | ClickHouse Cloud(商业版) | 3.0+ 在推进(Multi-Compute Cluster) | 天然无状态计算 |
执行引擎 | 全面向量化 + Pipeline | 向量化 + Pipeline | 向量化 + Pipeline | 向量化(部分算子) |
优化器 | CBO(Cascades 框架,成熟) | RBO 为主 + 部分 CBO | Nereids CBO(2.0+ 引入) | CBO(成熟) |
多表 Join | 优秀(CBO + Runtime Filter) | 较弱(设计偏宽表) | 良好(逐步追赶) | 优秀(天生联邦设计) |
实时写入 | Primary Key 模型,毫秒级 | 批量写入为主,MergeTree | Unique Key 模型,秒级 | 不支持(只读查询引擎) |
并发能力 | 高(千级 QPS) | 中等(百级 QPS) | 高(千级 QPS) | 中高(依赖资源隔离) |
数据湖集成 | External Catalog 直查 | 有限(需外挂或 ClickHouse Cloud) | Multi-Catalog 直查 | 原生强项(Connector 生态丰富) |
物化视图 | 异步 MV + 自动路由 | 有限(Projection 为主) | 异步 MV + 自动路由 | 不支持 |
协议兼容 | MySQL 协议 | 自有协议 + HTTP | MySQL 协议 | 自有协议(JDBC/ODBC) |
开源许可 | Apache 2.0 | Apache 2.0 | Apache 2.0 | Apache 2.0 |
社区活跃度 | 高(GitHub 9k+ stars) | 极高(GitHub 38k+ stars) | 高(GitHub 12k+ stars,国内活跃) | 高(GitHub 10k+ stars) |
典型短板 | 生态工具链待完善 | 多表 Join、高并发弱 | CBO 成熟度追赶中 | 不支持数据写入/存储 |
4.OLAP选型指引
- 选 StarRocks:多表 Join + 实时更新 + 高并发,追求"一个引擎解决多种分析需求"
- 选 ClickHouse:超大单表聚合、时序分析、日志分析,不介意 Join 能力弱
- 选 Apache Doris:需求与 StarRocks 类似但更看重国内社区支持、运维简单
- 选 Trino:数据散布多源、不需要存储层、已有成熟数据湖基础设施