StarRocks学习笔记

  • 介绍
  • 场景
  • 建表
    • 明细模型
    • 聚合模型
    • 更新模型
    • 主键模型

介绍

StarRocks是一款经过业界检验、现代化,面向多种数据分析场景的、兼容MySQL协议的、高性能分布式关系型分析数据库。
StarRocks充分吸收关系型 OLAP 数据库和分布式存储系统在大数据时代的优秀研究成果,并在业界实践的基础上,进一步改进优化,架构升级和添加新功能,形成了全新的企业级产品。
StarRocks致力于满足企业用户的多种数据分析场景,支持多种数据模型(明细模型、聚合模型、更新模型、主键模型), 多种导入方式, 可整合和接入多种现有系统(Spark、Flink、Hive、ElasticSearch、Iceberg、Hudi等)。
StarRocks兼容MySQL协议,可使用MySQL客户端和常用BI工具对接StarRocks来进行数据分析。
StarRocks采用分布式架构,对table进行水平划分并以多副本存储。集群规模可以灵活伸缩,能够支持10PB级别的数据分析;支持MPP,并行加速计算;支持多副本,具有弹性容错能力。
StarRocks采用关系模型,使用严格的数据类型,使用列式存储引擎,通过编码和压缩技术,降低读写放大。使用向量化执行方式,充分挖掘多核CPU的并行计算能力,从而显著提升查询性能。

场景

在这里插入图片描述

建表

StarRocks 共有四类数据模型,明细模型、聚合模型、更新模型、主键模型。
分别适用于不同的业务场景。
在这里插入图片描述
建表语法:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...]
[, index_definition1[, index_definition2,]])
[ENGINE = [olap|mysql|elasticsearch|hive]]
[key_desc (key1,key2...)]
[COMMENT "table comment"];
[partition_desc]
[distribution_desc]
[rollup_index][PROPERTIES ("key"="value", ...)]
[BROKER PROPERTIES ("key"="value", ...)]

duplicate key :排序字段
数据按照指定的key列进行排序,创建时应选择经常过滤的列放在key列,提高查询效率。
partition_desc:分区字段
通常选取常用的日期过滤字段作为分区字段,查询时可以进行分区裁剪,减少数据扫描量。实际应用中,用户一般选取时间列作为分区键,具体划分的粒度视数据量而定,单个分区原始数据量建议维持在100G以内。
distribution_desc:分桶字段
选取基数较高的字段做为分桶字段,可以选择多个列进行分桶。尽量将数据打散,避免出现数据倾斜。
把经常需要作为查询过滤条件的列作为分桶键,可以在查询时裁剪掉大量无关分桶。但如果只利用该分桶键,数据分布可能会出现严重的数据倾斜, 导致系统局部的性能瓶颈。这个时候,用户需要适当调整分桶的字段,以将数据打散,利用分布式集群的整体并发性能,提高吞吐。
分桶的数据的压缩方式使用的是Lz4。建议压缩后磁盘上每个分桶数据文件大小在100MB-1GB左右。这种模式在多数情况下足以满足业务需求。
对于StarRocks而言,分区和分桶的选择是非常关键的。在建表时选择好的分区分桶列,可以有效提高集群整体性能。当然,在使用过程中,也需考虑业务情况,根据业务情况进行调整。
以下是针对特殊应用场景下,对分区和分桶选择的一些建议:

  1. 数据倾斜:业务方如果确定数据有很大程度的倾斜,那么建议采用多列组合的方式进行数据分桶,而不是只单独采用倾斜度大的列做分桶。
  2. 高并发:分区和分桶应该尽量覆盖查询语句所带的条件,这样可以有效减少扫描数据,提高并发。
  3. 高吞吐:尽量把数据打散,让集群以更高的并发扫描数据,完成相应计算。

明细模型

一般用明细模型来处理的场景有如下特点:
 需要保留原始的数据(例如原始日志,原始操作记录等)来进行分析;
 查询方式灵活, 不局限于预先定义的分析方式, 传统的预聚合方式难以命中;
 数据更新不频繁。导入数据的来源一般为日志数据或者是时序数据, 以追加写为主要特点, 数据产生后就不会发生太多变化。
建议:排序列使用shortkey index, 可快速过滤数据. 用户可以考虑将过滤条件中频繁使用的维度列的定义放置其他列的定义之前,这样能够提升查询速度
注意:明细模型中, 可以指定部分的维度列为排序键; 而聚合模型和更新模型中, 排序键只能是全体维度列。

聚合模型

采用聚合模型来分析的场景具有如下特点:
 业务方进行的查询为汇总类查询,比如sum、count、max等类型的查询;
 不需要召回原始的明细数据;
 老数据不会被频繁更新,只会追加新数据。

聚合表中数据会分批次多次导入,每次导入会形成一个版本。相同排序键的数据行聚合有三种触发方式:
 数据导入时,数据落盘前的聚合;
 数据落盘后,后台的多版本异步聚合;
 数据查询时,多版本多路归并聚合。

