it编程 > 游戏开发 > ar

StarRocks数据库查询加速及Colocation Join工作原理

1人参与 2025-03-10 ar

注:本篇文章阐述的是starrocks-3.2版本的colocation join

官网文章地址:

colocate join | starrocks

一、starrocks数据划分

    在介绍colocation join之前,再回顾下starrocks的数据划分及tablet多副本机制。

   starrocks支持两层的数据划分,第一层是range  partition,第二层是hash  bucket(tablet)。starrocks的数据表按照分区分桶规则,被水平切分成若干个数据分片(tablet,也称作数据分桶 bucket)存储在不同的be节点上,每个tablet都有多个副本(默认是3副本)。各个 tablet 之间的数据没有交集,并且在物理上是独立存储的。tablet 是数据移动、复制等操作的最小物理存储单元。 一个 tablet 只属于一个数据分区(partition),而一个 partition 包含若干个 tablet。

   下图说明 table、partition、bucket(tablet) 的关系:

1.1 分区

    逻辑概念,分区用于将数据划分成不同的区间,主要作用是将一张表按照分区键拆分成不同的管理单元。查询时,通过分区裁剪,可以减少扫描的数据量,显著优化查询性能。

1.2 分桶

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

二、colocation join实现原理

2.1 colocate join概述

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

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

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。

https://docs.starrocks.io/zh/docs/3.1/using_starrocks/colocate_join/

参考文章:

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 原理与实践

到此这篇关于starrocks数据库查询加速及colocation join工作原理的文章就介绍到这了,更多相关starrocks查询加速内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

StarRocks索引详解(最新整理)

03-10

StarRocks数据库详解(什么是StarRocks)

03-10

华为鸿蒙 HarmonyOS 5.0.3 Beta2 版本发布:附更新日志

03-10

在CentOS上解压JAR包的完整指南

03-09

高性能分析数据库StarRocks的安装与使用详解

03-07

StarRocks简介与搭建使用详解

03-07

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论