第2.1章 StarRocks表设计——概述

注:本篇文章阐述的是StarRocks-3.2版本的表设计相关内容。

    建表是使用StarRocks非常重要的一环,规范化的表设计在某些场景下能使查询性能有数倍的提升。StarRocks的表设计涉及到的知识点主要包括数据表类型、数据分布(分区分桶及排序键)、索引以及视图、物化视图等。

一、数据表类型

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

1.1 Duplicate Key Model

  明细模型是StarRocks中最常用的数据模型,适用于既没有聚合需求,又没有主键唯一性约束的原始数据的存储。在该模型下,即便导入两条完全相同的数据,StarRocks也会将数据原封不动的保存进表。

1.2 Aggregate Key Model

    聚合模型会在数据导入时将维度列相同的数据,根据指标列设定的聚合函数进行聚合,最终表格中只会保留聚合后的数据。

1.3 Unique Key Model

    更新模型的特点是只保留相同主键下最新导入的数据。在更新模型中,排序键构成表的唯一性约束,成为我们常说的“主键”。(明细模型会将所有写入的数据保留,聚合模型是对写入的数据进行聚合处理

1.4 Primary Key Model

    主键模型建表时支持定义主键和指标列,查询时返回主键相同的一组数据中的最新数据。主键模型和更新模型的区别在于:更新模型的实现方式是读时合并(merge on read),简称Mor 。Primary 模型实现方式是写时合并(merge on write),简称Mow。聚合模型和更新模型都不支持update功能,主键模型通过Delete+Insert 的策略,实现update功能

   ps:数据表(数据模型)的详细内容见文章: 

第2.2章 StarRocks表设计——排序键和数据模型-CSDN博客文章浏览阅读1.3k次,点赞28次,收藏24次。2.2 StarRocks表设计——排序键和数据模型https://blog.csdn.net/SHWAITME/article/details/136136900?spm=1001.2014.3001.5501

二、数据分布

    StarRocks 采用分区+分桶的两级数据分布策略,将数据均匀分布各个 BE 节点。查询时能够有效裁剪数据扫描量,最大限度地利用集群的并发性能,从而提升查询性能。

2.1 分区

    逻辑概念,表中数据可以根据分区列(通常是时间和日期)分成一个个更小的数据管理单元。查询时,通过分区裁剪,可以减少扫描的数据量,显著优化查询性能。

2.2 分桶

   物理概念,同一个分区中的数据通过分桶,划分成更小的数据管理单元。并且分桶以多副本形式(默认为3)均匀分布在 BE 节点上,保证数据的高可用。

  一个分区按分桶方式被分成了多个桶 bucket,每个桶的数据称之为一个Tablet。StarRocks一般采用Hash算法作为分桶算法,即在同一分区内,分桶键哈希值相同的数据会划分到同一个Tablet(数据分片),Tablet 以多副本冗余的形式存储,是数据均衡和恢复的最⼩单位,数据导入和查询最终都下沉到所涉及的 Tablet 副本上。ps:建表时,如果使用哈希分桶,则必须指定分桶键。

   ps:分区分桶及副本的详细内容见文章(文章是StarRocks-2.5.4): 

第2.4章 StarRocks表设计——分区分桶与副本数_starrocks分区管理-CSDN博客文章浏览阅读1.1k次,点赞31次,收藏22次。2.4 StarRocks表设计——分区分桶与副本数_starrocks分区管理https://blog.csdn.net/SHWAITME/article/details/136140126

 

三、数据类型

      除了基本的数据类型,如数值、日期和字符串类型,StarRocks 还支持复杂的半结构化数据类型,包括 ARRAY、JSON、MAP、STRUCT。官网文章地址:
数据类型概述 | StarRocksStarRocks 支持以下数据类型:数值类型、字符串类型、日期类型、半结构化类型、其他类型。您在建表时可以指定以下类型的列,向表中导入该类型的数据并查询数据。icon-default.png?t=N7T8https://docs.starrocks.io/zh/docs/sql-reference/sql-statements/data-types/data-type-list/

四、存储设计

4.1 列式存储

   在StarRocks中,一张表的列可以分为维度列(也称为 Key 列)和指标列(也称为 Value 列)维度列用于分组和排序,指标列的值可以通过聚合函数sum,count,min,max,bitmap_union等累加起来。

   在StarRocks中,表数据按列存储。物理上,一列数据会经过分块编码(data page,默认是64kb)、压缩等操作,然后持久化存储到非易失设备上。但在逻辑上,一列数据可以看成是由相同类型的元素构成的一个数组。 一行数据的所有列值在各自的数组中按照列顺序排列,即拥有相同的数组下标。表中所有的行按照维度列,做多重排序,排序后的位置就是该行的行号。

4.2 索引

   索引是一种特殊的数据结构,相当于数据的目录。查询条件命中索引列时,StarRocks 能够快速定位到满足条件的数据的位置。

    StarRocks 提供内置索引,包括前缀索引、Ordinal 索引和 ZoneMap 索引。也支持用户手动创建索引,以提高查询效率,包括 Bitmap 和 Bloom Filter 索引。

 4.2.1 前缀索引

    由于StarRocks 底层数据是按照排序键排序后存储的,而前缀索引,是在key (duplicate key、aggregate key、unique key、primary key)排序的基础上,实现的一种根据给定一定数量(不超过3列,不超过36个字节,遇到字符串会自动截断)前缀列,每间隔一定行数(1024),生成的一个索引项 (稀疏索引)。当查询的过滤条件命中前缀索引时,就能快速定位到数据存储所在的比较精确地址。

 4.2.2 Ordinal 索引

   Ordinal lndex索引提供了通过行号来查找Column Data Page数据页的物理地址,Ordinal lndex索引能够将按照列存储的数据按行对齐,可以理解为一级索引。因此,其他类型的索引在查找数据的时候,都要借助Ordinal lndex(一级索引)查找 Data Page数据页物理地址。

    在一个segment文件中,数据始终按照key排序存储,数据写入的过程中,每一列的data page会由Ordinal Index管理,他会记录每一列对应的data page的offset,size大小,和该data page的第一个数据的行号信息。这样在查询的时候,就能通过 Ordinal lndex索引够快速定位到对应的data page的物理地址。

 4.2.3 ZoneMap 索引

   StarRocks 会为Segment文件中的一列数据(key 列)自动添加ZoneMap索引,注意:当表的模型为dupulcate时,会所有字段开启zonemap索引。

   ZoneMap索引存储了Segment和每个列对应每个Page的统计信息。Doris可以根据这些统计信息,快速判断这些数据块是否可以过滤掉,从而减少扫描数据量,提升查询速度。统计信息包括了Min最大值、Max最小值、HashNull空值、HasNotNull不全为空的信息。

 4.2.4 BitMap 索引

    StarRocks 支持对低基数列创建Bitmap位图索引来加速数据查询。高基数列:例如UserID,低基数列:例如性别,婚姻状态等。

     Bitmap位图索引创建时需要通过  create index 进行创建。Bitmap的索引是整个Segment中的Column字段的索引,而不是为每个Page单独生成一份。在写入数据时,会维护一个map结构,去记录下每个key值对应的行号,并采用Roaring位图对rowid进行编码。生成索引数据时,首先写入字典数据,即将map结构的key值写入到DictColumn中。然后,key对应Roaring编码的rowid(value值)以字节方式将数据写入到BitMapColumn。   

 4.2.5 BloomFilter 索引

   StarRocks 支持用户对适用于高基数列(取值区分度比较大的字段)添加Bloom Filter(布隆过滤器)索引,Bloom filter索引主要用于快速判断某列中是否存在某个值。BloomFilter判定该列中不存在指定的值,如果确定不存在,就不会读取这个数据文件;如果索引判定该列中存在指定的值,也有可能这个值实际上不会存在,这时,会读取数据文件来进一步确认。

  ps:高基数列:例如UserID,低基数列:例如性别,婚姻状态等。

 ps:这几类索引的详细内容见文章:

Doris存储层设计介绍1——存储结构设计解析(索引底层结构)-CSDN博客文章浏览阅读1.1k次,点赞33次,收藏19次。Doris存储层设计介绍1——存储结构设计解析(索引底层结构)https://blog.csdn.net/SHWAITME/article/details/136155008?spm=1001.2014.3001.5501

五、物化视图

 该补充

参考文章:

表概览 | StarRocks

理解 StarRocks 表设计 | StarRocks

理解 StarRocks 表设计 | StarRocks

第2.1章:StarRocks表设计--概述_starrocks array-CSDN博客

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

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

相关文章

Jmeter基础(1) Mac下载安装启动

目录 Jmeter下载安装启动下载启动 Jmeter下载安装启动 注意⚠️:使用jmeter需要有java环境 下载 官网下载地址:https://jmeter.apache.org/ 会看到这里有两个版本,那么有什么区别么? Binaries是可执行版,直接下载解…

Python算法题集_图论(课程表)

Python算法题集_课程表 题207:课程表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【循环递归全算】2) 改进版一【循环递归缓存】3) 改进版二【循环递归缓存反向计算】4) 改进版三【迭代剥离计数器检测】 4. 最优算法5. 相关资源 本…

