Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >StarRocks的初步介绍和使用

StarRocks的初步介绍和使用

原创
作者头像
码之有理
发布于 2024-12-09 03:51:46
发布于 2024-12-09 03:51:46
1K00
代码可运行
举报
运行总次数:0
代码可运行

官方文档:https://docs.starrocks.io/zh/docs/quick_start/

快速开始教程:https://docs.starrocks.io/zh/docs/quick_start/shared-nothing/

中文社区:https://forum.mirrorship.cn/

StarRocks 是一款基于 MPP(Massive Parallel Processing)架构的分布式数据仓库产品,旨在为企业提供高性能、低成本的数据分析解决方案。StarRocks 支持 ANSI SQL,可与主流的 BI 工具无缝集成,支持多种数据源接入,满足企业的多样化数据需求。充分吸收关系型 OLAP 数据库分布式存储系统优秀成果。其架构简洁,采用了全面向量化引擎,兼容 MySQL 协议支持标准 SQL 语法,可构建大宽表、星型模型、雪花模型在内的各类模型。

特性

兼容 MySQL 协议

StarRocks 兼容 MySQL 协议,支持标准 SQL。用户可以轻松地通过 MySQL 客户端连接到 StarRocks 实时查询分析数据。

实时导入

StarRocks 能够支持秒级的导入延迟,提供准实时的服务能力。StarRocks 的存储引擎在数据导入时能够保证每一次操作的 ACID。一个批次的导入数据生效是原子性的,要么全部导入成功,要么全部失败。并发进行的各个事务相互之间互不影响,对外提供 Snapshot Isolation 的事务隔离级别。

优化器CBO

StarRocks 从零设计并实现了一款全新的,基于代价的优化器 CBO(Cost Based Optimizer)。该优化器是 Cascades Like 的,在设计时,针对 StarRocks 的全面向量化执行引擎进行了深度定制,并进行了多项优化和创新。该优化器内部实现了公共表达式复用,相关子查询重写,Lateral Join,Join Reorder,Join 分布式执行策略选择,低基数字典优化等重要功能和优化。目前,该优化器已可以完整支持 TPC-DS 99 条 SQL 语句。

由于全新 CBO 的支持,StarRocks 能比同类产品更好地支持多表关联查询,特别是复杂的多表关联查询,让全面向量化引擎能够发挥极致的性能。

分析数据湖

使用 StarRocks 统一管理数据湖和数据仓库,将高并发和实时性要求很高的业务放在 StarRocks 中分析,也可以使用 External Catalog外部表进行数据湖上的分析。

StarRocks 不仅能高效的分析本地存储的数据,也可以作为计算引擎直接分析数据湖中的数据。用户可以通过 StarRocks 提供的 External Catalog,轻松查询存储在 Apache Hive、Apache Iceberg、Apache Hudi、Delta Lake 等数据湖上的数据,无需进行数据迁移。支持的存储系统包括 HDFS、S3、OSS,支持的文件格式包括 Parquet、ORC、CSV。

如上图所示,在数据湖分析场景中,StarRocks 主要负责数据的计算分析,而数据湖则主要负责数据的存储、组织和维护。使用数据湖的优势在于可以使用开放的存储格式和灵活多变的 schema 定义方式,可以让 BI/AI/Adhoc/报表等业务有统一的 single source of truth。而 StarRocks 作为数据湖的计算引擎,可以充分发挥向量化引擎和 CBO 的优势,大大提升了数据湖分析的性能。

Catalog

Catalog 分为 Internal catalog 和 External catalog。Internal catalog 是内部数据目录,用于管理导入至 StarRocks 中的数据以及内部的物化视图等。每个集群都有且只有一个名为 default_catalog 的 Internal catalog,包含一个或多个数据库。StarRocks 作为数据仓库存储数据,能够显著提高查询性能,尤其应对大规模数据的复杂查询分析。

