哈希娱乐 行业新闻 党建先锋

一种分布式数据库执行哈希连接的方法哈希游戏

发布时间:2025-05-27 16:17:07  浏览:

  哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏

一种分布式数据库执行哈希连接的方法哈希游戏

  地址200120上海市浦东新区中国,上海,自由贸易试验区张东路1158号、丹桂路1059号2幢305-22室

  本发明公开一种分布式数据库执行哈希连接的方法,涉及分布式数据库技术领域,包括,设定一个相对倾斜率,计算相对倾斜率与表数据量的乘积,得到倾斜阈值,获取表统计信息的热力图,筛选表中超出倾斜阈值的元素,得到倾斜值,利用倾斜值拓展表统计信息,执行SQL语句,获取两个输入数据表,利用新的表统计信息生成哈希连接物理计划,依据计划对输入数据表中的元组进行哈希分发、平均分发或镜像分发,各个节点接收到输入数据表的元组之后,利用数据量小的输入数据表数据建立哈希表,利用数据量大的输入数据表数据进行探测,最后每个节点哈希连接的结果作并集,该并集即为最终的哈希连接结果。本发明可以实现任务的均衡分配,缩短总的SQL执行时间。

  获取分布式数据库中表统计信息的数据采样量,设定一个相对倾斜率,计算相对倾斜率与表数据采样量的乘积,得到倾斜阈值,

  获取分布式数据库中表统计信息的热力图,利用热力图筛选表中超出倾斜阈值的元素,被筛选出来的元素称为倾斜值,

  在分布式数据库中执行包含哈希连接的SQL语句,获取两个输入数据表,利用新的表统计信息生成哈希连接物理计划,依据计划对输入数据表中的元组进行哈希分发、平均分发或镜像分发,以将输入数据表的元组按照散列值发送给目的节点、按照平均概率分发给所有节点或复制后发送给所有参与计算的节点,

  各个节点接收到输入数据表的元组之后,利用数据量小的输入数据表数据建立哈希表,利用数据量大的输入数据表数据进行探测,最后每个节点哈希连接的结果作并集,该并集即为最终的哈希连接结果。

  2.根据权利要求1所述的一种分布式数据库执行哈希连接的方法,其特征在于,在分布式数据库中执行包含哈希连接的SQL语句,获取两个输入数据表,用新的表统计信息生成哈希连接物理计划,具体包括,

  执行SQL语句时,从分布式数据库中获取两个输入数据表,将数据量大的输入数据表称为R表,数据量小的输入数据表称为S表,

  对(a)、(b)两种情况,对R表和S表的非倾斜值进行哈希分发,对R表中的倾斜值进行平均分发,对S表中的倾斜值进行镜像分发,

  3.根据权利要求2所述的一种分布式数据库执行哈希连接的方法,其特征在于,构建哈希分发器、镜像分发器、平均分发器,其中,

  哈希分发器用于接收R表/S表中的一条元组,并按照元组的散列值发送给目的节点,

  平均分发器用于接收R表中的一条元组,并将元组按照平均概率随机或轮询分发给参与计算的节点。

  4.根据权利要求3所述的一种分布式数据库执行哈希连接的方法,其特征在于,对(a)、(b)两种情况,

  利用R表读取算子顺序读取R表中的一条元组,并基于新的表统计信息判断该条元组是否为R表的倾斜值,若是,则使用平均分发器将该条元组按照平均概率随机或轮询分发给参与计算的节点,若否,则使用哈希分发器将该条元组按照元组的散列值发送给目的节点,

  利用S表读取算子顺序读取S表中的一条元组,并基于新的表统计信息判断该条元组是否为R表的倾斜值,若是,则使用镜像分发器将该条元组发送给所有参与计算的节点,若否,

  5.根据权利要求3所述的一种分布式数据库执行哈希连接的方法,其特征在于,对(c)、(d)两种情况,

  利用R表读取算子顺序读取R表中的一条元组,随后使用哈希分发器将该条元组按照元组的散列值发送给目的节点,

  利用S表读取算子顺序读取S表中的一条元组,随后使用哈希分发器将该条元组按照元组的散列值发送给目的节点。

  6.根据权利要求1所述的一种分布式数据库执行哈希连接的方法,其特征在于,获取数据库表统计信息的热力图,获取热力图的数据采样量N和桶数M,统计桶边界元素数量numeq,筛选桶中的元素,α表示设定的相对倾斜率,被筛选出来的元素即为超出倾斜阈

  7.根据权利要求3所述的一种分布式数据库执行哈希连接的方法,其特征在于,将新的表统计信息加入系统表和缓存。

  8.根据权利要求1所述的一种检测倾斜数据的HashJoin执行方法,其特征在于,对分布式数据库中的所有表设定一个相同的相对倾斜率,基于分布式数据库中表统计信息的数据采样量,数据采样量不同的表具有不同的倾斜阈值。

  [0001]本发明涉及分布式数据库技术领域,具体的说是一种分布式数据库执行哈希连接的方法。

  [0002]哈希连接,是一种数据库中常见的操作,用于分析数据库两个或以上表数据之间的联系,无论在各种交易模型的OLTP场景下,还是计算分析模型的OLAP场景下,都是基础操作,哈希连接算子也都是基础算子。

  [0003]传统的哈希连接算子一般分为两步,对于两表中较小表,在内存中根据连接列建立哈希表,对于较大表,逐个查阅哈希表探测大表中链接列与小表匹配的部分,最后输出结果。传统部署在单机上的哈希连接也遵从以上步骤。

  [0004]对于分布式数据库,尤其是Shared‑Nothing架构的数据库,其运行方式相对于单机的哈希连接有以下不同。大表小表数据的分布不同于单机的情况,其数据可能分布在不同的数据库节点上,每个节点由网络连接,并且各自拥有一部分大表或者小表或者两者的数据。这就意味着在分布式环境下,如果要利用多个节点带来的并行计算能力,就要将原始的大小表数据,通过网重新分布至每个数据库节点,这些节点各自在拿到数据之后,进行哈希连接,最终结果就是这些节点的汇总。基于以上特点,一般的分布式数据库都采用哈希重分布的方式来实现每个节点的并行计算,即按照连接列的哈希值来确定原始数据被分发给哪个节点。然而基于哈希重分布的方式会带来以下问题,由于原始数据中可能存在倾斜值,这些拥有相同哈希值的倾斜值会被分发给同一个节点,会造成节点间任务量不均衡的现象,即某个或某些节点拿到大部分数据的情况,其危害具体体现在,这些拿到数据量较多的节点完成连接时间较长,会造成其余节点等待从而拖慢整个执行过程的情况。因此,在提升分布式数据库中哈希连接执行效率的问题中,如何处理倾斜值是一个关键问题。

  [0005] 目前,对于倾斜值的处理,发明专利申请《一种基于Spark计算框架的大表连接优化方法》,公开号CN113868230A,其具体提出了一种基于蓄水池采样的倾斜值检测机制,以及一种对数据进行分割,使倾斜数据发送给处理较快的节点的倾斜优化方式,其目的是在Spark计算框架中两个大表在连接查询时过滤掉大量无用数据,改进数据倾斜情况,缩短连接查询时间,解决Spark集群节点内存溢出问题,

  [0006] 公开文献SIGMOD,pages 1043–1052,2008.提出了一种广播部分数据的倾斜优化连接方法“PRPD” ,在PRPD中,表中倾斜数据按照哈希重分布,表中倾斜数据留在本地,匹配到相对表(另一个参与连接的表)的倾斜数据的对应数据被广播给所有参与计算的节点。这种方法在原始数据在各个节点上较为理想地均匀分布假设下,能取得较好的结果,但是对更为复杂的数据分布,优化效果较为有限。

  [0007] 本发明针对目前技术发展的需求和不足之处,提供一种分布式数据库执行哈希连接的方法。

  [0008] 本发明的一种分布式数据库执行哈希连接的方法,解决上述技术问题采用的技术方案如下,

  [0010] 获取分布式数据库中表统计信息的数据采样量,设定一个相对倾斜率,计算相对倾斜率与表数据采样量的乘积,得到倾斜阈值,

  [001 1] 获取分布式数据库中表统计信息的热力图,利用热力图筛选表中超出倾斜阈值的元素,被筛选出来的元素称为倾斜值,

  [0012] 利用倾斜值拓展分布式数据库的表统计信息,得到新的表统计信息,

  [0013] 在分布式数据库中执行包含哈希连接的SQL语句,获取两个输入数据表,利用新的表统计信息生成哈希连接物理计划,依据计划对输入数据表中的元组进行哈希分发、平均分发或镜像分发,以将输入数据表的元组按照散列值发送给目的节点、按照平均概率分发给所有节点或复制后发送给所有参与计算的节点,

  [0014] 各个节点接收到输入数据表的元组之后,利用数据量小的输入数据表数据建立哈希表,利用数据量大的输入数据表数据进行探测,最后每个节点哈希连接的结果作并集,该并集即为最终的哈希连接结果。

  [0015] 可选的,在分布式数据库中执行包含哈希连接的SQL语句,获取两个输入数据表,用新的表统计信息生成哈希连接物理计划,具体包括,

  [0016] 执行SQL语句时,从分布式数据库中获取两个输入数据表,将数据量大的输入数据表称为R表,数据量小的输入数据表称为S表,

  [0022] 对(a) 、 (b)两种情况,对R表和S表的非倾斜值进行哈希分发,对R表中的倾斜值进行平均分发,对S表中的倾斜值进行镜像分发,

  [0023] 对(c) 、 (d)两种情况,直接对R表和S表的元组进行哈希分发。

  [0024] 进一步可选的,构建哈希分发器、镜像分发器、平均分发器,其中,

  [0025] 哈希分发器用于接收R表/S表中的一条元组,并按照元组的散列值发送给目的节点,

  [0026] 镜像分发器用于接收S表中的一条元组,并发送给所有参与计算的节点,

  [0027] 平均分发器用于接收R表中的一条元组,并将元组按照平均概率随机或轮询分发给参与计算的节点。

  [0029] 利用R表读取算子顺序读取R表中的一条元组,并基于新的表统计信息判断该条元组是否为R表的倾斜值,若是,则使用平均分发器将该条元组按照平均概率随机或轮询分发

  给参与计算的节点,若否,则使用哈希分发器将该条元组按照元组的散列值发送给目的节点,

  [0030] 利用S表读取算子顺序读取S表中的一条元组,并基于新的表统计信息判断该条元组是否为R表的倾斜值,若是,则使用镜像分发器将该条元组发送给所有参与计算的节点,若否,则使用哈希分发器将该条元组按照元组的散列值发送给目的节点。

  [0032] 利用R表读取算子顺序读取R表中的一条元组,随后使用哈希分发器将该条元组按照元组的散列值发送给目的节点,

  [0033] 利用S表读取算子顺序读取S表中的一条元组,随后使用哈希分发器将该条元组按照元组的散列值发送给目的节点。

  [0034] 可选的,获取数据库表统计信息的热力图,获取热力图的数据采样量N和桶数M,统

  计桶边界元素数量numeq,筛选桶中 的元素,α表示设定的相对倾斜率,被筛选出来的元素即为超出倾斜阈值的倾斜值。

  [0036] 优选的,对分布式数据库中的所有表设定一个相同的相对倾斜率,基于分布式数据库中表统计信息的数据采样量,数据采样量不同的表具有不同的倾斜阈值。

  [0037] 本发明的一种分布式数据库执行哈希连接的方法,与现有技术相比具有的有益效果是,

  [0038] (1)本发明通过在分布式数据库的表统计信息中拓展倾斜数据,并根据表中是否含有倾斜数据采取不同的分发方式,使各个节点的执行时间大致均衡,避免某几个节点执行时间非常倾斜的情况,提升分布式数据库SQL执行性能,

  [0039] (2)本发明在分布式数据库的表统计信息中拓展倾斜数据,这一操作不会对现有数据库增加过多负担。

  [0041] 为使本发明的技术方案、解决的技术问题和技术效果更加清楚明白,以下结合具体实施例,对本发明的技术方案进行清楚、完整的描述。

  [0043] 本实施例提出一种分布式数据库执行哈希连接的方法,包括如下步骤,

  [0044] (一)获取分布式数据库中表统计信息的数据采样量,设定一个相对倾斜率α,计算相对倾斜率α与表数据采样量的乘积,得到倾斜阈值。

  [0045] (二)获取分布式数据库中表统计信息的热力图,获取热力图的数据采样量N和桶

  数M,统计桶边界元素数量numeq,利用热力图筛选桶中 的元素,被筛选出来的元素即为超出倾斜阈值的倾斜值。

  [0046] (三)利用倾斜值拓展分布式数据库的表统计信息,得到新的表统计信息。

  [0048] (四)首先,在分布式数据库中执行包含哈希连接的SQL语句,获取两个输入数据表,利用新的表统计信息生成哈希连接物理计划,具体包括,

  [0049] 执行SQL语句时,从分布式数据库中获取两个输入数据表,将数据量大的输入数据表称为R表,数据量小的输入数据表称为S表,

  [0055] 随后,结合附图1,对(a) 、 (b)两种情况,对R表和S表的非倾斜值进行哈希分发,对R 表中的倾斜值进行平均分发,对S表中的倾斜值进行镜像分发,对(c) 、 (d)两种情况,直接对R表和S表的元组进行哈希分发,实现这一步采取的操作如下,

  [0056] (1)构建哈希分发器,用于接收R表/S表中的一条元组,并按照元组的散列值发送给目的节点,

  [0057] 构建镜像分发器,用于接收S表中的一条元组,并发送给所有参与计算的节点,

  [0058] 构建平均分发器,用于接收R表中的一条元组,并将元组按照平均概率随机或轮询分发给参与计算的节点,

  [0059] (2)对(a) 、 (b)两种情况,利用R表读取算子顺序读取R表中的一条元组,并基于新的表统计信息判断该条元组是否为R表的倾斜值,若是,则使用平均分发器将该条元组按照平均概率随机或轮询分发给参与计算的节点,若否,则使用哈希分发器将该条元组按照元组的散列值发送给目的节点,

  [0060] 利用S表读取算子顺序读取S表中的一条元组,并基于新的表统计信息判断该条元组是否为R表的倾斜值,若是,则使用镜像分发器将该条元组发送给所有参与计算的节点,若否,则使用哈希分发器将该条元组按照元组的散列值发送给目的节点,

  [0062] 利用R表读取算子顺序读取R表中的一条元组,随后使用哈希分发器将该条元组按照元组的散列值发送给目的节点,

  [0063] 利用S表读取算子顺序读取S表中的一条元组,随后使用哈希分发器将该条元组按照元组的散列值发送给目的节点。

  [0064] 最后,各个节点接收到R表、S表的元组之后,利用S表的元组建立哈希表,利用R表的元组进行探测,最后每个节点哈希连接的结果作并集,该并集即为最终的哈希连接结果。

  [0065] 本实施例中,对分布式数据库中的所有表设定一个相同的相对倾斜率,基于分布式数据库中表统计信息的数据采样量,可以知道,数据采样量不同的表具有不同的倾斜阈值。

  [0066] 为了方便,将本实施例的实现方法称为均分‑广播方法,将CockroachDB数据库广泛采用的哈希连接方法与本实施例的均分‑广播方法进行对比,

  [0067] 以四个节点为例,设定R表、S表的相对倾斜率为5,,得到表1中的执行时间,

  [0070] 以四个节点为例,设定R表、S表的相对倾斜率为5,、10,、20,、50,,得到表2中的总执行时间,

  [0073] 综上可知,采用本发明的一种分布式数据库执行哈希连接的方法,可以使各个节点的执行时间大致均衡,避免某几个节点执行时间非常倾斜的情况,提升分布式数据库SQL 执行性能。

  [0074] 以上应用具体个例对本发明的原理及实施方式进行了详细阐述,这些实施例只是用于帮助理解本发明的核心技术内容。基于本发明的上述具体实施例,本技术领域的技术人员在不脱离本发明原理的前提下,对本发明所作出的任何改进和修饰,皆应落入本发明的专利保护范围。