StarRocks 入门解析:新一代 MPP 实时分析数据库的架构、核心能力与典型场景
发布时间:2026/9/17 18:58:51 作者:尧图编辑部 阅读量:1,286

StarRocks 入门解析新一代 MPP 实时分析数据库的架构、核心能力与典型场景【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks本文基于 StarRocks 官方文档 What is StarRocks? 并结合仓库源码系统介绍 StarRocks 的定位与设计理念它是一款面向企业级实时分析的新一代 MPP大规模并行处理数据库围绕全向量化引擎、基于成本的优化器CBO与智能物化视图三大核心构建支持亚秒级查询、主键表实时更新、MySQL 协议兼容以及共享存储/共享无状态的灵活架构。读完后你将能够理解 StarRocks 为什么适合多表关联的 OLAP 分析如何在共享无状态Shared-Nothing与存算分离Shared-Data两种部署形态间做选择以及它在企业中的典型落地场景。一、StarRocks 是什么StarRocks 是一款快速、新一代的 MPP 数据库设计目标是让企业的实时分析变得简单核心能力是支撑大规模数据下的亚秒级sub-second查询。它的整体设计围绕几个关键点展开全向量化执行引擎数据以列式方式存储、组织和计算充分利用 CPU 缓存与 SIMD 指令重新设计的基于成本的优化器CBO针对多表关联查询做深度优化官方文档称其 CBO 支持全部 99 条 TPC-DS SQL智能物化视图自动跟随基表数据变化更新并在查询时自动改写命中无需人工维护。StarRocks 特别适合在“新鲜数据”上做实时分析数据可以高速写入并支持实时更新和删除建表时可以选择宽表、星型star、雪花snowflake等多种模式。它兼容 MySQL 协议与标准 SQL因此 Tableau、Power BI 等主流 BI 工具可以开箱即用。StarRocks 不依赖任何外部组件如 ZooKeeper 等独立元数据存储是一个集存储、计算、优化于一体的数据分析平台便于扩展、高可用与运维简化。在协议兼容这一点上源码中有直接佐证FE 内置了完整的 MySQL 协议实现位于 fe/fe-core/src/main/java/com/starrocks/mysql/ 目录包含握手包MysqlHandshakePacket、认证包MysqlAuthPacket、命令解析MysqlCommand以及通道管理MysqlChannel等类这正是“任何 MySQL 客户端可直接连接 StarRocks”的底层实现。二、核心特性详解以下特性在 Database Features 中有完整描述此处结合源码位置做进一步展开。2.1 MPP 框架查询并行度的基石StarRocks 采用 MPP 框架一条 SQL 请求会被拆分为多个可并行执行的物理计算单元每个单元独占分配 CPU 与内存资源集群水平扩展时单查询性能随之提升。具体流程是SQL 先被解析为多个逻辑执行单元query fragment每个 fragment 再按计算复杂度实例化为一个或多个物理执行单元fragment instance。物理执行单元是 StarRocks 中最小的调度单位会被调度到 BE 节点执行一个逻辑单元可包含 Scan、Project、Agg 等多个算子各物理单元只处理部分数据最终合并得到结果。与很多分析系统使用的 Scatter-Gather 框架不同——后者只有 Gather 节点能做最终合并——MPP 框架会把数据 shuffle 到多个节点做并行合并。在 Group By 高基数字段、大表关联这类复杂查询上MPP 的资源利用率明显更高。2.2 全向量化执行引擎向量化的核心在于“列式”StarRocks 的存储、内存组织、SQL 算子计算全部以列式方式进行。列式组织能充分利用 CPU 缓存列式计算减少了虚函数调用与分支判断CPU 指令流更加充分。引擎还充分利用 SIMD 指令用更少的指令完成更多的数据操作。官方文档给出的口径是对标准数据集的测试显示该引擎使算子整体性能提升 310 倍。此外还有一项“Operation on Encoded Data”优化直接在编码后的字符串上执行算子而无需先解码显著降低 SQL 执行复杂度官方口径是查询速度提升 2 倍以上。BE 侧的列式数据模型可以从 be/src/column/ 目录148 个文件的列式数据结构实现看到完整的工程落地。2.3 基于成本的优化器CBO多表关联的执行计划复杂度可能相差多个数量级表越多可选计划越多选最优计划是 NP 难问题仅靠执行引擎无法解决必须依赖一个足够强的优化器。StarRocks 从零设计了一个 CBO采用 cascades 风格的框架并针对向量化引擎做了深度定制包含以下优化点详见 Cost Based Optimizer公共表表达式CTE复用子查询改写Subquery RewritingLateral JoinJoin Reorder关联顺序重排分布式 Join 执行策略选择低基数字段优化。2.4 实时可更新的列式存储引擎StarRocks 是列式存储引擎同类型数据连续存放编码压缩率更高、存储成本更低只查部分列时磁盘 I/O 也大幅减少。每个导入事务都保证 ACID要么整体成功要么整体失败并发事务互不干扰。实时更新的关键是Primary Key 主键表的“Delete-and-insert”模式使 Partial Update 与 Upsert 操作高效可行。源码层面主键索引的实现位于 be/src/storage/primary_index.h其中的PrimaryIndex类负责主键到行位置的快速定位使读取时可以跳过 Sort 和 Merge 操作配套的冲突消解逻辑见 be/src/storage/primary_key_compaction_conflict_resolver.h。此外存储引擎充分利用二级索引即使在海量数据更新下也能保持快速、可预期的查询性能。2.5 智能物化视图与其他产品需要人工同步基表数据的物化视图不同StarRocks 的物化视图有两个“自动”自动更新基表数据变化时物化视图数据自动刷新无需额外维护操作自动选择优化器识别到合适的物化视图时会自动改写查询去使用它无需人工干预。物化视图还能替代传统 ETL 建模不必在上游应用里做数据变换可以在 StarRocks 内用视图完成分层加工。例如用外部物化视图基于数据湖原始数据建规范化表 → 用异步物化视图建非规范化表 → 再建一个视图支撑高并发查询形成一条完整的湖仓内建模链路。更多语法与用法见 Materialized View。2.6 数据湖分析StarRocks 不仅可以分析本地数据还能作为计算引擎直接分析 Apache Hive、Apache Iceberg、Apache Hudi、Delta Lake 等数据湖中的数据。其关键能力是外部目录External Catalog作为外部元数据服务的连接层无需迁移数据即可跨系统查询 HDFS、S3 上 Parquet、ORC、CSV 等格式的数据实现湖与仓的统一访问。架构上数据湖负责数据的存储、组织与维护StarRocks 负责计算与分析参见 Catalog Overview。三、架构FE / BE / CN 与两种部署形态StarRocks 的架构非常简单整个系统只有两类组件前端节点FE和后端节点BE或CNCompute Node。使用本地存储时部署 BE数据放在对象存储或 HDFS 上时部署 CN。节点可无停机水平扩展元数据与服务数据有副本机制可有效避免单点故障。3.1 FE元数据管理与查询规划FE 负责元数据管理、客户端连接管理、查询规划与查询调度。每个 FE 使用 BDB JEBerkeley DB Java Edition在内存中保存并维护一份完整元数据副本保证所有 FE 间服务一致。FE 分三种角色FE 角色元数据管理参与 Leader 选举Leader读写元数据。Follower/Observer 只能读写请求被路由到 LeaderLeader 更新后通过 Raft 协议同步变更写入需同步到超过半数 Follower 才算成功Leader 本身也是 Follower由 Follower 中选举产生选举要求集群中超过半数 Follower 在线Leader 故障后 Follower 重新选举Follower只读元数据从 Leader 同步并重放日志更新元数据参与选举要求超过半数 Follower 在线Observer从 Leader 同步并重放日志更新元数据不参与选举主要用于提升集群查询并发度不参与选举不增加 Leader 选举压力3.2 BE数据存储与 SQL 执行Shared-Nothing共享无状态架构是典型 MPP 形态BE 既做存储又做计算直接访问本地数据完成本地计算避免数据传输与拷贝查询性能极佳多副本机制保障高可用适合追求极致查询性能的场景。数据存储各 BE 存储能力对等FE 按预定义规则分发数据BE 对导入的数据做转换、按目标格式落盘并生成索引SQL 执行FE 将 SQL 解析为逻辑执行计划再转换为可在 BE 上执行的物理计划存储目标数据的 BE 直接执行查询无需数据搬迁。3.3 Shared-Data存算分离架构对象存储S3、GCS、Azure Blob、MinIO 等与 HDFS 在成本、可靠性、可扩展性上有天然优势。存算分离架构用无状态计算节点 CN替代 BECN 只负责计算与热点数据缓存数据存放在低成本远端存储上缓存命中时查询性能与 Shared-Nothing 相当且 CN 可在秒级内增删而无需数据再平衡存储与计算可独立弹性伸缩。缓存体系是多层次的内存 → 本地磁盘 → 远端存储热点数据优先走缓存与本地盘冷数据从对象存储拉取并回填本地缓存以加速后续查询建表时开启缓存后数据会同时写入本地盘与对象存储。云原生表的数据文件仍是 segment 格式复用 Shared-Nothing 的全部索引技术。详见 Architecture。两种形态的选择可以概括为追求本地数据最优查询延迟选 Shared-NothingBE追求存储成本、弹性伸缩与资源隔离选 Shared-DataCN。四、典型应用场景StarRocks 覆盖的六大企业分析场景OLAP 多维分析、实时分析、高并发分析、自定义报表、即席查询、统一分析中官方文档重点展开四类4.1 OLAP 多维分析MPP 框架与向量化引擎让用户可在多种数据模式宽表、星型、雪花间自由选择来开发多维报表。典型场景包括用户行为分析、用户画像/标签/打标、高维指标报表、自助式 Dashboard、服务异常探测分析、跨主题分析、金融数据分析、系统监控分析。4.2 实时分析依托主键表实现实时更新TP交易处理数据库中的数据变更可在秒级内同步到 StarRocks构建实时数仓。典型场景在线促销分析、物流跟踪分析、金融行业绩效分析与指标计算、直播质量分析、广告投放分析、驾驶舱管理、APM应用性能管理。4.3 高并发分析通过高性能数据分布、灵活索引与智能物化视图StarRocks 支撑面向终端用户的高并发分析广告主报表分析、零售行业渠道分析、SaaS 产品面向用户的分析、多标签页 Dashboard 分析。4.4 统一分析湖仓一体一个系统同时支撑多种分析场景降低系统复杂度与总拥有成本TCO数据湖与数据仓在 StarRocks 内统一纳管高并发、低延迟要求的查询直接跑在 StarRocks 上湖内数据则通过外部目录或外表访问无需搬数。五、许可协议与仓库结构StarRocks 采用Apache 2.0协议开源见 LICENSE.txt。代码仓库分两大主体fe/为 Java 实现的 FE其中fe-core/src/main/java/com/starrocks/下约 5700 个 Java 文件覆盖元数据、优化器、MySQL 协议、物化视图等模块be/为 C 实现的 BE/CN 执行与存储引擎第三方代码与二进制依赖的许可分别收录在 licenses/ 与 licenses-binary/ 目录。六、延伸阅读What is StarRocks?本文的官方原始文档ArchitectureFE/BE/CN 节点与两种部署形态的完整说明Database FeaturesMPP、向量化、CBO、物化视图、湖分析的官方特性描述Cost Based OptimizerCBO 使用与调优Materialized View物化视图语法与管理Catalog Overview外部目录与数据湖接入be/src/storage/primary_index.h主键索引核心实现fe/fe-core/src/main/java/com/starrocks/mysql/MysqlChannel.javaMySQL 协议通道实现【免费下载链接】starrocksThe worlds fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考