第2.5章:StarRocks表设计--Colocation Join

目录

一、StarRocks数据划分

1.1 分区

1.2 分桶

二、Colocation Join实现原理

2.1 Colocate Join概述

2.2 Colocate Join实现原理

三、应用案例

注:本篇文章阐述的是StarRocks-3.2版本的Colocation Join

官网文章地址:

Colocate Join | StarRocks

一、StarRocks数据划分

     在介绍Colocation Join之前,再回顾下StarRocks的数据划分及tablet多副本机制。StarRocks的数据表按照分区分桶规则,切分成若干个数据分片(tablet)存储在不同的be节点上,每个tablet都有多个副本(默认是3副本)。

     在 StarRocks 存储引擎中,用户数据被水平划分为若干个数据分片(Tablet,也称作数据分桶 Bucket)。每个 Tablet 包含若干数据行。各个 Tablet 之间的数据没有交集,并且在物理上是独立存储的。

     一个 Tablet 只属于一个数据分区(Partition)。而一个 Partition 包含若干个 Tablet。因为 Tablet 在物理上是独立存储的,所以可以视为 Partition 在物理上也是独立的。Tablet 是数据移动、复制等操作的最小物理存储单元。

     若干个 Partition组成一个Table。Partition 可以视为是逻辑上最小的管理单元。数据的导入与删除,仅能针对一个Partition 进行。

   下图说明 Table、Partition、Bucket(Tablet) 的关系:

  • Table 按照 Range 的方式按照 date 字段进行分区,得到了 N 个 Partition

  • 每个 Partition 通过相同的 Hash 方式将其中的数据划分为 M 个 Bucket(Tablet)

  • 从逻辑上来说,Bucket 1 可以包含 N 个 Partition 中划分得到的数据,比如下图中的 Tablet 11、Tablet 21、Tablet N1

1.1 分区

    逻辑概念,分区用于将数据划分成不同的区间,主要作用是将一张表按照分区键拆分成不同的管理单元。

1.2 分桶

    物理概念,StarRocks一般采用Hash算法作为分桶算法。在同一分区内,分桶键哈希值相同的数据会划分到同一个tablet(数据分片),tablet以多副本冗余的形式存储,是数据均衡和恢复的最⼩单位,数据导入和查询最终都下沉到所涉及的 tablet副本上。

二、Colocation Join实现原理

2.1 Colocate Join概述

      在数据分布满足一定条件的前提下,计算节点只需做本地 Join,减少跨节点的数据移动和网络传输开销,提高查询性能。Colocate Join 十分适合几张大表按照相同字段分桶的场景,这样可以将数据预先存储到相同的分桶中,实现本地计算。

    要理解这个算法,需要先了解以下几个概念:

  •  Colocation Group(CG):同一 CG 内的表需遵循相同的 Colocation Group Schema(CGS),即表对应的分桶副本具有一致的分桶键、副本数量和副本放置方式。如此可以保证同一 CG 内,所有表的数据分布在相同一组 BE 节点上。
  • Colocation Group Schema(CGS):用于描述一个 CG 中的Table,和Colocation相关的通用 Schema 信息。包括分桶列类型,分桶数以及副本数等。
  • 分桶编号Bucket Seq:一个表的数据,根据分桶列 Hash、对桶数取模后落在某一个分桶内。假设一个 Table 的分桶数为 8,则共有 [0, 1, 2, 3, 4, 5, 6, 7] 8 个分桶(Bucket)。因此【分桶列 Hash %桶数 】一致的数据会划分到同一个桶中。

2.2 Colocate Join实现原理

     Colocation Join 功能,是将一组拥有相同CGS 的 Table 组成一个 CG。并保证这些 Table 对应的数据分片会落在同一个 BE 节点上。使得当 CG 内的表进行分桶列上的 Join 操作时,可以通过直接进行本地数据 Join,减少数据在节点之间的传输耗时。

  因此核心问题直接转变成【如果保证这些table对应的数据分片会落在同一个be节点上?】

  同一 CG 内的Table必须保证以下属性:

 (1)分桶列和分桶数

   同一 CG内表的分桶键的类型、数量和顺序完全一致,并且桶数一致,从而保证多张表的数据分片能够一一对应地进行分布控制。

   分桶列,即在建表语句中distributed by hash(col1, col2, ...) 中指定的列。分桶列决定了一张表的数据通过哪些列的值进行Hash划分到不同的Tablet 中。同一 CG内的 Table 必须保证分桶列的类型和数量完全一致,并且桶数一致,才能保证多张表的数据分片能够一一对应的进行分布控制。