注意:数据查询时,指标列采用先聚合后过滤的方式,把没必有做指标的列存储为维度列。

更新模型

适合更新模型的场景特点:
已经写入的数据有大量的更新需求;
需要进行实时数据分析。
注意:
1、导入数据时需要将所有字段补全才能够完成更新操作。
2、对于更新模型的数据读取,需要在查询时完成多版本合并,当版本过多时会导致查询性能降低。所以在向更新模型导入数据时,应该适当降低导入频率,从而提升查询性能。
3、将经常过滤字段且不会被修改的字段放在主键上, 能够在合并之前就将数据过滤掉,从而提升查询性能。
4、避免放置过多的主键字段,以免降低查询性能。如果某个字段只是偶尔会作为查询中的过滤条件存在,不需要放在主键中。

主键模型

相较更新模型,主键模型(Primary Key)可以更好地支持实时/频繁更新的功能。该类型的表要求有唯一的主键,支持对表中的行按主键进行更新和删除操作。
由于存储引擎会为主键建立索引,而在导入数据时会把主键索引加载在内存中,所以主键模型对内存的要求比较高,还不适合主键特别多的场景。目前primary主键存储在内存中,为防止滥用造成内存占满,限制主键字段长度全部加起来编码后不能超过127字节。目前比较适合的两个场景是:
1、数据有冷热特征,即最近几天的热数据才经常被修改,老的冷数据很少被修改。典型的例子如MySQL订单表实时同步到StarRocks中提供分析查询。其中,数据按天分区,对订单的修改集中在最近几天新创建的订单,老的订单完成后就不再更新,因此导入时其主键索引就不会加载,也就不会占用内存,内存中仅会加载最近几天的索引。
2、大宽表(数百到数千列)。主键只占整个数据的很小一部分,其内存开销比较低。比如用户状态/画像表,虽然列非常多,但总的用户数不大(千万-亿级别),主键索引内存占用相对可控。
注意:
主键列仅支持类型: boolean, tinyint, smallint, int, bigint, largeint, string/varchar, date, datetime, 不允许NULL。
分区列(partition)、分桶列(bucket)必须在主键列中。
1、和更新模型不同,主键模型允许为非主键列创建bitmap等索引,注意需要建表时指定。
2、由于其列值可能会更新,主键模型目前还不支持rollup index和物化视图。暂不支持使用ALTER TABLE修改列类型。
3、在设计表时应尽量减少主键的列数和大小以节约内存,建议使用int/bigint等占用空间少的类型。暂时不建议使用varchar。建议提前根据表的行数和主键列类型来预估内存使用量,避免出现OOM。内存估算举例:
a. 假设表的主键为: dt date (4byte), id bigint(8byte) = 12byte
b. 假设热数据有1000W行, 存储3副本
c. 则内存占用: (12 + 9(每行固定开销) ) * 1000W * 3 * 1.5(hash表平均额外开销) = 945M
4、目前主键模型只支持整行更新,还不支持部分列更新。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 热题 100 | 堆(三)

目录 1 队列 - v2.0 2 295. 数据流的中位数 2.1 解题思路 2.2 举例说明 2.3 维持队列 2.4 求中位数 2.5 完整代码 菜鸟做题&#xff0c;语言是 C 1 队列 - v2.0 排序规则果然和名字是反过来的&#xff1a; // 大根堆 priority_queue<int, vector<int>…

干货 | 2024 年 Elasticsearch 常见面试题集锦

当涉及到 Elasticsearch 开发者的面试时&#xff0c;问题通常会更专注于软件开发生命周期内与 Elasticsearch 集成的具体技术细节和实际应用场景。 以下是一些Elasticsearch开发相关的面试题目&#xff0c;题目来自死磕 Elasticsearch 知识星球。 1、Elasticsearch数据建模相关…

【MySQL系列】Public Key Retrieval is not allowed

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

人事管理系统设计与实现|jsp+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW调试部署环境&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java…

【科学计算与数学建模】logistic回归预测二分类

任务描述相关知识 数据集以及任务介绍 任务数据集数据属性信息提供的特征属性格式提交的数据格式实现方法—Logistic Regression 加载数据数据标准化逻辑回归模型验证集的使用&#xff08;Validation set&#xff09;训练过程画图函数测试数据的使用预测二分类编程要求测试说明…

ConcurrentHashMap源码分析

文章目录 ConcurrentHashMap源码分析jdk1.7版本重要成员变量put方法源码分析 jdk1.8版本重要成员变量put方法源码分析 ConcurrentHashMap源码分析 在集合类中HashMap是比较常用的集合对象&#xff0c;但是HashMap是线程不安全的。为了保证数据的安全性我们可以使用Hashtable&a…

【LLM】LongRoPE:LLM上下文窗口扩展方法及非官方实现

前言 目前&#xff0c;大多数LLMs的上下文窗口限制在4k个标记左右&#xff0c;这意味着模型在处理超过这个长度的文本时性能会下降。这种限制对于需要大量上下文信息的场景&#xff0c;虽然可以通过在更长的文本上进行微调来将预训练LLM的上下文窗口扩展上下文窗口&#xff0c…

