当前位置: 代码网 > it编程>游戏开发>ar > StarRocks(SR)的基本概念、架构及基本使用详解

StarRocks(SR)的基本概念、架构及基本使用详解

2026年01月07日 ar 我要评论
starrocks(原名 dorisdb,后开源并更名为 starrocks)是一款高性能、实时、mpp(大规模并行处理)架构的现代化分布式 sql 数据库,专为 olap(在线分析处理) 场景设计。

starrocks(原名 dorisdb,后开源并更名为 starrocks)是一款高性能、实时、mpp(大规模并行处理)架构的现代化分布式 sql 数据库,专为 olap(在线分析处理) 场景设计。它兼容 mysql 协议,支持标准 sql,具备亚秒级查询响应能力,适用于实时报表、即席查询、多维分析、用户画像、日志分析等场景。

一、核心基础概念

1.表模型(table model)

starrocks 提供三种数据模型,适应不同业务场景:

模型适用场景特点
aggregate key(聚合模型)预聚合指标(如 sum、count)相同 key 的 value 自动聚合(如 sum(clicks))
unique key(唯一主键模型)实时更新、主键去重支持 upsert,类似 hudi/iceberg 的主键更新
duplicate key(明细模型)日志、事件流等原始明细不聚合,保留所有记录,支持排序键加速查询

推荐

  • 实时数仓 → unique key(支持 cdc 更新)
  • 报表聚合 → aggregate key
  • 原始日志 → duplicate key

2.分区(partition)与分桶(bucket)

  • 分区(partition):按时间/地域等逻辑切分数据(如 partition by range(date)),用于分区裁剪
  • 分桶(bucket):每个分区内按 hash(分桶列) 分成多个 tablet(物理存储单元),实现并行计算
-- 示例:按天分区,按 user_id 分桶
create table user_behavior (
    event_time datetime,
    user_id bigint,
    item_id bigint,
    behavior varchar(32)
)
engine=olap
duplicate key(event_time, user_id)
partition by range(event_time) (
    partition p20241201 values less than ("2024-12-02"),
    partition p20241202 values less than ("2024-12-03")
)
distributed by hash(user_id) buckets 10;

3.物化视图(materialized view)

  • 自动构建预聚合索引,加速特定查询模式;
  • 查询时自动路由到最优物化视图(无需改写 sql);
  • 支持 rollup(上卷)、bitmap 精确去重hll 近似去重
-- 创建物化视图:按天统计 uv
create materialized view uv_daily_mv
as
select 
    date(event_time) as dt,
    bitmap_union(to_bitmap(user_id)) as uv
from user_behavior
group by date(event_time);

4.向量化引擎 + cbo 优化器

  • 向量化执行:一次处理 1024 行,大幅提升 cpu 利用率;
  • 基于成本的优化器(cbo):自动选择最优 join 顺序、索引、聚合策略;
  • 支持 runtime filterpredicate pushdown 等高级优化。

二、系统架构(shared-nothing mpp)

starrocks 采用 无共享(shared-nothing) 架构,主要包含两类节点:

1.fe(frontend)—— 元数据 & 查询协调

  • 角色
    • leader fe:管理元数据(表结构、分区信息)、选举主节点;
    • follower fe:参与元数据写入(多数派共识);
    • observer fe:只读副本,提升高并发查询能力。
  • 功能
    • sql 解析、查询计划生成;
    • 集群管理、负载均衡;
    • 兼容 mysql 协议(客户端直连 fe)。

2.be(backend)—— 存储 & 计算

  • 负责数据存储(tablet)、本地计算、向量化执行;
  • 数据在 be 上以 列式存储(column-oriented),支持 parquet-like 编码;
  • 自动副本管理(默认 3 副本),支持跨机架容灾。
+---------------------+
|     client (mysql)  |
+----------+----------+
           |
     +-----v-----+
     |   fe (sql解析, 优化)  |
     +-----+-----+
           |
   +-------v--------+       +------------------+
   | be1 (tablet a) | <---> | be2 (tablet b)   |
   +----------------+       +------------------+
           |                        |
   +-------v--------+       +------v-----------+
   | be3 (副本)      |       | be4 (副本)        |
   +----------------+       +------------------+