代码随想录算法训练营第二十三天补|669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树

平衡树、二叉树、灵活应用中序遍历(值大小有序) 669. 修剪二叉搜索树 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中…

Window部署SkyWalking

SkyWalking mysql的驱动依赖 选择下载版本 v9.4 现在后解压缩目录结构 一、修改config目录文件 application.yml 修改1: selector: ${SW_STORAGE:h2} 修改后: selector: ${SW_STORAGE:mysql} 修改2:使用mysql数据库 mysql: properti…

通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解 先从浏览器出发, 浏览器是由浏览器内核和JS引擎组成;浏览器内核编译解析html代码和css代码,js引擎编译解析JavaScript代码;所以从本质上,浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…

Centos7配置静态IP详细步骤

使用Centos虚拟机测试时一到切换网段就头疼,总是会有ping不通网关、同段IP和外网的情况。下面出一个尽可能完整的排查思路和配置静态IP的过程。以下为配置nat模式后,出现以上情况的网络不通的排查思路,并配置win10vm8静态IP和centos7虚机nat模…

SQL字符集

目标:了解字符集的概念,掌握MySQL数据库存储数据的字符集逻辑以及设置方式 字符集概念 MySQL字符集关系 解决乱码问题 字符集设置原理 1、字符集概念 目标:了解字符集概念,掌握字符集存储和读取的实现原理 概念 字符集:charset或者character set&am…