(2)副本数

  同一个 CG内所有表的所有分区(Partition)的副本数必须一致。如果不一致,可能出现某一个 Tablet 的某一个副本,在同一个 BE 上没有其他的表分片的副本对应。不过,同一个 CG 内的表,分区的个数、范围以及分区列的类型不要求一致。

   ps:同一个 CG 内所有表的分区键,分区数量可以不同。因为Partition只是一个逻辑上的分区,真正影响数据分布在哪一个BE节点的是由Bucket决定的。

    综上,在固定了分桶列和分桶数后,同一个CG内的表会拥有相同的Buckets Seq。而副本数决定了每个分桶内的 Tablet 的多个副本分别存放在哪些 BE 上。假设Buckets Seq为 [0, 1, 2, 3, 4, 5, 6, 7],BE 节点有 [A, B, C, D] 4个。则一个可能的数据分布如下:

    CG 内表的一致的数据分布定义和tablet副本映射,能够保证分桶列值相同的数据都在同一个 BE 节点上,可以进行本地数据 Join。其核心思想是「两次映射」,保证相同的 Distributed Key 的数据会被映射到相同的 Bucket Seq,再保证 Bucket Seq对应的 Bucket 映射到相同的 BE 节点:

三、应用案例

    Colocation Join的使用案例见官网:

Colocate Join | StarRocks本小节介绍如何使用 Colocate Join。icon-default.png?t=N7T8https://docs.starrocks.io/zh/docs/3.1/using_starrocks/Colocate_join/

参考文章:

Apache Doris的Colocation join本地join实现_colocation 怎么做-CSDN博客

Apache Doris的Colocation join本地join实现_colocation 怎么做-CSDN博客

系统架构 | StarRocks

第2.9章:StarRocks表设计--Colocation Join_show colocation_group-CSDN博客

Colocate Join | StarRocks

Apache Doris Join 优化原理介绍 - 掘金

编程小梦|Apache Doris Colocate Join 原理与实践

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

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

相关文章

css知识:盒模型盒子塌陷BFC

1. css盒模型 标准盒子模型,content-box 设置宽度即content的宽度 width content 总宽度content(width设定值) padding border IE/怪异盒子模型,border-box width content border padding 总宽度 width设定值 2. 如何…

互联网加竞赛 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据疫…

oppo手机如何录屏?解锁录屏新功能!

“最近换了一款oppo手机,感觉它的拍照功能真的很强大。但除此之外,我发现oppo还有许多隐藏功能,比如录屏。但我尝试了很久,都没找到录屏的开关在哪里。有没有哪位oppo用户知道怎么打开这个功能呢?” 随着科技的不断发…

Nexus 仓库

一、仓库介绍 1.仓库类型 proxy:是远程仓库的代理。比如说在nexus中配置了一个central repository的proxy,当用户向这个proxy请求一个artifact,这个proxy就会先在本地查找,如果找不到的话,就会从远程仓库下载&#x…

小迪安全29WEB 攻防-通用漏洞SQL 注入增删改查盲注延时布尔报错

#知识点: 1、明确查询方式注入 Payload 2、明确查询方式注入产生功能 3、明确 SQL 盲注延时&布尔&报错 #详细点: 盲注就是在注入过程中,获取的数据不能回显至前端页面。 也就是在代码中无echo将sql结果输出出来 此时&#…

详解 IT/OT 融合的五层架构(从PLC/SCADA到MES/ERP)

作为一个电气自动化的从业者,有必要搞懂下面术语的意思。 IT:Information Technology的缩写,指信息技术; OT:Operational Technology的缩写,指操作层面的技术,比如运营技术;CT&…

⭐北邮复试刷题LCR 037. 行星碰撞__栈 (力扣119经典题变种挑战)

