
# StarRocks基本原理
#### StarRocks简介
StarRocks是一款全托管分析型数据仓库，可以灵活创建和管理集群以及数据。使用向量化、MPP架构、CBO、智能物化视图、可实时更新的列式存储引擎等技术实现多维、实时、高并发的数据分析。
StarRocks既支持从各种实时和离线的数据源高效导入数据，同时支持直接分析数据湖上各种格式的数据。
StarRocks兼容MySQL协议，可使用MySQL客户端和常用BI工具对接进行数据分析，同时StarRocks具备水平扩展、高可用、高可靠、易运维等特性，广泛应用于实时数仓、高并发查询、统一分析等场景。更多相关介绍请参见[StarRocks](https://docs.mirrorship.cn/zh/docs/3.1/introduction/)。
#### StarRocks架构
StarRocks整体架构如下图所示，FE和BE节点可以水平无限扩展。
图1StarRocks架构   
![](https://support.huaweicloud.com/productdesc-cloudtable/zh-cn_image_0000002396450785.png)
表1StarRocks节点及角色说明 
| **名称**             | **说明**                                                                 |
|:---|:---|
| 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列），维度列用于分组和排序，指标列的值可以通过聚合函数**sum** 、**count** 、**min** 、**max** 、**hll_union_agg** 和**bitmap_union**等累加起来。
- 列式存储 在StarRocks中，表数据按列存储。物理上，一列数据会经过分块编码、压缩等操作，然后持久化存储到非易失设备上。但在逻辑上，一列数据可以看成是由相同类型的元素构成的一个数组， 一行数据的所有列值在各自的数组中按照列顺序排列，即拥有相同的数组下标。数组下标是隐式的，不需要存储。表中所有的行按照维度列，做多重排序，排序后的位置就是该行的行号。
  

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

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

- 数据模型 StarRocks支持四种数据模型，分别是明细模型（Duplicate Key Model）、聚合模型（Aggregate Key Model）、更新模型（Unique Key Model）和主键模型（Primary Key Model）。
  这四种数据模型能够支持多种数据分析场景，例如日志分析、数据汇总分析、实时分析等。创建表时，您需要指定数据模型（Data Model），当数据导入至数据模型时，StarRocks会按照排序键对数据进行排序、处理和存储。四种数据模型介绍如下：
  - 明细模型 明细模型是StarRocks默认的建表模型。如果在建表时未指定任何模型，默认创建明细类型的表。
    
  
  - 聚合模型 建表时，支持定义排序键和指标列，并为指标列指定聚合函数。当多条数据具有相同的排序键时，指标列会进行聚合。在分析统计和汇总数据时，聚合模型能够减少查询时所需要处理的数据，提升查询效率。
    
  
  - 更新模型 建表时，支持定义主键和指标列，查询时返回主键相同的一组数据中的最新数据。相对于明细模型，更新模型简化了数据导入流程，能够更好地支撑实时和频繁更新的场景。
    
  
  
  
  - 主键模型 主键模型支持分别定义主键和排序键。数据导入至主键模型的表中时，先按照排序键排序后再存储。查询时返回主键相同的一组数据中的最新数据。相对于更新模型，主键模型在查询时不需要执行聚合操作，并且支持谓词和索引下推，能够在支持实时和频繁更新等场景的同时，提供高效查询。
    
   

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