【鸿蒙系统】 ---OpenHarmony加快本地编译(二)

&#x1f48c; 所属专栏&#xff1a;【鸿蒙系统】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢…

SpringBoot3集成PostgreSQL

标签&#xff1a;PostgreSQL.Druid.Mybatis.Plus&#xff1b; 一、简介 PostgreSQL是一个功能强大的开源数据库系统&#xff0c;具有可靠性、稳定性、数据一致性等特点&#xff0c;且可以运行在所有主流操作系统上&#xff0c;包括Linux、Unix、Windows等。 通过官方文档可以…

MySQL:表的操作

文章目录 创建表查看表结构修改表删除表 前面对于库的操作有了认识后&#xff0c;下面进行表的操作 创建表 以下图为例 创建表其实和定义结构体有点类似&#xff0c;总的来说就是先定义列名&#xff0c;然后后面跟着是列的数据类型&#xff0c;之后在定义结束后可以带上对应的…

校园圈子系统--自带校园跑腿功能,校园交友,校园陪玩,校园交友墙,地图找伴,二手市场等功能。源码交付,支持二开!APP小程序H5等移动端都有。

一、需求分析 在搭建校园论坛平台之前&#xff0c;我们需要进行详细的需求分析。这包括以下几个方面&#xff1a; 1.用户需求 我们需要了解目标用户群体的需求和喜好&#xff0c;包括学生的年龄层次、兴趣爱好、关注话题等。通过调查问卷、访谈等方式收集用户需求&#xff0c;为…

数学算法(算法竞赛、蓝桥杯)--最大公约数,欧几里得算法

1、B站视频链接&#xff1a;G05 最大公约数 欧几里得算法_哔哩哔哩_bilibili 题目链接&#xff1a;[NOIP2001 普及组] 最大公约数和最小公倍数问题 - 洛谷 #include <bits/stdc.h> using namespace std; typedef long long LL; LL x,y,ans;LL gcd(LL a,LL b){return b0?…

包叔推荐12代i3-独显组装电脑主机配置清单

去年Intel第十代i5-依然是主流热选机型。 今年&#xff0c;随着i3-的价格优势越来越大&#xff0c;已经成功取代了i5-。 今天包叔推荐几套12代i3-独立显卡组装电脑主机配置。 列表&#xff1a;一组核心显示配置&#xff0c;其余三组均为独立显示配置。 适合主机预算在2000元至3…

JDK下载配置

一、JDK的作用 Java开发环境&#xff1a;JDK提供了完整的Java开发环境&#xff0c;包含编译器&#xff08;javac&#xff09;、解释器&#xff08;java&#xff09;、打包工具&#xff08;jar&#xff09;、文档生成工具&#xff08;javadoc&#xff09;等一系列工具&#xff0…

【高并发服务器 01】—— 基础知识回顾

接下来四周时间&#xff0c;我将会做一个高并发服务器相关的项目。 前置知识&#xff1a;操作系统系统编程、网络编程、基础的数据结构、C语言。 开发环境&#xff1a;VMware虚拟机&#xff1a;Ubuntu 20.04.6 LTS、vscode 今天先回顾一些基础知识。 1.文件与IO 标准IO&#…

软件测试教程 性能测试概论

文章目录 1. 性能测试实施的流程1.1 常见的性能问题1.2 性能测试是什么&#xff1f;1.3 性能测试和功能测试之间的区别1.4 什么样的系统/软件表现属于性能好&#xff0c;什么样的软件性能表现属于性能不好1.5 为什么要进行性能测试1.6 性能测试实施的流程1.7 常见的性能指标以及…

Python虚拟环境conda的安装使用

文章目录 conda虚拟环境的详细步骤和注意事项&#xff1a;**安装Conda****创建Conda虚拟环境****激活Conda虚拟环境****安装Python包****管理Conda环境****其他优势与特性** 相较于venv&#xff0c;使用conda管理虚拟环境有以下优势&#xff1a;**性能****资源占用****其他性能…

【jvm】jinfo使用

jinfo介绍 jinfo 是一个命令行工具&#xff0c;用于查看和修改 Java 虚拟机&#xff08;JVM&#xff09;的配置参数。它通常用于调试和性能调优。 使用 jinfo 命令&#xff0c;你可以查看当前 JVM 的配置参数&#xff0c;包括堆大小、线程数、垃圾回收器类型等。此外&#xf…

立体统计图表绘制方法(分离式环图)

立体统计图表绘制方法&#xff08;分离式环形图&#xff09; 记得我学统计学的时候&#xff0c;那些统计图表大都是平面的框框图&#xff0c;很呆板&#xff0c;就只是表现出统计的意义就好了。在网络科技发展进步的当下&#xff0c;原来一些传统的统计图表都有了进一步的创新。…

unity 多屏幕操作

想了解基础操作请移步&#xff1a;&#xff08;重点是大佬写的好&#xff0c;这里就不再赘述&#xff09; Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas&#xff0c;来达到切换多屏幕的操作&#xff0c; …