External catalog 是外部数据目录,用于连接数据湖中的数据。您可以将 StarRocks 作为查询引擎,直接查询湖上数据,无需导入数据至 StarRocks。

数据表

StarRocks 中的表分为两类:内部表和外部表。

内部表

内部表归属于 Internal catalog 的数据库,数据保存在 StarRocks 中。内部表由行和列构成,每一行数据是一条记录。

备注

此处内部表的行和列为逻辑概念,在 StarRocks 中数据实际是按列存储的。物理上,一列数据会经过分块编码、压缩等操作,然后持久化存储。

在 StarRocks 中,根据约束的类型将内部表分四种,分别是主键表、明细表、聚合表和更新表,适用于存储和查询多种业务场景中的数据,比如原始日志、实时数据、以及汇总数据。

内部表采用分区+分桶的两级数据分布策略,实现数据均匀分布。并且分桶以多副本形式均匀分布至 BE 节点,保证数据高可用。

外部表

外部表是 External catalog 中的表,实际数据存在外部数据源中,StarRocks 只保存表对应的元数据,您可以通过外部表查询外部数据。

执行 DESCRIBE 查看表结构。

StarRocks 提供四种类型的表,包括明细表、主键表、聚合表和更新表,适用于存储多种业务数据,例如原始数据、实时频繁更新的数据和聚合数据。

  • 明细表简单易用,表中数据不具有任何约束,相同的数据行可以重复存在。该表适用于存储不需要约束和预聚合的原始数据,例如日志等。
  • 主键表能力强大,具有唯一性非空约束。该表能够在支撑实时更新、部分列更新等场景的同时,保证查询性能,适用于实时查询。
  • 聚合表适用于存储预聚合后的数据,可以降低聚合查询时所需扫描和计算的数据量,极大提高聚合查询的效率。
  • 更新表适用于实时更新的业务场景,目前已逐渐被主键表取代。

由于主键表仅支持分桶策略为哈希分桶,因此您还需要通过 DISTRIBUTED BY HASH () 定义哈希分桶键。

在实际的业务场景中,为了加速查询和管理数据,创建主键表时,通常还会用到数据分布、排序键等功能。

自 3.0 起主键表解耦了主键和排序键,因此您可以选择经常作为查询过滤条件的列去构成排序键。假设经常根据订单日期和商户组合维度查询商品销售情况,则您可以通过 ORDER BY (dt,merchant_id) 指定排序键为 dtmerchant_id

注意,如果您使用了数据分布策略,由于目前主键表要求主键必须包括分区列和分桶列,假设采用的数据分布策略是将 dt 作为分区列并且 merchant_id 作为哈希分桶列,则主键还需要包括 dtmerchant_id

视图和物化视图

物化视图分为同步物化视图和异步物化视图。其中异步物化视图能力更加强大,能够存储基于多个基表(内部表和外部表)的预计算结果,并且支持丰富的聚合算子。

StarRocks 支持用户使用物化视图(materialized view)进行查询加速和数仓分层。不同于一些同类产品的物化视图需要手动和原表做数据同步,StarRocks 的物化视图可以自动根据原始表更新数据。只要原始表数据发生变更,物化视图的更新也同步完成,不需要额外的维护操作就可以保证物化视图能够维持与原表一致。不仅如此,物化视图的选择也是自动进行的。StarRocks 在进行查询规划时,如果有合适的物化视图能够加速查询,StarRocks 自动进行查询改写(query rewrite),将查询自动定位到最适合的物化视图上进行查询加速。

StarRocks 的物化视图可以按需灵活创建和删除。用户可以在使用过程中视实际使用情况来判断是否需要创建或删除物化视图。StarRocks 会在后台自动完成物化视图的相关调整。

StarRocks 的物化视图可以替代传统的 ETL 建模流程,用户无需在上游应用处做数据转换,可以在使用物化视图时完成数据转换,简化了数据处理流程。

