关注分享主机优惠活动
国内外VPS云服务器

空间连接原理实践教程

什么是共址联接我们都知道常见的联接类型如下:

内部连接外部连接交叉连接半连接反连接的常见算法实现包括:

嵌套循环连接排序合并连接哈希连接分布式系统中实现连接数据分布的常用策略有:

混洗加入广播加入协同定位/本地加入协同定位/本地加入是指多个节点加入时,没有数据移动和网络传输,每个节点只在本地加入。能够本地连接的前提是同一个连接键的数据分布在同一个节点。

与混洗连接和广播连接相比,为什么协同定位连接具有更高的性能,因为在查询过程中没有数据的网络传输。在Doris的具体实现中,Colocate Join可以拥有比Shuffle Join更高的并发粒度,也可以显著提高Join的性能,后面会有说明。

如何共同定位连接

对于协同定位表,在任何情况下都应该保证数据的局部性。包括:

导入数据时保证数据本地性,查询调度时保证数据本地性,数据平衡后保证数据本地性。实现中最复杂的一点是第三点:处理协同定位表的平衡。

定义术语“共存组”

我们称一组具有相同共置属性的表为Group,下图中t1和t2具有相同的共置组。

协同定位父表

我们把决定一个组的数据分布的表叫做父表,下图中的t1就是同位父表。

协同定位子表

我们把一个组中除了父表以外的表都叫做子表,下图中的t2就是共置子表。

空间连接原理实践教程-主机频道

时段序列

如下所示,如果一个表有n个分区,那么每个分区的第m个桶的桶序列是m。

空间连接原理实践教程-主机频道

1保证数据导入时的局部性Doris分区方式如下:先根据分区字段范围进行分区,再根据指定的分布式Key Hash划分桶:

空间连接原理实践教程-主机频道

所以导入数据时保证本地性的核心思想是两次映射。对于协同定位表,我们确保相同分布式键的数据映射到相同的Bucket Seq,然后确保相同Bucket Seq的Bucket映射到相同的BE。

空间连接原理实践教程-主机频道

具体来说,第一步:我们计算分布式密钥的哈希值,并对bucket num取模,以确保相同分布式密钥的数据映射到相同的Bucket Seq。

空间连接原理实践教程-主机频道

步骤2:将同一协同定位组下同一时段序列的所有时段映射到同一BE,如下所示:

集团内所有表的Bucket Seq和BE节点的映射关系与父表的映射关系一致;父表中所有分区的Bucket Seq和be节点之间的映射关系与第一个分区的映射关系一致;第一个分区与父表一致。在存储桶序列和be节点之间的映射关系由本地循环算法空间连接原理实践教程-主机频道确定

2 Colocate Join查询计划对于HashJoinFragment,由于Join的很多表都有数据局部性保证,所以可以去掉交换节点,避免网络传输,直接将ScanNode设置为Hash Join节点的子节点。

空间连接原理实践教程-主机频道

3协同定位连接查询调度的目标查询调度:协同定位连接中所有ScanNode中具有相同Bucket Seq的所有Bucket被调度到同一个BE。

调度策略:第一个ScanNode的桶随机选择BE,其余scannode与第一个scan node一致。

目前,Doris的散列连接是服务器粒度的:

空间连接原理实践教程-主机频道

关于协同定位连接,由于同一个协同定位组下的同一个Bucket Seq的Bucket分布在同一个BE中,我们将连接的粒度从服务器粒度降低到Bucket Seq粒度:

空间连接原理实践教程-主机频道

5协同定位连接元数据维护对于协同定位连接,我们需要维护以下核心元数据:

空间连接原理实践教程-主机频道

在代码中,协同定位组id是协同定位父表id group2 backendsperbucket seq表示每个协同定位组中的每个存储桶seq映射到哪个BES。为了支持平衡并确保元数据的一致性,这些元数据需要被持久化。

6如何决定一个查询可以同位连接表是同位的同位组是稳定的,没有平衡连接的键在桶中包含分布式键。

托管联合支持平衡的7个核心理念:

添加一个守护线程来处理并置表的平衡,让普通的平衡线程不处理并置表的平衡。

平衡时:

当添加、删除或关闭BE节点时。

天平的粒度:

正常余额的粒度是桶,但是对于同宿表,我们必须保证所有桶在同一个同宿组下的数据局部性,所以我们余额的单位是同宿组。

余额对查询的影响:

当共存组处于平衡状态时,共存连接将退化为原始的随机连接或广播连接。

平衡过程:

