【StarRocks系列】架构、核心概念

目录

[一、架构:分布式 MPP + 列式存储 + 向量化引擎](#一、架构:分布式 MPP + 列式存储 + 向量化引擎)

二、存储:高性能列式存储引擎

三、表设计:三类模型适配不同场景

四、数据写入:多种方式支持实时与批量

五、数据读取:极致优化的查询引擎

总结:StarRocks的核心优势


以下是StarRocks核心概念的详细解析,涵盖架构、存储、表设计、数据写入与读取:


一、架构:分布式 MPP + 列式存储 + 向量化引擎

  1. FE (Frontend) 节点
    • 职责:元数据管理、SQL解析、查询优化、查询调度、集群管理、身份认证。
    • 高可用:基于类Raft协议(BDBJE)实现Leader/Follower/Observer多角色,确保元数据强一致性与故障自动切换。
    • 优化器:采用CBO(Cost-Based Optimizer),基于精准统计信息(表/列/分区分桶)生成最优执行计划,支持复杂谓词下推、Join重排序、物化视图改写。
  1. BE (Backend) 节点
    • 职责:数据存储、SQL执行、数据压缩、副本管理。
    • 分布式执行:采用MPP(Massively Parallel Processing)架构,将查询拆解为多个物理算子(Scan/Aggregation/Join等),在BE节点间并行执行。
    • 向量化引擎:数据按列批量处理(每批1024行),利用CPU SIMD指令(如AVX2)提升计算效率,减少虚函数调用。

二、存储:高性能列式存储引擎

  1. 列式存储
    • 数据按列组织,独立压缩与编码,减少I/O量(仅读取查询涉及的列)。
    • 高效压缩:支持Zstandard/LZ4/Snappy等算法,结合字典编码、位图编码、Run-Length Encoding(RLE),压缩比达5~10倍。
  1. 智能索引
    • 前缀索引:每1024行构成一个数据块(Segment),按表的前36字节自动生成前缀索引,加速等值/范围查询。
    • Bloom Filter索引:对高基数列(如UserID)构建,快速过滤不匹配的数据块。
    • ZoneMap索引:存储每个数据块的列值Min/Max,用于分区剪枝和范围过滤。
  1. 数据分区分桶
    • 分区 (Partitioning) :按时间/枚举值划分(如PARTITION BY dt),实现分区剪枝,减少扫描量。
    • 分桶 (Bucketing) :对分区内数据哈希分桶(如DISTRIBUTED BY HASH(user_id) BUCKETS 10),确保数据均匀分布,优化Join/聚合性能。
  1. 多副本机制
    • 基于Multi-Raft协议实现副本强一致,支持3副本(默认),自动修复副本故障。

三、表设计:三类模型适配不同场景

  1. 明细模型 (Duplicate Key Model)
    • 适用场景:日志、行为流水等原始数据存储。
    • 特点 :无主键,按导入批次存储全量明细数据,支持任意列排序键(如DUPLICATE KEY(event_time, user_id))。
  1. 聚合模型 (Aggregate Key Model)
    • 适用场景:预聚合报表(如PV/UV/GMV)。

    • 特点:定义主键(维度列)与聚合函数(指标列),如:

      CREATE TABLE agg_table (
      dt DATE,
      user_id BIGINT,
      pv BIGINT SUM, -- 自动求和
      uv BIGINT REPLACE -- 仅保留最新值
      ) AGGREGATE KEY(dt, user_id);

  1. 更新模型/主键模型 (Unique Key Model / Primary Key Model)
    • 适用场景:需要按主键更新的场景(如用户画像)。
    • 特点
      • 更新模型:定义主键,相同主键新数据覆盖旧数据(Merge-on-Read)。
      • 主键模型:基于主键索引(内存/磁盘)实现Delete+Insert,支持实时更新(2.3+版本)。

四、数据写入:多种方式支持实时与批量

  1. Stream Load
    • HTTP协议推送CSV/JSON数据,适用于实时小批量写入(毫秒级延迟)。
    • 示例:curl -X POST -u root: -T data.csv http://fe_host:8030/api/db/table/_stream_load
  1. Routine Load
    • 持续消费Kafka消息,自动提交偏移量,保障Exactly-Once语义。

    • 示例:

      CREATE ROUTINE LOAD job_name ON table_name
      PROPERTIES ("format"="json")
      FROM KAFKA ( "kafka_broker_list"="broker1:9092", "kafka_topic"="topic_name");

  1. Broker Load
    • 通过Broker进程(HDFS/S3)批量导入Parquet/ORC文件,适合TB级数据迁移。

    • 示例:

      LOAD LABEL label_name (
      DATA INFILE("hdfs://path/*.parquet")
      INTO TABLE target_table
      ) WITH BROKER "broker_name";

  1. Spark/Flink Connector
    • 通过标准接口与大数据生态集成,支持Structed Streaming/Flink SQL写入。

五、数据读取:极致优化的查询引擎

  1. MPP并行计算
    • 查询被拆解为物理计划,在多个BE节点并行执行,节点间通过Shuffle Exchange数据。
  1. 智能优化技术
    • 局部聚合:在数据分桶内预聚合,减少Shuffle数据量。
    • Runtime Filter:动态生成Bloom Filter/MinMax Filter,下推至Scan节点过滤数据。
    • Join优化:支持Broadcast Join(小表)、Shuffle Join(大表)、Colocate Join(同分桶表免Shuffle)。
  1. 物化视图 (Materialized View)
    • 预计算聚合结果,查询自动路由至物化视图,加速响应。

    • 示例:创建小时级聚合视图,原始表按分钟存储。

      CREATE MATERIALIZED VIEW mv_hourly
      AS SELECT dt, hour, user_id, SUM(pv)
      FROM base_table GROUP BY dt, hour, user_id;


总结:StarRocks的核心优势

  • 实时分析:秒级数据可见性,亚秒级查询响应。
  • 高并发:向量化引擎+多级缓存(PageCache/DataCache)支持数千QPS。
  • 易用性:兼容MySQL协议,支持标准SQL/BI工具。
  • 成本效益:高压缩比+高效存储格式,降低存储与计算成本。

通过以上设计,StarRocks在实时数仓、交互式分析、高并发报表等场景表现卓越,适合替代传统Hadoop+MPP混合架构。

相关推荐
爬山算法7 分钟前
MySQL(84)如何配置MySQL防火墙?
android·数据库·mysql
拾荒的小海螺10 分钟前
MySQL:SQL 慢查询优化的技术指南
数据库·sql·mysql
爬山算法13 分钟前
MySQL(83)如何设置密码复杂度策略?
android·数据库·mysql
weixin_4569042725 分钟前
SQLite 数据库操作完整指南
数据库·sqlite
漫步者TZ1 小时前
【StarRocks系列】StarRocks vs Mysql
数据库·starrocks·mysql·分布式数据库
Java初学者小白1 小时前
秋招Day14 - MySQL - SQL优化
java·数据库·sql·mysql
神洛华2 小时前
SQL Server基础语句2:表连接与集合操作、子查询与CET、高级查询
数据库·sql
发仔1232 小时前
超硬核实战!用Java玩转Neo4j图数据库,轻松搞定复杂关系网!
java·数据库
陈卓4102 小时前
索引——高效查询的关键
数据库·sql·mysql·索引