例如图中,最底层 ODS 的湖上数据可以通过 External Catalog MV 来构建 DWD 层的 normalized table;并且可以通过多表关联的物化视图来构建 DWS 层的宽表 (denormalized table);最上层可以进一步构建实时的物化视图来支撑高并发的查询,提供更加优异的查询性能。

视图是一种灵活的查询工具,它可以将多个表虚拟地组合在一起。用户可以通过视图简单地执行查询操作,而无需了解底层的物理表结构和数据分布。此外,视图还可以根据用户需求进行定制,提供更灵活的查询功能。

物化视图则是用于支持多表关联和丰富的聚合操作。物化视图是预先计算并存储的视图,可以快速地执行复杂的查询操作。与视图不同,物化视图可以存储实际的数据结果,从而提升查询速度。此外,物化视图还支持多种查询重写场景,可以在查询执行时自动或透明地重写查询语句,以提高查询效率。

通过引入视图和物化视图两种技术,StarRocks实现了更高效的查询操作和更复杂的数据处理任务。这两种技术为用户提供了方便快捷的数据查询和处理服务,从而提高数据查询的整体性能和效率。

SR物化视图(即物化视图)会占用额外的存储空间。根据搜索结果中的描述,每一个新的物化视图都是额外的存储负担。因此,虽然物化视图可以提高查询性能和减少资源消耗,但是它们需要额外的存储空间来维护预定义查询的结果。所以,在使用物化视图时,需要合理控制物化视图的数量,以避免过多的存储负担。

参考:https://tech.qimao.com/starrockszhi-shi-tu-ji-wu-hua-shi-tu-de-shi-jian/

Routine Load

Routine Load是一种数据导入技术,主要用于从Kafka消息队列中持续不断地导入数据到支持该技术的数据库中,如Apache Doris和StarRocks。以下是Routine Load的一些关键特性和基本原理:

  1. 持续消费数据:Routine Load会持续消费Kafka Topic中的数据,并将其写入到数据库中。
  2. 作业与任务:创建Routine Load作业后,会生成一个常驻的导入作业(load job)和若干个导入任务(load task)。导入作业是一个持续运行的任务,负责不断地消费Kafka中的数据;而导入任务是导入作业的细分,作为独立的导入基本单位,以Stream Load的方式写入到后端(BE)中。
  3. 导入流程:Client向Frontend(FE)提交Routine Load作业,FE通过Job Scheduler将Routine Load作业拆分成若干个Routine Load任务,这些任务在Backend(BE)上被视为Stream Load任务进行导入,导入完成后向FE汇报,FE根据汇报结果继续生成新的任务或对失败的任务进行重试。
  4. 支持的数据格式:Routine Load支持从Kafka中消费CSV和JSON格式的数据。
  5. 使用限制:Routine Load支持无认证的Kafka访问以及通过SSL方式认证的Kafka集群。支持的消息格式为CSV或JSON文本格式,且CSV中每个message为一行,行尾不包含换行符。
  6. Exactly-Once语义:Routine Load是一个流式导入作业,支持Exactly-Once语义,保证数据不丢不重。
  7. SQL控制:用户可以通过SQL命令控制Routine Load任务的暂停、继续及停止。

Routine Load通过这种方式,提供了一种高效、可靠的数据导入解决方案,特别适用于需要实时处理流数据的场景。

安装和使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -itd \
--name quickstart starrocks/allin1-ubuntu

docker exec -it quickstart \
mysql -P 9030 -h 127.0.0.1 -u root --prompt="StarRocks > "

show databases;

集群管理

配置管理

FE 参数分为动态参数和静态参数。

  • 动态参数可通过 SQL 命令进行在线配置和调整,方便快捷。需要注意通过 SQL 命令所做的动态设置在重启 FE 后会失效。如果想让设置长期生效,建议同时修改 fe.conf 文件。
  • 静态参数必须在 FE 配置文件 fe.conf 中进行配置和调整。调整完成后,需要重启 FE 使变更生效。