选择要复制或迁移的存储桶的目标标记,并且托管组的状态为正在平衡。对于要复制或迁移的存储桶,启动克隆作业。克隆作业将从Bucket的现有副本中复制一个新副本,目标BE将更新backendsPerBucketSeq(用于维护BucketSeq和BE之间映射关系的元数据)。当一个托管组下的所有克隆作业完成时,托管组的状态将稳定,可以删除冗余副本。当一个be节点被删除或长时间挂起时,选择目标be的策略:

选择策略与正常平衡中的相同。考虑到集群的整体负载,尽量选择负载较低的BE。

添加BE节点时,选择目标BE的策略:

对于当前的托管组,计算每个新添加的be要添加的存储桶seq的数量:如果我们有3个BE和8个存储桶,每个存储桶有3个副本,每个BE负责8个存储桶副本。我们增加1个BE后,可以计算出每个BE负责的bucket副本的平均数量应该是3 * 8/4 = 6,每个新增加的BE需要增加的bucket seqs的数量应该是6/1 = 6。对于每个存储桶seq,随机选择哪个旧BE将拷贝迁移到新添加的BE。

协同定位连接性能的测试数据:

表A、B、C、B、C都有10天的数据,每天一个分区,每个分区有570万个数据。

测试集群:

4台低级物理机,每台24个CPU和96个内存

测试SQL:

SQL1:

从t1内部联接中选择count(*)

SQL2的测试结果:

空间连接原理实践教程-主机频道

可以看出,协同定位连接相对于混洗连接有明显的性能提升,而且集群规模越大,连接的数据量越多,协同定位连接的优势也会越明显。

最新的如何使用Colocate Join社区的代码已经支持Colocate Join,但是默认情况下是关闭的。您只需在FE配置中将disable_colocate_join设置为false,即可启用Colocate Join。

使用时,只需要在创建表时添加colocate _ with属性即可。colocate_with的值可以设置为同一组colocate表中的任何一个,但是您需要确保首先创建colocate_with属性中的表。

如果需要共同定位连接表t1和t2,可以根据以下语句构建一个表:

CREATE TABLE ` t1 `( ` id ` int(11)COMMENT " ",` value ` varchar(8)COMMENT " ")ENGINE = OLAP duplicate KEY(` id `)由HASH(` id `)BUCKETS 10 properties(" co locate _ with " = " t1 ");CREATE TABLE ` T2 `( ` id ` int(11)COMMENT " ",` value ` varchar(8)COMMENT " ")ENGINE = OLAP duplicate KEY(` id `)由HASH(` id `)BUCKETS 10 properties(" co locate _ with " = " t1 ");

目前,协同定位连接将协同定位表限制为具有相同colocate_with属性的OLAP类型的表。具有相同colocate_with属性的表的桶数必须相同。(这个限制以后可能会取消,但是对用户应该没有实际影响。)具有相同colocate_with属性的表的分布式列的数据类型必须相同。

Colocate Join的适用场景Colocate Join非常适用于几个表按照同一个字段划分为桶,按照同一个字段进行高频连接的场景。比如很多电商的应用都是按照商家Id分桶,按照商家Id高频加入。

Colocate Join FAQ用一句话总结。任何不能共处一地的场景将自动退化为原始的无序连接或广播连接。

Q1:你支持多表共存吗?

答:支持

Q2:你支持共存表和普通表连接吗?

答:支持

Q3:共存表支持用Join-bucket键连接吗?

答:是:随机加入或广播加入将用于不满足共存加入条件的加入。

Q4:如何根据协同定位连接来确定连接是否被执行?

在A: explain的结果中,如果Hash Join的子节点直接是OlapScanNode,并且没有交换节点,则说明是Colocate Join。

Q5:如何修改colocate_with属性?

a:更改表example_db.my_table集合(& quot与& quot= & quot目标表& quot);

问:如何禁用共存连接?

a:设置disable _ colocate _ join = true查询时,您可以禁用共存联接,并使用随机联接或广播联接。

综上所述,大部分支持Join的OLAP系统都会考虑支持Colocate Join,比如MemSQL、SnappyData、Ali AnalyticDB等。Ali AnalyticDB甚至在其数据模型中引入了表组的概念。一般来说,通过在数据导入、查询计划、查询调度和数据平衡中保证和考虑数据的局部性,同位连接可以在特定场景下显著地加快下行连接查询的速度,是一个非常有用的特性。

以上是Apache Doris Colocate Join原理实用教程的详细内容。关于Apache Doris Colocate Join原理的更多信息,请关注主机频道zhujipindao中的其他相关文章。com!

未经允许不得转载:主机频道 » 空间连接原理实践教程

评论 抢沙发

评论前必须登录!