更新时间:2024-10-24 GMT+08:00
分享

StarRocks

StarRocks简介

StarRocks是一款高性能分析型数据仓库,使用向量化、MPP架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。

StarRocks既支持从各类实时和离线的数据源高效导入数据,也支持直接分析数据湖上各种格式的数据。

StarRocks兼容MySQL协议,可使用MySQL客户端和常用BI工具对接进行数据分析,同时StarRocks具备水平扩展、高可用、高可靠、易运维等特性,广泛应用于实时数仓、OLAP报表、数据湖分析等场景。

更多相关介绍请参见StarRocks

该组件当前为公测阶段,若需使用需联系技术支持申请白名单开通。

StarRocks架构

StarRocks整体架构如下图所示,FE和BE节点可以水平无限扩展。

图1 StarRocks架构
表1 StarRocks节点及角色说明

名称

说明

Client Application

StarRocks兼容MySQL协议,支持标准SQL语法,用户可通过各类MySQL客户端和常用BI工具对接。

FE

StarRocks的前端节点,主要负责管理元数据、管理客户端连接、进行查询规划、查询调度等工作。

BE

StarRocks的后端节点,主要负责数据存储和SQL计算等工作。

Leader

Leader从Follower中自动选出,FE Leader提供元数据读写服务,Follower和Observer只有读取权限,无写入权限。

Follower

Follower只有元数据读取权限,无写入权限,Follower参与Leader选举。

Observer

Observer主要用于扩展集群的查询并发能力,可选部署。Observer不参与选主,不会增加集群的选主压力。

StarRocks基本概念

在StarRocks中,数据都以表(Table)的形式进行逻辑上的描述。

StarRocks中的表由行和列构成,每行数据对应用户一条记录,每列数据具有相同的数据类型。所有数据行的列数相同,可以动态增删列。在StarRocks中,一张表的列可以分为维度列(也称为Key列)和指标列(也称为Value列),维度列用于分组和排序,指标列的值可以通过聚合函数sumcountminmaxhll_union_aggbitmap_union等累加起来。

  • 列式存储

    在StarRocks中,表数据按列存储。物理上,一列数据会经过分块编码、压缩等操作,然后持久化存储到非易失设备上。但在逻辑上,一列数据可以看成是由相同类型的元素构成的一个数组, 一行数据的所有列值在各自的数组中按照列顺序排列,即拥有相同的数组下标。数组下标是隐式的,不需要存储。表中所有的行按照维度列,做多重排序,排序后的位置就是该行的行号。

  • 索引

    StarRocks通过前缀索引 (Prefix Index) 和列级索引,能够快速找到目标行所在数据块的起始行号。

  • 加速处理

    StarRocks通过预先聚合、分区分桶、物化视图、列级索引等机制实现数据的加速处理。

  • 数据模型

    StarRocks支持四种数据模型,分别是明细模型(Duplicate Key Model)、聚合模型(Aggregate Key Model)、更新模型(Unique Key Model)和主键模型(Primary Key Model)。

    这四种数据模型能够支持多种数据分析场景,例如日志分析、数据汇总分析、实时分析等。创建表时,您需要指定数据模型(Data Model),当数据导入至数据模型时,StarRocks会按照排序键对数据进行排序、处理和存储。四种数据模型介绍如下:

    • 明细模型

      明细模型是StarRocks默认的建表模型。如果在建表时未指定任何模型,默认创建明细类型的表。

    • 聚合模型

      建表时,支持定义排序键和指标列,并为指标列指定聚合函数。当多条数据具有相同的排序键时,指标列会进行聚合。在分析统计和汇总数据时,聚合模型能够减少查询时所需要处理的数据,提升查询效率。

    • 更新模型

      建表时,支持定义主键和指标列,查询时返回主键相同的一组数据中的最新数据。相对于明细模型,更新模型简化了数据导入流程,能够更好地支撑实时和频繁更新的场景。

    • 主键模型

      主键模型支持分别定义主键和排序键。数据导入至主键模型的表中时,先按照排序键排序后再存储。查询时返回主键相同的一组数据中的最新数据。相对于更新模型,主键模型在查询时不需要执行聚合操作,并且支持谓词和索引下推,能够在支持实时和频繁更新等场景的同时,提供高效查询。

  • 数据分布

    建表时,您可以通过设置合理的分区和分桶,实现数据均匀分布和查询性能提升。数据均匀分布是指数据按照一定规则划分为子集,并且均衡地分布在不同节点上。查询时能够有效裁剪数据扫描量,最大限度地利用集群的并发性能,从而提升查询性能。

相关文档