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

目录

一、架构:分布式 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混合架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/85788.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/85788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从源码到生产:Apache 2.4.57 自动化安装实战指南(附脚本)

引言:为何选择源码安装 Apache? 在服务器运维场景中,源码编译安装 Apache HTTP Server 是实现精细化配置的重要方式。相比包管理器安装,源码安装可自定义模块组合、适配特定依赖环境,并精确控制版本。本文将通过自动化…

iOS开发中的安全实践:如何通过Ipa混淆与加固确保应用安全

随着移动应用技术的不断发展,开发者越来越重视应用的安全性,尤其是iOS应用。无论是面对大规模的数据泄露问题,还是在应用上线后避免被逆向破解,开发者们都需要采取一系列技术手段来保护应用。然而,很多开发者在应用开发…

JAVA实战开源项目:智慧生活商城系统 (Vue+SpringBoot) 附源码

本文项目编号 T 245 ,文末自助获取源码 \color{red}{T245,文末自助获取源码} T245,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

GNU Octave 基础教程(8):GNU Octave 常用数学函数

目录 一、基本算术运 二、初等数学函数 三、三角函数与反三角函数 四、统计函数 五、复数与其他函数 ✅ 小结 🔜 下一讲预告 GNU Octave 内置了大量数学函数,涵盖初等数学、线性代数、复数运算、统计函数等,非常适合科研、工程计算使用…

Go语言中的文件与IO:JSON、CSV、XML处理

在数据交换与存储中&#xff0c;JSON、CSV、XML 是常见格式。Go 标准库为这些格式提供了强大且易用的支持&#xff0c;涵盖结构体映射、读写文件、编码解码等操作。 一、JSON处理&#xff08;encoding/json&#xff09; 1. 基本使用&#xff1a;结构体 <-> JSON type U…

三种语言写 MCP

参考 https://zhuanlan.zhihu.com/p/1915029704936760261 https://www.5ee.net/archives/tmXJAgWz https://github.com/modelcontextprotocol/python-sdk https://github.com/modelcontextprotocol/typescript-sdk https://modelcontextprotocol.io/quickstart/server https:/…

Python训练营-Day38-Dataset和Dataloader类

在遇到大规模数据集时&#xff0c;显存常常无法一次性存储所有数据&#xff0c;所以需要使用分批训练的方法。为此&#xff0c;PyTorch提供了DataLoader类&#xff0c;该类可以自动将数据集切分为多个批次batch&#xff0c;并支持多线程加载数据。此外&#xff0c;还存在Datase…

SVN上传代码

SVN&#xff08;Subversion&#xff09;是一个常用的版本控制系统&#xff0c;提供了对代码管理和协作的支持。以下是SVN常见操作&#xff08;如获取代码、上传代码、合并冲突处理等&#xff09;的命令行流程及实例&#xff1a; 1. 获取代码&#xff08;Checkout&#xff09; 在…

【appium】2.初始连接脚本配置

连接配置 from appium import webdriver desired_caps {platformName: Android,automationName: UIAutomator2,deviceName: ZTEB880,appPackage: com.taobao.taobao,appActivity: com.taobao.tao.welcome.Welcome,noReset: True }driver webdriver.Remote(http://localhost:…

FliTik翻页时钟v1.1.25.36,支持安卓TV/手机/车机+windows电脑端

FliTik翻页时钟v1.1.25.36&#xff0c;支持安卓TV/手机/车机windows电脑端 FliTik翻页时钟是一款集高颜值与强大功能于一身的全平台数字时钟工具类应用&#xff0c;支持TV、iOS、安卓、PC以及鸿蒙系统。它不仅拥有精美的翻页动画…

以AI赋能创意未来:即梦3.0与Seedance1.0Lite重磅登陆POE!

近年来&#xff0c;随着人工智能技术的不断突破&#xff0c;AI模型的应用场景也在逐渐拓宽。在这一过程中&#xff0c;如何整合和利用现有的AI技术&#xff0c;实现更为便捷的创作服务&#xff0c;成为了许多科技企业关注的焦点。近日&#xff0c;全球知名的AI模型整合平台POE正…

云计算与5G:如何利用5G网络优化云平台的性能

想象一下&#xff0c;你正在用手机看视频、进行在线游戏&#xff0c;甚至是使用云存储来保存你的重要文件。所有这些背后&#xff0c;其实都离不开一个无形的力量——云计算。而今天&#xff0c;5G网络的出现&#xff0c;就像为这些云服务加装了一对翅膀&#xff0c;让它们飞得…

GPT-1 与 BERT 架构

GPT-1 架构特点 仅解码器架构&#xff1a;摈弃了传统transformer中的编码器层&#xff0c;而是直接用解码器和自注意力&#xff0c;同时抛弃掉了交叉多头注意力层&#xff0c;自注意力通过mask来完成计算。注意力块添加到12个&#xff0c;Attention的输出维数为762维&#xff0…

Day04_C语言基础数据结构重点复习笔记20250618

1.什么是计算机的大小端存储&#xff1f; 答&#xff1a;大端是数据的高位字节存储在低地址&#xff0c;低位字节存储在高地址&#xff0c;网络协议&#xff08;如TCP/IP&#xff09;通常采用大端序&#xff08;称为“网络字节序”&#xff09;。例如&#xff1a;32位整数 0x12…

基于OpenSSL实现AES-CBC 128算法的 SeedKey DLL的生成与使用

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

进程间通信、线程间通信

进程间通信、线程间通信 进程间通行&#xff08;Inter-Process Communication&#xff0c; IPC&#xff09;和线程间通信&#xff08;Thread Communication&#xff09;的方式不完全相同&#xff0c;因为进程和线程的运行环境和特性不同 进程和线程的本质区别 进程 进程是操…

【FPGA学习】FPGA入门学习即数字逻辑复习

前言&#xff1a;最近开始学习FPGA了&#xff0c;希望通过博客记录下每一次学习的过程&#xff0c;与大家共勉。 目录 一、组合逻辑电路的设计&#xff08;工程学习引入&#xff09; 二、3-8译码器设计、下载和功能演示&#xff08;在的8段数码管显示&#xff09; 2.1 Logs…

ffmpeg python rgba图片合成 4444格式mov视频,保留透明通道

def convert_pngs_to_mov(input_pattern, output_path, frame_rate30):"""将BGRA四通道PNG序列转换为ProRes 4444编码的MOV视频&#xff08;保留透明通道&#xff09;参数:input_pattern: PNG序列路径模式&#xff08;如&#xff1a;"/path/to/frames/fram…

Java 实现 PDF 转图片功能:实战教程 + 场景解析

作者:云起川南|专注 Java 实战与自动化集成 在 PDF 文档处理的各类业务场景中,“将 PDF 页面转为图片”是一个高频、刚需的功能,广泛应用于 预览展示、文件归档、图片加密水印、OCR 文本识别 等系统中。 本文将带你一步一步实战如何使用 Java 实现 PDF 转图片 功能,使用开…

面试题-有个对象key全部是string,值全部是number要定义他,不使用interface和type如何定义

在 TypeScript 里&#xff0c;若要定义一个键为string类型、值为number类型的对象&#xff0c;并且不使用interface和type&#xff0c;可以采用以下几种方式&#xff1a; 1. 内联类型注解&#xff08;Inline Type Annotation&#xff09; 直接在变量声明时使用索引签名进行类…