LCR 037. 行星碰撞 给定一个整数数组 asteroids,表示在同一行的小行星。 对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相…

VirtualPainting:新一代多传感器融合方案,大幅提升3D目标检测性能

论文标题:VirtualPainting: Addressing Sparsity with Virtual Points and Distance-Aware Data Augmentation for 3D Object Detection 论文作者:Sudip Dhakal, Dominic Carrillo, Deyuan Qu, Michael Nutt, Qing Yang, Song Fu 导读: 本文…

后端程序员入门react笔记——react的diff算法(三)

diffing算法 虚拟dom 我们知道,react里面操作的都是虚拟dom,最后经过render渲染为真正的dom,那么为什么要提出虚拟dom这个概念呢?其实就是将逻辑和视图区分开,react的虚拟dom,就相当于mvc的c,…

【自然语言处理】:实验5,司法阅读理解

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主 有任何疑问或者问题,也欢…

激光条纹中心线提取算法FPGA实现方案

1 概述 激光条纹中心线提取是3D线激光测量领域一个较为基础且重要的算法。目前,激光条纹中心线提取已有多种成熟的算法,有很多相关的博客和论文。 激光条纹中心线提取的真实意义在于工程化和产品化的实际应用,而很多算法目前只能用于学术研究…

五、分类算法 总结

代码: from sklearn.datasets import load_iris, fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.naive_bayes import MultinomialNB from s…

括号匹配(终极版)(典型栈的运用的题目,值得一看)

括号匹配时运用栈的一个典型例子,它是充分利用了栈先进后出的特性,在这之前,我们先来看一个简单的题目 括号匹配1 Description 输入一串带括号的表达式,判断输入的表达式是否合理。即判断括号是否匹配。为了简化题目&#xff0…

代码随想录KamaCoder46. 携带研究材料(第六期模拟笔试)

题目&#xff1a; 代码(首刷看解析 2024年2月22日&#xff09;&#xff1a; #include<vector> #include<iostream> using namespace std; int Pacakge(vector<int>& a,vector<int>& weights, vector<int>& values) {int M a[0];//…

ElasticSearch语法

Elasticsearch 概念 入门学习: Index索引>MySQL 里的表(table)建表、增删改查(查询需要花费的学习时间最多)用客户端去调用 ElasticSearch(3 种)语法:SQL、代码的方法(4 种语法) ES 相比于 MySQL&#xff0c;能够自动帮我们做分词&#xff0c;能够非常高效、灵活地查询内…

【快速上手QT】04-定时器Timer

先来个小示例 我们先简单的来触发一下定时器。 #include "Zhetu.h"#include <qdebug.h>void Zhetu::timerEvent(QTimerEvent* event) { //定时器触发函数qDebug() << "Hello world"; }Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){t…

C#,数值计算,矩阵的乔莱斯基分解(Cholesky decomposition)算法与源代码

一、安德烈路易斯乔尔斯基 安德烈路易斯乔尔斯基出生于法国波尔多以北的查伦特斯海域的蒙古扬。他在波尔多参加了Lyce e&#xff0c;并于1892年11月14日获得学士学位的第一部分&#xff0c;于1893年7月24日获得第二部分。1895年10月15日&#xff0c;乔尔斯基进入莱科尔理工学院…

PhotoSweeper X mac版 v4.8.5 相似重复照片清理工具 兼容 M1/M2

PhotoSweeper X for Mac是一款Mac重复照片/相似照片清理工具&#xff01;PhotoSweeper可以帮你进行&#xff1a;重复相似照片/数码相片查找、对比和删除&#xff0c;轻松清理Mac上的重复图片&#xff0c;非常实用。 应用介绍 PhotoSweeper X for Mac是一款Mac重复照片/相似照片…

实战打靶集锦-025-HackInOS

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查5. 提权5.1 枚举系统信息5.2 探索一下passwd5.3 枚举可执行文件5.4 查看capabilities位5.5 目录探索5.6 枚举定时任务5.7 Linpeas提权 靶机地址&#xff1a;https://download.vulnhub.com/hackinos/HackInOS.ova 1. 主机…