第2.1章 StarRocks表设计——概述

news2024/9/20 22:33:11

注:本篇文章阐述的是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.coloradmin.cn/o/1464878.html

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

相关文章

【DDD】学习笔记-发布者—订阅者模式

在领域设计模型中引入了领域事件,并不意味着就采用了领域事件建模范式,此时的领域事件仅仅作为一种架构或设计模式而已,属于领域设计模型的设计要素。在领域设计建模阶段,如何选择和设计领域事件,存在不同的模式&#…

通信入门系列——锁相环、平方环、Costas环

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、锁相环 1、压控振荡…

探索分布式强一致性奥秘:Paxos共识算法的精妙之旅

提到分布式算法,就不得不提 Paxos 算法,在过去几十年里,它基本上是分布式共识的代名词,因为当前一批常用的共识算法都是基于它改进的。比如,Fast Paxos 算法、Cheap Paxos、Raft 算法等。 由莱斯利兰伯特(L…

AI Agent深入浅出——以ERNIE SDK和多工具智能编排为例

在过去一年里,通用大语言模型(LLM)的飞速发展引起了全球的关注。百度等科技巨头推出了各自的大模型,不断提高语言模型性能的上限。然而,业界对LLM所设定的目标不再局限于基本的问答功能,而是寻求利用大模型…

mysql入门到精通007-基础篇-事务

1、事务简介 事务是一组操作的集合,它是一个不可分割的事物单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 2、操作演示 开始张三和李四账户表中都是2000元&#xf…

发布订阅模式:观察者模式的一种变体

发布-订阅模型(Publish-Subscribe Model)的底层机制通常基于观察者模式。 发布-订阅模型是观察者模式的一种变体。 在观察者模式中,主题(或被观察者)维护了一组观察者,当主题的状态发生变化时&#xff0c…

uni-app 人脸识别 App端

文章目录 背景介绍开发前准备基础版获取视频流人脸识别版本这时候就可以开心的调试了背景介绍 本文介绍如何制作人脸打卡等类似功能的实现。 使用nvue+live-pusher来实现。在App端这是成本较低的可以控制样式的方案了 实现了两个版本 基础版本:视频流 => 抓拍照片 => 传…

信钰证券午评:沪指震荡微涨,券商、银行板块拉升,Sora概念再爆发

23日早盘,沪指盘中强势拉升,一度克复3000点大关,随后震荡回落;深成指、创业板指、科创50指数等均走低;北向资金大幅流出。 截至午间收盘,沪指微涨0.02%报2988.87点,深成指跌0.48%,创…

一、网络基础知识

1、IP地址和端口号 1.1、IP地址 定义:用于在网络中唯一标识设备的地址。格式:通常由四个数字组成,以点分十进制表示,例如:192.168.0.1。(IPv4)作用:允许网络中的设备相互通信,通过IP地址可以定…

navicat导出数据库表结构信息

需求阐述 要求导出某一数据库表中的所有表的结构,汇总成一个word 准备工作 拿到所有表名,在navicat中执行sql语句:show tables;然后点击导出结果,选择excel格式进行导出。 拿到该数据库所有表名后,在navicat中执行如…

vscode【报错】yarn : 无法将“yarn”项识别为 cmdlet

问题 CMD下载完yarn可以查看到yarn版本,但是进入到vscode控制台报错无法识别,报错内容如下: vscode【报错】yarn : 无法将“yarn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径&#xff…

Stable Diffusion 模型的概念、类型、下载、安装、使用

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 我们在《Stable Diffusion WebUI 界面介绍》 时,第一个就讲到了 Stable Diffusion 模型,那么这个模型是什么?该从哪儿下载&…

C++入门学习(三十四)值传递,实参-形参

什么是值传递? 值传递(Pass by Value)是一种参数传递方式,当函数或方法被调用时,将实际参数的值复制一份传递给函数或方法中的形式参数。这意味着在函数或方法内部对形式参数的修改不会影响到实际参数的值。因为形式参…

关于数组去重new Set的详细解释

用于保持数组的唯一性 // test1 const arr [1, 1, 2, 3, 4, 3] // 是一个new Set对象 const arr1 new Set(arr) console.log(arr1); // test2 const brr [1, 1, 2, 3, 4, 3] // 现在是数组对象了 const brr1 [...new Set(brr)] console.log(brr1); 总结 使用new Set后获…

vscode突然连不上服务器了,以前都可以的,并且ssh等其它方式是可以连接到服务器的

过完年回来准备开工干活,突然发现vscode连不上服务器了,奇了怪了,年前都可以的,看了一下报错,如下, 以为是服务器挂了,结果执行ssh xxxxxx 发现是可以远程连接的,看来服务器没有问题…

3分钟看懂设计模式01:策略模式

一、什么是策略模式 定义一些列算法类,将每一个算法封装起来,并让它们可以互相替换。 策略模式让算法独立于使用它的客户而变化,是一种对象行为型模式。 以上是策略模式的一般定义,属于是课本内容。 在没有真正理解策略模式之…

Unity3d Shader篇(九)— 世界空间法线纹理映射

文章目录 前言一、什么是世界空间法线纹理映射?1. 世界空间法线纹理映射工作原理2. 什么是世界空间?3. 切线空间法线纹理映射和世界空间法线纹理映射对比世界空间法线纹理映射:优点:缺点: 切线空间法线纹理映射&#x…

专145+总420+哈尔滨工业大学803信号与系统和数字逻辑电路考研经验哈工大电子信息与通信,真题,大纲,参考书。

自从高考失利没有考入哈工大,一直带着遗憾,今年初试专业课803信号与系统和数字逻辑电路145,总分420顺利圆满哈工大,了却了一块心病,回看这一年的复习起起落落,心中的那块初心,让我坚持到了上岸&…

springmvc+ssm+springboot房屋中介服务平台的设计与实现 i174z

本论文拟采用计算机技术设计并开发的房屋中介服务平台,主要是为用户提供服务。使得用户可以在系统上查看房屋出租、房屋出售、房屋求购、房屋求租,管理员对信息进行统一管理,与此同时可以筛选出符合的信息,给笔者提供更符合实际的…

外汇天眼:外汇交易不可不知的8大风险!

现在外汇交易中的风险主要有哪些? 外汇作为一种投资方式肯定有风险,我们要想的是尽量规避风险。 今天就给大家介绍一下现在外汇交易中的风险主要有哪些? 一、高杠杆风险 由于外汇保证金交易采用的杠杆比例,放大了损失的额度&…