优势

  • 无单点瓶颈,横向扩展;
  • 计算靠近数据(data locality);
  • 自动故障恢复。

三、核心使用语法(兼容 mysql)

1.建表(关键参数)

create table sales (
    sale_date date,
    region varchar(32),
    product_id int,
    amount decimal(10,2),
    user_id bigint
)
engine=olap
aggregate key(sale_date, region, product_id)
partition by range(sale_date) (
    start ("2024-01-01") end ("2025-01-01") every (interval 1 day)
)
distributed by hash(product_id) buckets 16
properties(
    "replication_num" = "3",
    "storage_format" = "default"
);

2.数据导入

方式 1:stream load(http 推送)

curl --location-trusted -u user:passwd \
    -h "label:load_20241229" \
    -h "column_separator:," \
    -t data.csv http://fe_host:8030/api/db/sales/_stream_load

方式 2:routine load(kafka 实时消费)

create routine load db.sales_kafka on sales
properties(
    "desired_concurrent_number"="3",
    "max_batch_interval" = "20"
)
from kafka(
    "kafka_broker_list" = "kafka:9092",
    "kafka_topic" = "sales_topic",
    "property.kafka_default_offsets" = "offset_beginning"
);

方式 3:broker load(从 hdfs/s3 批量导入)

load label db.load_hdfs_001
(data infile("hdfs://path/to/data.parquet")
 into table sales
 format as "parquet")
with broker "my_broker";

3.查询示例

-- 多表 join(支持 shuffle/broadcast)
select 
    u.city, 
    sum(s.amount) as total
from sales s
join user_dim u on s.user_id = u.id
where s.sale_date >= '2024-12-01'
group by u.city
order by total desc
limit 10;
-- bitmap 精确去重(uv)
select 
    count(distinct user_id)  -- 自动转为 bitmap_union
from user_behavior;

4.更新与删除(unique key 模型)

-- upsert(通过 stream load 或 routine load)
-- 新数据自动覆盖旧主键
-- delete(谨慎使用,仅支持 duplicate/unique 模型)
delete from sales where sale_date < '2023-01-01';

四、核心优势 vs 传统 olap

能力starrockshive/sparkclickhouse
查询延迟亚秒级秒~分钟级亚秒级
实时更新✅(unique key)❌(replacingmergetree 有限支持)
标准 sql✅(完整 join、子查询)⚠️(join 性能差)
多表关联✅(shuffle + broadcast)
物化视图✅(自动匹配)❌(需手动)✅(但难维护)
运维复杂度低(无依赖)高(yarn/hdfs)

五、典型应用场景

  1. 实时大屏:kafka → starrocks → superset/grafana;
  2. 用户行为分析:埋点日志 → duplicate key 表 → 多维漏斗/留存;
  3. 广告效果归因:click/impression 表 → bitmap uv → roi 计算;
  4. 金融风控:交易流水 → unique key → 实时黑名单更新。

六、部署建议(生产环境)

  • fe:3 节点(1 leader + 2 follower),8c16g+;
  • be:≥3 节点,32c64g+,ssd 存储,万兆网络;
  • 监控:集成 prometheus + grafana(starrocks 提供 exporter);
  • 备份:通过 export 命令导出到 hdfs/s3。

七、生态集成

  • bi 工具:tableau、power bi、superset(通过 mysql 协议连接);
  • 数据湖:支持 external catalog(hive/iceberg/hudi);
  • 流处理:flink cdc → kafka → routine load;
  • 云原生:支持 kubernetes 部署(starrocks operator)。

总结

starrocks = 高性能 + 实时性 + 易用性 + 开源免费

它解决了传统 olap “快而不全”(如 clickhouse)或“全而不快”(如 hive)的痛点,是当前国产开源 olap 引擎的标杆。如果你需要:

  • 替代 kylin/druid 的预计算;
  • 替代 clickhouse 的复杂分析;
  • 构建统一实时数仓,

那么 starrocks 是一个非常值得投入的技术选型

到此这篇关于starrocks(sr)的基本概念、架构及基本使用介绍的文章就介绍到这了,更多相关starrocks使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com