参数是否为动态参数可通过 ADMIN SHOW CONFIG 返回结果中的 IsMutable 列查看。TRUE 表示动态参数。

静态和动态参数均可通过 fe.conf 文件进行修改。

参考:https://docs.starrocks.io/zh/docs/administration/management/FE_configuration/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ADMIN SHOW FRONTEND CONFIG;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ADMIN SHOW FRONTEND CONFIG LIKE '%check_java_version%';
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ADMIN SET FRONTEND CONFIG ("key" = "value");

性能调优

https://docs.starrocks.io/zh/docs/administration/Query_planning/

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
敖丙工作以来总结的大厂SQL调优姿势
这天我正在午休呢,公司DBA就把我喊醒了,说某库出现大量慢SQL,很快啊,很快,我还没反应过来,库就挂了,我心想现在的用户不讲武德啊,怎么在我睡觉的时候大量请求呢。
敖丙
2020/11/24
7540
百度后端二面有哪些内容,万字总结(一)
这是最近一位老朋友去百度面试,应该是面试资深工程师岗位,他跟我讲被问到mysql索引知识点?其实面试官主要还是考察对mysql的性能调优相关,问理论知识其实也是想知道你对原理的认知,从而确认你是否有相关的调优经验。朋友说他回答的还行,然后很顺利进行了三面四面。那么本文将跟大家一起来聊一聊这个如何回答面试官的这个问题!
我是阿沐
2021/06/21
5500
百度后端二面有哪些内容,万字总结(一)
MySQL索引由浅入深
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构,索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。
三分恶
2021/03/05
7780
MySQL索引由浅入深
一千个不用 Null 的理由
港真,Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判断,麻烦而又臃肿,为此 java8 引入了 Optional 来避免这一问题。 下面咱们要聊的是 MySQL 里的 null,在大量的 MySQL 优化文章和书籍里都提到了字段尽可能用NOT NULL,而不是NULL,除非特殊情况。但却都只给结论不说明原因,犹如鸡汤不给勺子一样,让不少初学者对这个结论半信半疑或
用户1177713
2018/02/24
1.2K0
一千个不用 Null 的理由
mysql之索引的工作机制
当db的量达到一定数量级之后,每次进行全表扫描效率就会很低,因此一个常见的方案是建立一些必要的索引作为优化手段,那么问题就来了:
一灰灰blog
2018/03/26
1.5K0
mysql之索引的工作机制
技术译文 | 为什么 MySQL 添加一个简单索引后表大小增长远超预期?
本文和封面来源:https://www.percona.com/,爱可生开源社区翻译。
爱可生开源社区
2024/02/21
2710
技术译文 | 为什么 MySQL 添加一个简单索引后表大小增长远超预期?
Mysql索引原理及应用场景
在工作当中,涉及到Mysql的查询,我们经常会遇到给某个表某个字段加索引的诉求,加上索引能够让我们的sql得到查询速度上的提升。但索引的原理是什么呢,他又是怎么工作的,需要开发者对基础知识有一定的了解。
benym
2022/08/30
1.3K0
Mysql索引原理及应用场景
【知识】MySQL索引原理及慢查询优化
MySQL用来加快查询的技术很多,其中最重要的是索引。通常索引能够快速提高查询速度。如果不适用索引,MYSQL必须从第一条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。但也不全是这样。本文讨论索引是什么以及如何使用索引来改善性能,以及索引可能降低性能的情况。
辉哥
2021/06/10
1.2K0
【知识】MySQL索引原理及慢查询优化
男朋友连模糊匹配like %%怎么优化都不知道
三歪最近发现我一直在写MySQL的文章,然后就跟我说他有sql用到like的时候就没办法用到索引了,问我怎么办。
敖丙
2020/11/24
3K0
男朋友连模糊匹配like %%怎么优化都不知道
SQL优化之一则MySQL中的DELETE、UPDATE 子查询的锁机制失效案例
开发与维护人员避免不了与 in/exists、not in/not exists 子查询打交道,接触过的人可能知道 in/exists、not in/not exists 相关子查询会使 SELECT 查询变慢,没有 join 连接效率,却不知道 DELETE、UPDATE 下的子查询却可能导致更严重的锁问题,直接导致 MySQL InnoDB 行锁机制失效,锁升级,严重影响数据库的并发和性能。对大表或高并发的表的执行 DELETE、UPDATE 子查询操作,甚至可能导致业务长时间不可用。
数据和云
2018/07/27
2.5K0
SQL优化之一则MySQL中的DELETE、UPDATE 子查询的锁机制失效案例
MySQL 之 JSON 支持(二)—— JSON 索引
从 MySQL 8.0.17 开始,InnoDB 支持多值索引。多值索引是在存储数组值的列上定义的辅助索引。“一般”索引对于每个数据记录有一个索引记录(1:1)。多值索引中单个数据记录可以具有多个索引记录(N:1)。多值索引用于对 JSON 数组进行索引。例如,在下面的 JSON 文档中,对邮政编码数组定义的多值索引为每个邮政编码创建一个索引记录,每个索引记录引用相同的数据记录。
用户1148526
2024/06/07
8740
4.MySQL索引原理
一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。
changxin7
2019/09/10
6630
解决程序慢,要学会预测表容积,不能一味地加索引
索引是应用程序设计和开发的一个重要方面。如果索引过多,应用程序中的更新、删除等操作会变慢,性能会受到影响;如果索引过少,对查询性能又会产生影响。
CSDN技术头条
2018/07/30
1.1K0
解决程序慢,要学会预测表容积,不能一味地加索引
什么是覆盖索引_数据库为什么一定要覆盖索引
在了解覆盖索引之前我们先大概了解一下什么是聚集索引(主键索引)和辅助索引(二级索引)
全栈程序员站长
2022/09/27
5150
什么是覆盖索引_数据库为什么一定要覆盖索引
你们一般都是怎么进行SQL调优的?MySQL在执行时是如何选择索引的?
过年回来的第二周了,终于有时间继续总结知识了。这次来看一下SQL调优的知识,这类问题基本上面试的时候都会被问到,无论你的岗位是后端,运维,测试等等。 像本文标题中的两个问题,就是我在实际面试过程中遇到的,所以这次就主要围绕着这两个问题来总结一下。
纪莫
2021/03/04
9640
你们一般都是怎么进行SQL调优的?MySQL在执行时是如何选择索引的?
MySQL明明有索引,为什么不用?
今天在线上运维过程中,遇到了一个MySQL的经典索引问题。线上的表结构不方便展示,我模拟了一个表结构用于说明问题:
AsiaYe
2022/01/25
2K0
MySQL明明有索引,为什么不用?
一千个不用 Null 的理由!
港真,Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判断,麻烦而又臃肿,为此 java8 引入了 Optional 来避免这一问题。
java进阶架构师
2020/08/28
4410
一千个不用 Null 的理由!
一文看懂如何分析MySQL Explain(1/3)
在网上经常看到一些写SQL优化经历的文章,看完文章发现懂的不用看,不懂的看不懂,大家都是都在讲调优经历,但是忽略了如何看懂执行计划,如何调优。本文不讲调优经历,只讲如何看懂执行计划及常用的调优原则,从而可以有针对性的提升我们查询语句的性能。
程序员小强
2019/06/11
1.5K0
【干货】MySQL索引与优化实践
索引的目的在于提高查询效率,其功能可类比字典,通过该索引可以查询到我们想要查询的信息,因此,选择建立好的索引十分重要
搜云库技术团队
2019/10/17
8820
SQL学习笔记五之MySQL索引原理与慢查询优化
一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。
Jetpropelledsnake21
2019/02/15
9050
推荐阅读
相关推荐
敖丙工作以来总结的大厂SQL调优姿势
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验