(十二)【Jmeter】线程(Threads(Users))之setUp 线程组

简述 操作路径如下: 作用:在正式测试开始前执行预加载或预热操作,为测试做准备。配置:设置预加载或预热操作的采样器、循环次数等参数。使用场景:确保在正式测试开始前应用程序已经达到稳定状态,减少测试结果的偏差。优点:提供预加载或预热操作,确保测试的准确性。缺…

2024幻兽帕鲁游戏服务器租用价格表_一年和1个月报价明细

游戏服务器租用多少钱一年?1个月游戏服务器费用多少?阿里云4核16G10M游戏服务器26元1个月、149元半年,腾讯云4核16G游戏服务器32元、312元一年,华为云26元,京东云主机也是26元起,游戏服务器配置从4核16G、4…

代码随想录算法刷题训练营day22

代码随想录算法刷题训练营day22:LeetCode(236)二叉树的最近公共祖先、LeetCode(235) 二叉搜索树的最近公共祖先、LeetCode(701)二叉搜索树中的插入操作、LeetCode(450)删除二叉搜索树中的节点 LeetCode(236)二叉树的最近公共祖先 题目 代码 /*** Definition for…

【鸿蒙 HarmonyOS 4.0】路由router

一、介绍 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。 二、页面跳转 2.1、两种跳转模式: router.pushUrl()&…

安卓游戏开发之音频技术优劣分析

一、引言 在安卓游戏开发中,音频处理技术扮演着至关重要的角色,它不仅能够增强游戏的沉浸感和玩家体验,还能通过声音效果传达关键的游戏信息。以下将对几种常见的安卓游戏音频处理技术进行优劣分析,并结合应用场景来阐述其特点。 …

微服务-微服务API网关Spring-clould-gateway实战

1. 需求背景 在微服务架构中,通常一个系统会被拆分为多个微服务,面对这么多微服务客户端应该如何去调用呢? 如果根据每个微服务的地址发起调用,存在如下问题: 1.客户端多次请求不同的微服务,会增加客户端…

Qt 事件

1. 事件 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件,它继承自QEvent类。 2. 事件和信号 事件与信号并不相同,比如我们使用鼠标点击了一下界面上的按钮,那么就会产生…

node 之 初步认识

思考:为什么JavaScript可以在浏览器中被执行 代执行的js代码——JavaScript解析引擎 不同的浏览器使用不同的JavaScript解析引擎 Chrome 浏览器 》 V8 Firefox浏览器 》OdinMonkey(奥丁猴) Safri浏览器 》JSCore IE浏览器 》Chakra(查克拉) e…

XML的写法

下面我将以如下代码来解释下XML的写法 <?xml version"1.0" encoding"UTF-8" ?> <Steam><steam id"1"><zhanghao>admin</zhanghao><mima>123</mima><num>120</num></steam><st…

金航标电子位于广西柳州鹿寨县天线生产基地于大年正月初九开工了

金航标电子位于广西柳州鹿寨县天线生产基地于大年正月初九开工了&#xff01;&#xff01;&#xff01;金航标kinghelm&#xff08;www.kinghelm.com.cn&#xff09;总部位于中国深圳市&#xff0c;兼顾技术、成本、管理、效率和可持续发展。东莞塘厦实验室全电波暗室、网络分析…

运维SRE-06 阶段性复习软件管理体系

那些年运维必会操作-第一弹 操作 文件&#xff1a;增删改查 增&#xff1a;touch,vim,>,>>,cp删除&#xff1a;rm修改&#xff1a;内容&#xff1a;vi/vim,>,>> 文件名&#xff1a;mv查看&#xff1a;内容&#xff1a;cat/vim/less/more/head/tail/sed/awk/…

Day03-课后练习-参考答案(流程控制_分支结构)(判断年、月、日是否合法,判断打鱼还是晒网,判断星座)

文章目录 巩固题1、从键盘输入一个整数&#xff0c;判断它是否是5的倍数2、从键盘输入一个字符&#xff0c;判断字符类型3、计算折扣后金额4、输出月份对应的英语单词5、计算今天是星期几 简答题拔高题&#xff08;自愿&#xff09;6、判断年、月、日是否合法7、判断打鱼还是晒…

【C++】STL容器之string(迭代器,范围for)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …