CN105359142A - 哈希连接方法、装置和数据库管理系统 - Google Patents

哈希连接方法、装置和数据库管理系统 Download PDF

Info

Publication number
CN105359142A
CN105359142A CN201480037464.8A CN201480037464A CN105359142A CN 105359142 A CN105359142 A CN 105359142A CN 201480037464 A CN201480037464 A CN 201480037464A CN 105359142 A CN105359142 A CN 105359142A
Authority
CN
China
Prior art keywords
data
hash
initial data
group
packets
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201480037464.8A
Other languages
English (en)
Other versions
CN105359142B (zh
Inventor
桑永嘉
李俊
施会华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN105359142A publication Critical patent/CN105359142A/zh
Application granted granted Critical
Publication of CN105359142B publication Critical patent/CN105359142B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor

Abstract

本发明公开了一种哈希连接方法、装置和数据库管理系统。该方法在进行数据库查询时在目标数据组进行分组过程中,以vector为数量单位划分并计算数据段内原始数据的哈希值,并以比特位表示;再基于预设分组规则在哈希分组中,将位于指定位上取值相同的哈希值所对应的原始数据划分在同一小组内,在后续分组中利用前一次哈希分组中未被指定比特位继续执行哈希分组,同时,在进行分组的过程中,按照所述原始数据在目标数据组中的位置,对划分在同一小组中的原始数据进行排序,最后,再对进行分组以及排序后的待连接的目标数据组中对应分组中的原始数据进行连接操作。从而实现降低后续对各个分组进行排序的复杂度的目的。

Description

哈希连接方法、 装置和数据库管理系统
技术领域 本发明涉及数据库技术领域, 更具体的说, 是涉及一种哈希连接方法、 装 置和数据库管理系统。 背景技术 随着数据库技术的发展和应用, 数据库存储的数据量已从兆字节(M )及 千兆字节 (G )过渡到现在的兆兆字节 (T )和千兆兆字节 (P )。 基于当前数 据库所能存储的数据量, 用户在查询数据库的过程中, 所需要面对的则是 G 级、 T级甚至 P级的数据量。 在查询如此大的数据量的情况下, 需要满足查询 的快速响应, 则对数据库处理性能提出了很大的挑战, 而对数据库性能产生至 关重要的则是在查询过程中数据库对查询中包含的 Join操作 (连接操作) 的 处理响应时间。
在数据库中实现 j0in操作的基本方法主要有 Hash Join(哈希连接), Merge Join以及针对 Grace Join做改进后的 Radix Join (聚集连接 ) 算法。 其中, 在 查询的过程中主要包括分组和 Join 两部分, 为避免分组过程中, 当分组数大 于 CPU的 TLB entry项 ( TLB , Translation Lookaside Buffer, 页表緩冲, TLB entry指在 LTB中緩存的页表条目 ) 时所导致的严重 TLB miss (指 TLB中没 有所需的表页) 问题, 现有的查询在分组阶段多半釆用多路分组的方法减少 TLB miss。 目前最常见的查询过程为: 首先, 釆用多路分组的方式进行分组, 且在每一次分组过程中对原始数据进行 hash计算, 然后, 在获得多路分组后, 进行 Join操作。
由上述可知,现有的进行数据库查询过程中, 面临分组阶段所釆用的多路 分组需要多次计算 hash值可能会产生大量 cache miss (緩存缺失, 指所请求的 数据不在要访问的存储器层), 以及浪费计算资源的问题。 发明内容 有鉴于此, 本发明实施例的目的在于提供一种哈希连接方法、装置和数据 库管理系统, 以克服现有进行数据库查询过程中, 所面临的浪费计算资源的问 题。
为实现上述目的, 本发明实施例提供如下技术方案:
本发明实施例的第一方面提供了一种哈希连接方法,应用于数据库,包括: 接收包含有连接 Join操作的结构化查询语言 SQL语句, 解析获取至少两 个待连接的目标数据组;
以矢量 vector为数量单位将每一目标数据组划分为多个数据段;
基于预设分组规则依次对每一目标数据组中的数据段进行 N次哈希 hash 分组, 其中, 在每次 hash分组时, 基于第 1次 hash分组计算所述数据段中的 原始数据所得的用 bit位表示的 hash值, 将当前 hash分组过程中指定 bit位上 取值相同的 hash值所对应的原始数据划分在同一小组内, 并对划分在同一小 组内的各个原始数据,按照各个原始数据在所述目标数据组中的位置在同一小 组内进行排序并保存, N取大于或等于 1的正整数;
对每一目标数据组经过 N次 hash分组后获得的小组, 在所述目标数据组 中, 按照各个小组中所包含的原始数据对应的 hash值由小至大的对各个小组 进行排序;
按照排序依次取所述两个待连接的目标数据组中经由 N次 hash分组后获 得的各个小组中的原始数据进行 Join操作。
本发明实施例的第一方面的第一种实现方式中,所述基于预设分组规则依 次对每一目标数据组中的数据段进行 N次 hash分组中的第 1次 hash分组包括: 计算当前所述数据段内包含的原始数据的 hash值,并用 bit位表示计算所 得 hash值;
将位于指定 bit位上取值相同的 hash值所对应的原始数据划分在同一小组 内, 并对划分在同一小组内的各个原始数据,按照各个原始数据在所述目标数 据组中的位置在同一小组内进行排序和保存;
将每一个原始数据对应的 hash值中未被指定的 bit位与该原始数据进行关 联, 并保存;
所述基于预设分组规则依次对每一目标数据组中的数据段进行 N次 hash 分组中的第 2次至第 n次 hash分组包括: 对上一次 hash分组后得到的任意一小组中的原始数据进行 hash分组, n 包含于 N, 取大于 2的正整数包括:
基于当前小组内的原始数据所关联并保存的上一次 hash分组中未被指定 的 bit位, 将当前 hash分组过程中指定 bit位上取值相同的 hash值所对应的各 个原始数据划分在同一小组内, 并对划分在同一小组内的各个原始数据,按照 各个原始数据在所述目标数据组中的位置在同一小组内进行排序和保存;
将每一个原始数据关联的剩余的未被指定的 bit位再次保存。
本发明实施例的第一方面中所涉及的第一种所述预设分组规则包括:预设 hash分组次数 N, 或者预设分组总数 S, 或者预设 hash分组次数 N和预设分 组总数 S;
当所述预设分组规则是预设 hash分组次数 N时, 依次对每一所述目标数 据中的数据段进行 hash分组, 直至完成 N次 hash分组;
当所述预设分组规则是预设分组总数 S时,依次对每一所述目标数据组中 的数据段进行 hash分组,直至每一所述目标数据组的分组数等于预设分组数; 当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级高于预设分组总数 S时, 依次对每一所述目标数据 组中的数据段进行 hash分组, 直至完成 N次 hash分组;
当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 分组总数 S的优先级高于预设 hash分组次数 N时, 依次对每一所述目标数据 组中的数据段进行 hash分组, 直至每一所述目标数据组的分组数等于预设分 组总数 S;
当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级和预设分组总数 S的优先级一致, 依次对每一所述 目标数据组中的数据段进行 hash分组,直至完成 N次 hash分组且每一所述目 标数据组的分组数等于预设分组总数 S;
其中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1的正整 数, N包含 n; S的取值由数据库緩存 cache的大小决定, 为大于等于 2的正 整数;
所述预设 hash分组次数 N与预设分组总数 S的优先级由 TLB的存储大小 和 cache的大小决定。 本发明实施例第一方面中涉及到的第二种所述预设分组规则包括: 预设 hash分组次数 N, 预设的每一次 hash分组的分组数 m和预设分组总数 S; 其 中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1 的正整数, m 小于 N; S的取值由数据库緩存 cache的大小决定, 为大于等于 2的正整数; 所述依次对每一所述目标数据中的数据段进行 hash分组时, 按照预设的 每一次 hash分组的分组数进行分组, 使得最后的分组次数等于预设 hash分组 次数, 所分的小组的总数等于预设分组总数。
本发明实施例的第一方面的第二种实现方式中,所述以矢量 vector为数量 单位将每一目标数据组划分为多个数据段包括:
以矢量 vector为数量单位, 一个 vector对应一个数据段 , 顺序将每一目标 数据组划分为 M个数据段, M的取值由所述目标数据组内的原始数据的个数, 及数据库緩存 cache的大小和页表緩冲 TLB的存储大小决定;
其中, 第 1至第 M-1个数据段中所包含的原始数据的个数相同, 第 M个 数据段中所包含的原始数据的个数小于或等于第 1至 M-1个数据段中所包含 的原始数据的个数。
本发明实施例第一方面的第三种实现方式中, 将位于指定 bit位上取值相 同的 hash值所对应的各个原始数据划分在同一小组内, 并对划分在同一小组 内的各个原始数据,按照各个原始数据在所述目标数据组中的位置在同一小组 内进行排序和保存包括: 查找位于当前 hash分组过程中指定 bit位上取值相同的 hash值对应的各 个原始数据,将各个原始数据划分在同一小组内,其中,依据数据库緩存 cache 的大小和页表緩冲 TLB的存储大小指定当前 hash分组所需用到的 bit位; 遍历划分在同一小组内的各个原始数据的下标,所述各个原始数据的下标 用于标识各个原始数据在所述目标数据组中的位置;
按照各个下标的大小, 从小至大排列各个下标对应的原始数据;
依据所述从小至大的顺序将各个原始数据写入同一小组内并保存。
本发明实施例第一种实现方式中,基于当前小组内的原始数据所关联并保 存的上一次 hash分组中未被指定的 bit位, 将当前 hash分组过程中指定 bit位 上取值相同的 hash值所对应的各个原始数据划分在同一小组内, 并对划分在 同一小组内的各个原始数据,按照各个原始数据在所述目标数据组中的位置在 同一小组内进行排序和保存包括:
调用当前进行 hash分组的小组内各个原始数据关联位置处所保存的上一 次 hash分组中未被指定的 bit位;
从调用的所述未被指定的 bit位中确定当前 hash分组过程中所需用到的 bit位, 其中, 当前 hash分组过程中所需用到的 bit位依据数据库緩存 cache 的大小和页表緩冲 TLB的存储大小决定;
查找位于当前 hash分组过程中指定 bit位上取值相同的 hash值对应的各 个原始数据, 将各个原始数据划分在同一小组内;
遍历划分在同一小组内的各个原始数据的下标,所述各个原始数据的下标 用于标识各个原始数据在所述目标数据组中的位置;
按照各个下标的大小, 从小至大排列各个下标对应的原始数据;
依据所述从小至大的顺序将各个原始数据写入同一小组内并保存。
本发明实施例第一种实现方式中,所述按照排序依次取所述两个待连接的 目标数据组中经由 N次 hash分组后获得的各个小组中的原始数据进行 Join操 作包括:
按顺序分别获取所述待连接的两个目标数据组进行 N次 hash分组后的各 个小组;
两两小组为一对进行原始数据 Join操作的方式, 对两个目标数据组的各 个小组中原始数据进行 Join操作;
所述两两小组为一对进行原始数据 Join操作的方式包括:
由一目标数据组中的一小组顺序遍历另一目标数据组中的各个小组; 若遍历到相同小组时,将所述小组中的原始数据, 顺序与所述相同小组内 的原始数据进行 Join操作, 其中, 所述相同小组是指该小组内存储的原始数 据的 hash值与用于遍历的小组内存储的原始数据的 hash值相同;
当所述小组中的原始数据都已进行执行 Join操作后, 移动至下一小组返 回执行顺序遍历另一目标数据组中的各个小组这一步骤;
若未遍历到相同小组时,则移动至下一小组返回执行顺序遍历另一目标数 据中的各个小组这一步骤;
直至所述目标数据组中的所有小组对另一目标数据组中的各个小组都执 行遍历操作。
本发明实施例的第二方面提供了一种哈希连接装置,应用于数据库,包括: 接收单元, 用于接收包含有连接 Join操作的结构化查询语言 SQL语句, 解析获取至少两个待连接的目标数据组;
划分单元,用于以矢量 vector为数量单位将每一目标数据组划分为多个数 据段;
分组单元,用于基于预设分组规则依次对每一目标数据组中的数据段进行 N次哈希 hash分组, 其中, 在每次 hash分组时, 基于第 1次 hash分组计算所 述数据段中的原始数据所得的用 bit位表示的 hash值, 将当前 hash分组过程 中指定 bit位上取值相同的 hash值所对应的原始数据划分在同一小组内,并对 划分在同一小组内的各个原始数据,按照各个原始数据在所述目标数据组中的 位置在同一小组内进行排序并保存, N取大于或等于 1的正整数;
排序单元, 用于对每一目标数据组经过 N次 hash分组后获得的小组, 在 所述目标数据组中, 按照各个小组中所包含的原始数据对应的 hash值由小至 大对各个 d、组进行排序;
连接单元, 用于按照排序依次取所述两个待连接的目标数据组中经由 N 次 hash分组后获得的各个小组中的原始数据进行 Join操作。
本发明实施例的第三方面提供了一种数据库管理系统,应用于数据库, 包 括:
具有存储介质的存储器, 所述存储器中存储有进行数据库查询时的程序; 通过总线与所述存储器连接的处理器, 当执行数据库查询时, 所述处理器 调用所述存储器中存储的数据库查询程序,并依据上述所述的本发明实施例的 第一方面提供的一种哈希连接方法执行所述数据库查询程序。
经由上述的技术方案可知, 与现有技术相比, 本发明实施例公开了一种哈 希连接方法、 装置和数据库管理系统。 该方法在进行数据库查询时, 在确定待 连接的目标数据组之后, 对目标数据组进行分组过程中, 首先, 以矢量 vector 为数量单位将待连接的目标数据组划分为多个数据段, 然后,计算数据段内包 含的原始数据的 hash值, 并用比特 bit位表示 hash值; 然后, 基于预设分组 规则, 在第 1次 hash分组时计算所得的各个原始数据用 bit位表示的 hash值, 在进行 hash分组的过程中, 将当前 hash分组过程中指定 bit位上取值相同的 hash值所对应的各个原始数据划分在同一小组内,并对划分在同一小组内的各 个原始数据,按照各个原始数据在所述目标数据组中的位置在同一小组内进行 排序并保存。
本发明实施例通过以 vector为数量单位以及在 hash分组过程中利用指定 bit位执行 hash分组, 能够实现同时对若干原始数据进行 hash分组处理, 且在 多次 hash分组的过程中不需要重复计算原始数据的 hash值, 即减少了 cache miss緩存缺失, 也省去了重复计算 hash值避免了计算资源的浪费。
并且每次分组划分至每个小组中的原始数据有序,这样完成多个数据段分 组后得到的每个小组中的原始数据局部有序, 在对局部有序的原始数据进行 join时, 其排序复杂度低于随机分配的原始数据进行 join时的排序复杂度。
附图说明 为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需 要使用的附图作简单地介绍,显而易见地, 下面描述中的附图仅仅是本发明的 实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动的前提下, 还可 以根据提供的附图获得其他的附图。
图 1为本发明实施例一公开的一种哈希连接方法的流程图;
图 2为本发明实施例三公开的示例四公开的 3次 hash分组的示意图; 图 3为本发明实施例四公开的每个数据段中包含相同原始数据的示意图; 图 4为本发明实施例四公开的第 1次 hash分组过程中划分小组的流程图; 图 5为本发明实施例四公开的对一段数据段中的原始数据进行 hash分组 的示意图;
图 6为本发明实施例四公开的第 2次至第 N次 hash分组过程中划分小组 的流程图;
图 7 为本发明实施例四公开的对两个待连接的目标数据中各个小组中的 原始数据进行 Join操作的流程图;
图 8为本发明实施例五公开的一种哈希连接装置的结构示意图;
图 9为本发明实施例五公开的一种数据库管理系统的结构示意图。 具体实施方式 为了引用和清楚起见, 下文中使用的技术名词的说明、 简写或缩写总结如 下:
TLB , Translation Look aside Buffer, 页表緩冲, TLB entry指在 LTB中緩 存的页表条目;
Radix Join, 聚集连接;
cache miss, 緩存缺失, 指所请求的数据不在要访问的存储器层。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、 完整地描述, 显然, 所描述的实施例仅仅是本发明一部分实施例, 而不是 全部的实施例。基于本发明中的实施例, 本领域普通技术人员在没有做出创造 性劳动前提下所获得的所有其他实施例, 都属于本发明保护的范围。
由背景技术可知,在当前常用的查询过程中 ,分组阶段所釆用的多路分组 , 在每一次分组过程中都需要釆用一个一个处理原始数据的方式,需要多次计算 原始数据的 hash值从而面临浪费计算资源的问题。 因此, 本发明实施例提供了 一种哈希连接方法, 装置和数据管理系统, 通过利用矢量 vector为数量单位以 及在后续分组过程中利用当前 hash分组过程中被指定 bit位执行 hash分组, 能够 实现同时对若干原始数据进行 hash分组处理, 且在多次 hash分组的过程中不需 要重复计算原始数据的 hash值, 即减少了 cache miss緩存缺失, 也省去了重复 计算 hash值, 避免了计算资源的浪费。 同时, 每次 hash分组划分至每个小组中 的原始数据有序,这样完成多个数据段分组后得到的每个小组中的原始数据局 部有序, 在对局部有序的原始数据进行 join时, 其排序复杂度低于随机分配的 原始数据进行 join时的排序复杂度。 具体过程通过以下本发明实施例进行详细 说明。
实施例一
本发明实施例一公开了一种哈希连接方法, 该方法应用于数据库, 其流程 如图 1中的步骤 S101至步骤 S105所示, 具体过程包括:
步骤 S101 , 接收包含有连接 Join操作的结构化查询语言 SQL语句, 解析 获取至少两个待连接的目标数据组;
在执行数据库查询的过程中, 执行步骤 S101 , 由数据库对接收到的包含 有 Join操作的 SQL查询语句进行解析, 从中至少获取两个待连接的目标数据 组。 也就是说, 以两个待连接的目标数据组为一对, 在解析的过程中至少会出 现两个待连接的目标数据组, 也就是说待连接的目标数据组是成对解析的。
步骤 S102 , 以矢量 vector为数量单位将每一目标数据组划分为确定数据 的多个数据段;
在步骤 S 102中, 针对解析出的成对的两个待连接的目标数据组执行相同 的操作, 在划分数据段的过程中以一个目标数据组为例。
以矢量 vector 为数量单位划分当前的目标数据组。 具体的, 以该 vector 为数量单位是指以一个 vector 内包含多少个原始数据为固定单位。 并利用该 vector数量单位将目标数据组划分为多个数据段, 也就是说一个数据段对应一 个 vector。
需要说明的是,在通常情况下, 以一个数据段中可包含的最多原始数据个 数为一个 vector单位,将所述目标数据组划分为多个数据段, 划分后的各个数 据段中包含的原始数据个数通常为相同的。 当然也存在,按照预设分组规则以 及该目标数据组中的原始数据的总个数对一个数量单元 vector 中所包含的原 始数据的个数进行限定,并非以其所能包含的最多的原始数据的个数对该数量 单元 vector进行限定。
上述两种方式, 都不排除, 最后一个数据段中所包含的原始数据的个数小 于其他数据段中包含的原始数据的个数的情况。
基于上述方式, 执行步骤 S102之后, 可将每一个待连接的目标数据组都 划分成多个数据段。 本发明实施例釆用矢量化的方法, 在后续进行 hash分组 的过程中, 以一个 vector为数量单位, 针对该 vector 内的原始数据同时计算 hash值, 然后将同一个分组中的若干个原始数据一次性写入对应的分组中,从 而减少了 cache miss, 能够提升 join性能。
步骤 S103 , 基于预设分组规则依次对每一目标数据组中的数据段进行 N 次 hash分组, 其中, 在每次 hash分组时, 基于第 1次 hash分组计算所述数据 段中的原始数据所得的用 bit位表示的 hash值, 将当前 hash分组过程中指定 bit位上取值相同的 hash值所对应的原始数据划分在同一小组内, 并对划分在 同一小组内的各个原始数据,按照各个原始数据在所述目标数据组中的位置在 同一小组内进行排序并保存, N取大于或等于 1的正整数;
在执行上述步骤 S103的过程中, 基于预设分组规则依次对每个目标数据 组中的数据段进行 N次 hash分组。 其中, 在第 1次 hash分组过程中, 以一个 目标数据组为例, 由上至下从该目标数据的第一个数据段开始 hash分组至最 后一个数据段结束。 以一个数据段为例, 在进行第 1次 hash分组时, 对该数 据段内所包含的全部原始数据同时计算 hash值, 并将各个原始数据的 hash值 用 bit位表示,该 bit位与安装该数据库的计算机本身的位数相关,是由当前是 计算机的 CPU最大寻址数决定的。
例如, 当前安装该数据库的计算机为 32位, 则在进行第 1次 hash分组过 程中计算的原始数据所对应的 hash值用 32位的 bit位表示。 若当前安装该数 据库的计算机为 64位, 则在进行第 1次 hash分组过程中计算的原始数据所对 应的 hash值用 64位的 bit位表示。
然后, 根据当前第 1次 hash分组所需要利用到的 bit位数, 也就是指定 bit位, 在各个用 bit位表示的 hash值的指定 bit位上进行比对, 或遍历, 或查 找在指定 bit位上取值相同的 hash值, 并将该 hash值所对应的原始数据划分 在同一小组内。 例如, 第 1次 hash分组所需要的 bit位数为 2位, 则此时从各 个用 bit位表示的 hash值的最高位开始, 向后取两位 bit位进行比对, 或遍历, 组内。
最后,针对划分在同一小组内的各个原始数据,按照各个原始数据在目标 数据组中的位置在该小组内进行排序,该位置也可以认为是各个原始数据在数 据段中的位置。 例如, 原始数据 A、 B、 C划分在同一小组内, 若 A排在目标 数据组的第 3位, B排在目标数据组的第 1位, C排在目标数据组的第 6位, 经过排序后, 在该小组内 A、 B、 C的实际存储顺序为: B、 A、 C。
需要说明的是, 由上至下对每一个数据段进行第 1次 hash分组的过程相 同, 从开始第 1次 hash分组开始依次从未被指定的最高位 bit位开始指定 bit 位。。 在执行 N次 hash值分组过程中, 除第 1次 hash分组时需要计算原始数 据的 hash值之后, 后续 hash分组过程中, 仅利用各个原始数据对应的 hash 值中未被指定的 bit位进行 hash分组, 将当前 hash分组过程中所需利用的 bit 位上取值相同的 hash值所对应的原始数据划分在同一小组内, 并釆用与第 1 次 hash分组相同的方式, 对划分在同一小组内的各个原始数据, 按照各个原 始数据在目标数据组或者数据段中的位置对各个原始数据在本小组内进行排 序。
在步骤 S103中所提到的预设分组规则是指, 预设 hash分组次数 N, 或者 预设分组总数 S, 或者预设 hash分组次数 N和预设分组总数 S; 以及, 预设 hash分组次数 N, 预设的每一次 hash分组的分组数 m和预设分组总数 S。 其 中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1 的正整数, m 小于 N; S的取值由数据库緩存 cache的大小决定, 为大于等于 2的正整数。
步骤 S104, 对每一目标数据组经过 N次 hash分组后获得的小组, 在所述 目标数据组中, 按照各个小组内所包含的原始数据对应的 hash值由小至大对 各个小组分别进行排序;
在步骤 S104中,对按照预设分组规则进行 N次 hash分组后得到的目标数 据组中的各个小组进行再次排序。 方式为: 按照该小组内所包含的原始数据的 hash值的大小, 对各个小组进行排序。 如: 在对目标数据组进行分组后获得小 组 1、 小组 2和小组 3; 其中, 小组 1中包含的原始数据的 hash值为 3 , 小组 2中包含的原始数据的 hash值为 5 , 小组 3中包含的原始数据的 hash值为 0, 在进行排序后, 此时该目标数据组中的小组的顺序为: 小组 3、 小组 1和小组 2。
需要说明的是,按照预设分组规则进行 N次 hash分组后得到的各个小组, 最后划分在同一小组内的原始数据通常对应相同的 hash值。
步骤 S105 ,按照排序依次取所述两个待连接的目标数据组中经由 N次 hash 分组后获得的各个小组中的原始数据进行 Join操作。
针对通过上述执行步骤 S102至步骤 S104的 hash分组过程中对所划分的 同一小组内原始数据进行排序后的两个待连接的目标数据组,执行步骤 S105 , 针对每个待连接的目标数据组中有序的小组,按照顺序将一个待连接的目标数 据组中一个小组与另一个待连接的目标数据组中的一下小组进行 Join操作, 即将各个小组中有序的原始数据执行 Join操作。 从而实现当次的数据库查询 的任务。
针对现有技术中由于硬件的 TLB entry项大于 cache way的数目, 釆用一 个个计算的 hash值进行分组容易导致大量的 cache thrashing,从而产生大量的 cache miss, 影响原本 join的性能的问题。 通过上述本发明实施例一公开的哈 希连接方法, 以一个 vector为数量单位按组计算 hash值, 然后将同一个分组 中所包含的若干个原始数据对应的 hash值一次性写入对应的小组中。以 vector 的形式进行 hash分组则能够避免产生不必要的 cache thrashing, 从而减少了 cache miss, 实现提升 Join性能的目的。 并且, 仅在第 1次分组过程中计算各 个原始数据的 hash值,而将后续使用到的若干 bit位记录到对应的各个原始数 据的关联位置处以备后续分组过程中直接使用, 从而省去重复计算 hash值的 代价, 避免了资源浪费。
同时, 在本发明实施例一公开的哈希连接进行 hash分组的过程中, 在每 一次 hash分组之后, 将原始数据写入各个对应的小组内之前, 对各个小组内 的原始数据进行排序,使得在最后分组完成之后,对各个小组做最后的排序时, 由于在本发明实施例公开的多路分组的过程中已经对原始数据进行了一定程 度上的局部排序,各个小组内的原始数据在局部上是有序的, 因此仅需要对各 个小组进行排序即可。通过该种方式, 能够大大的降低现有技术中在分组完成 之后,再对各个小组内的原始数据以及各个小组进行排序的复杂度, 减少因排 序消耗的时间。并且在这种局部有序的原始数据进行 join时,其排序复杂度低 于随机分配的原始数据进行 join时的排序复杂度。
实施例二
基于本发明实施例一公开的哈希连接方法,在本发明实施例二中主要针对 图 1示出的步骤 S103中提及的 N次 hash分组进行详细说明。
基于预设分组规则依次对每一目标数据组中的数据段进行 N次 hash分组 中的第 1次 hash分组的过程包括:
步骤 S1031 , 计算当前所述数据段内包含的原始数据的 hash值, 并用 bit 位表示计算所得 hash值;
基于执行步骤 S102以一个 vector为数量单位划分目标数据组, 以所述目 标数据组中的任意一个数据段为例,在执行步骤 S1031时, 同时计算同一数据 段内所包含的各个原始数据的 hash值,并利用比特 bit位表示计算每个原始数 据所得的 hash值。如本申请实施例一中所述该比特 bit位与安装该数据库的计 算机本身的位数相关, 是由当前是计算机的 CPU最大寻址数决定的。 据划分在同一小组内, 并对划分在同一小组内的各个原始数据,按照各个原始 数据在所述目标数据组中的位置在同一小组内进行排序和保存; 在执行步骤 SI 032的过程中, 在当前进行第 1次 hash次分组的过程中, 依据数据緩存 cache的大小和页表緩冲 TLB的存储大小, 确定当前 hash分组 所需要指定的 bit位,针对该数据段中的各个原始数据对应的利用 bit位表示的 hash值, 在划分小组的过程中, 将指定 bit位上取值相同的 hash值所对应的原 始数据划分在同一个小组内。
如, 在当前分组过程中需要两位 bit, 则针对当前用 bit位表示的 hash值 从最高位起向最低位方向指定两位, 在划分小组时, 将指定的前两位相同的 hash值对应的原始数据划分在同一个小组内。
同时, 在依据指定的 bit位相同, 获知那些原始数据可以划分在同一个小 组内时, 利用该原始数据在目标数据组中的位置,在其当前所在的小组内进行 排序。 如, 在同一小组内包含原始数据: A、 B、 C, 其中 A的位置在目标数 据组的第 6位, B的位置在目标数据组的第 1位, C的位置在目标数据组的第 4位, 则执行步骤 S1033后获取到的保存后的小组内的原始数据的位置为: B、 C、 A, 这样使得每次划分得到的每个小组中的原始数据有序。
步骤 S1033 , 将每一个原始数据对应的 hash值中未被指定的 bit位与该原 始数据进行关联, 并保存于各个 hash值对应的原始数据的关联位置处;
基于步骤 S1032,执行步骤 S1033在划分小组后,将该原始数据对应的 hash 值在该次 hash分组过程中未被使用的,或者未被指定的 bit位保存于该原始数 据的关联位置处。 其中, 该关联位置可以为与该原始数据相邻的存储空间, 也 可以是其他与该原始数据建立关联的存储空间。
针对目标数据组中的各个数据段执行完上述第 1次 hash分组之后, 若满 足预设分组规则, 则停止进行再次分组。 若不满足预设分组规则, 则继续对当 前第 1次 hash分组后的各个小组内的原始数据进行再次分组。
所述第 2次至第 n次 hash分组中对上一次 hash分组后得到的任意一小组 中的原始数据进行 hash分组, n取大于 2的正整数且包含于 N中。 上述基于 预设分组规则依次对每一目标数据组中的数据段进行 N次分组中的第 2次甚 至 n次 hash分组的过程包括:
步骤 S1034,基于当前小组内的原始数据关联位置处所保存的上一次 hash 分组中未被指定的 bit位,将当前 hash分组过程中指定 bit位上取值相同的 hash 值所对应的各个原始数据划分在同一小组内,并对划分在同一小组内的各个原 始数据,按照各个原始数据在所述目标数据组中的位置对同一小组内的各个原 始数据进行排序并保存;
在执行步骤 S1034的过程中, 依据在原始数据关联位置处保存的 bit位中 指定的, 当前进行 hash分组所需要用到的 bit位, 划分位于指定 bit位上取值 相同的 hash值所对应的原始数据为同一小组,同时,在依据指定的 bit位相同, 获知那些原始数据可以划分在同一个小组内时,利用该原始数据在目标数据组 中的位置, 在其当前所在的小组内进行排序。
步骤 S1035 , 将每一个原始数据关联的剩余的未被指定的 bit位再次保存 在所述原始数据的关联位置处;
在步骤 S1035中, 将剩余的未被指定的 bit位再次保存在所述原始数据的 关联位置处, 以备后续分组中使用。 结合步骤 S1032中的示例, 当前在原始数 据关联位置处保存的 bit位为执行步骤 S1032后剩余的未使用的 bit。若当前进 行 hash分组所需要用到的 bit位仍为两位, 同样的, 则指定的两位 bit位则为 从当前剩余的 bit位的最高位开始向最低位方向处所取的两位。
在执行完步骤 S1034与步骤 S1035之后,若当前的分组情况不满足预设分 组规则, 则返回循环执行步骤 S1034和步骤 S1035 , 直至满足预设分组规则时 停止对当前目标数据组进行分组。
通过执行步骤 S1031至步骤 S1035 ,对目标数据组进行满足预设分组规则 的分组, 并在每一次分组的过程中对划分在同一小组内的原始数据进行排序, 使得每一次进行 hash分组过程中得到分组结果虽然在整体上是无序的, 但是 在获得的每个小组内则是有序的,在这种局部有序的原始数据进行 join时,其 排序复杂度低于随机分配的原始数据进行 join时的排序复杂度。
通过上述本发明实施例二具体公开的仅在第 1 次分组过程中计算各个原 始数据的 hash值,而将后续使用到的若干 bit位记录到对应的各个原始数据的 关联位置处以备后续分组过程中直接使用,从而省去重复计算 hash值的代价, 避免了资源浪费。 同时, 在每一次 hash分组之后, 将原始数据写入各个对应 的小组内之前, 对各个小组内的原始数据进行排序, 使得在最后 hash分组完 成之后,各个小组内的原始数据在局部上是有序的, 因此仅需要对目标数据组 hash分组后得到的各个小组进行排序即可。通过该种方式, 能够大大的降低现 有技术中在分组完成之后,再对各个小组内的原始数据以及各个小组进行排序 的复杂度, 减少因排序消耗的时间。
实施例三
基于本发明实施例一和实施例二公开的哈希连接方法,在本发明实施例二 中主要针对图 1示出的步骤 S103中提及的预设分组规则进行详细说明。
当所述预设分组规则是预设 hash分组次数 N时, 在依次对每一所述目标 数据组中的数据段进行 hash分组的过程中,直至完成 N次 hash分组后停止对 该目标数据组进行分组。 其中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1的正整数。
示例一, 由页面緩冲 TLB的存储确定当前进行 hash分组的目标数据组需 要分 4次, 即 N取值为 4。 在进行完第 1次分组之后, 基于本发明实施例一中 公开的所述第 2次至第 n次 hash分组中对上一次 hash分组后得到的任意一小 组中的原始数据进行 hash分组的过程, 在执行至第 4次分组之后, 停止对该 目标数据组进行 hash分组。 此时, 得到的小组数即为该目标数据组的分组数。
当所述预设分组规则是预设分组总数 S时,依次对每一所述目标数据组中 的数据段进行 hash分组, 直至每一所述目标数据组的分组总数等于预设分组 总数 S, 停止对该目标数据组进行分组。 该 S的取值由数据库緩存 cache的大 小决定, 为大于等于 2的正整数。
示例二, 由数据库緩存 cache的大小决定的当前目标数据组可分的预设分 组总数为 10时, 针对当前目标数据组进行第 1次 hash分组, 当该第 1次 hash 分组完成后, 得到的分组数小于 10, 则继续进行 hash分组, 直至当前目标数 据组的分组数达到 10之后停止 hash分组。
当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级高于预设分组总数 S时, 依次对每一所述目标数据 组中的数据段进行 hash分组, 直至完成 N次 hash分组;
当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 分组总数 S的优先级高于预设 hash分组次数 N时, 依次对每一所述目标数据 组中的数据段进行 hash分组, 直至每一所述目标数据组的分组数等于预设分 组总数 S;
当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级和预设分组总数 S的优先级一致, 依次对每一所述 目标数据组中的数据段进行 hash分组,直至完成 N次 hash分组且每一所述目 标数据组的分组数等于预设分组总数 S;
其中,所述预设 hash分组次数 N与预设分组总数 S的优先级由 TLB的存 储大小和 cache的大小决定。
示例三, 由页表緩冲 TLB 的存储大小决定的预设分组次数为 3 , 由数据 库緩存 cache的大小决定的预设分组总数为 16。 当预设 hash分组次数 N的优 先级和预设分组总数 S的优先级一致时,则基于该预设分组次数对目标数据组 进行 3次分组之后得到的分组总数正好为 16; 当预设 hash分组次数 N的优先 级高于预设分组总数 S时,此时基于该预设分组次数对目标数据组进行 3次分 组之后, 可能存在的情况是, 得到的分组总数小于 16, 或者等于 16, 或者大 于 16; 当预设分组总数 S的优先级高于预设 hash分组次数 N时, 此时在分组 的过程中, 可能存在的情况是, 在得到分组总数为 16时, 针对该目标数据组 的分组次数大于 3次, 或者小于 3次, 或者等于 3次。
当所述预设分组规则包括: 预设 hash分组次数 N, 预设的每一次 hash分 组的分组数 m和预设分组总数 S; 其中, N的取值由页表緩冲 TLB的存储大 小决定, 为大于等于 1的正整数, m小于 N; S的取值由数据库緩存 cache的 大小决定, 为大于等于 2的正整数; 在依次对每一所述目标数据中的数据段进 行 hash分组时,按照预设的每一次 hash分组的分组数 m进行分组, 使得最后 的分组次数等于预设 hash分组次数 N,所分的小组的总数等于预设分组总数8。
示例四, 如图 2所示, 由页表緩冲 TLB的存储大小决定的预设分组次数 为 3 , 每一次 hash分组的分组数为 2, 由数据库緩存 cache的大小决定的预设 分组总数为 16。 在以 vector为数量单位划分为 2个数据段的该目标数据组中 , 在第 1次 hash分组过程中分别将每个数据段再划分为 2个小组, 并分别写入 对应的小组内; 然后在第 2次 hash分组过程中将前一次分组后的每个小组再 次划分为 2个数据段并分别写入对应的小组内,依次类推直至对该目标数据组 执行完 3次 hash分组并得到 16个小组。
在本发明实施例二中主要对图 1示出的步骤 S103中提及的在进行 hash分 组过程中基于的预设分组规则进行说明。该预设分组规则主要基于按照该数据 库的计算机中的页表緩冲 TLB的存储大小, 以及数据库緩存 cache的大小决 定, 基于该预设分组规则能够避免在分组的过程中出现 cache miss的情况, 进 而提高后续 Join的性能。
实施例四
基于本发明实施例一至实施例三公开的一种哈希连接方法, 其中,针对图 1中示出的步骤 S102,所述以矢量 vector为数量单位将每一目标数据组划分为 多个数据段数, 其具体过程包括:
以矢量 vector为数量单位, 一个 vector对应一个数据段, 顺序将每一目标 数据组划分为 M个数据段, M的取值由所述目标数据组内的原始数据的个数, 及数据库緩存 cache的大小和页表緩冲 TLB的存储大小决定;
其中, 第 1至第 M-1个数据段中所包含的原始数据的个数相同, 第 M个 数据段中所包含的原始数据的个数小于或等于第 1至 M-1个数据段中所包含 的原始数据的个数。
假设需要进行 hash分组的目标数据组中总共包含有 25个原始数据, 以 vector为数量单元, 该 vector数量单位中包含 5个原始数据, 使 5个原始数据 构成一个数据段。 以该 vector数量单位划分包含有 25个原始数据的目标数据 组, 可划分为 5个数据段。 第 1个至第 5个数据段中所包含的原始数据相同, 如图 3所示给出的为每个数据段中所包含的原始数据个数相同的情况。
假设需要进行 hash分组的目标数据组中总共包含有 28个原始数据, 以 vector为数量单元, 该 vector数量单位中包含 5个原始数据, 使 5个原始数据 构成一个数据段。 以该 vector数量单位划分包含有 28个原始数据的目标数据 组, 可划分为 6个数据段。 第 1个至第 5个数据段中所包含的原始数据相同, 第 6个数据段中包含 3个原始数据,小于第 1个值第 5个数据段中包含的原始 数据个数。
基于本发明实施例二公开的一种哈希连接方法, 其中,针对上述公开的步 划分在同一小组内, 并对划分在同一小组内的各个原始数据,按照各个原始数 据在所述目标数据组中的位置对同一小组内的各个原始数据进行排序并保存 , 其具体过程如图 4所示, 包括: 的 hash值;
步骤 S202, 查找位于当前 hash分组过程中指定 bit位上取值相同的 hash 值对应的各个原始数据, 将各个原始数据划分在同一小组内;
基于步骤 S201 中获取的当前进行 hash分组的数据段中各个原始数据的 hash值, 该 hash值用 bit位表示。 在步骤 S202中, 查找指定 bit位上的 hash 值。 该指定 bit位可以是在进行本次分组之前依据数据库緩存 cache的大小和 页表緩冲 TLB的存储大小指定的; 也可以在接收到需要进行 hash分组时, 依 据数据库緩存 cache的大小和页表緩冲 TLB的存储大小对后续进行分组过程 中所需要使用到的 bit位进行指定, 当在进行本次分组时, 则不需要再重新指 定, 直接在本次 hash分组所需要使用的 bit位上查找即可。
步骤 S203 , 遍历将划分在同一小组内的各个原始数据的下标, 所述各个 原始数据的下标用于标识各个原始数据在所述目标数据组中的位置;
步骤 S204 , 按照各个下标的大小, 从小至大排列各个下标对应的原始数 据;
步骤 S205 , 依据所述从小至大的顺序将各个原始数据写入同一小组内并 保存。
执行上述步骤 S203至步骤 S205在分组的过程中对将划分在同一小组内的 原始数据进行排序并写入同一小组内保存,使得在对该目标数据组分组的过程 中局部有序。 具体过程举例说明, 在进行 hash分组时, 以 vector为数量单位 的一段数据(如图 5中的虚线框所示 ),对该数据段中的原始数据一起计算 hash 值。 如图 5所示, value为参与 join的真实值, 图 5中 position代表各个原始 数据在整个数据段中的位置, position-1 代表经过整理后分在同一组的各个原 始数据的下标, hash value代表对应原始数据的 hash值。
在分组的过程中,遍历位于指定 bit位上取值相同的 hash值将其下标保存 到 position-1对应的小组中, 然后,依次遍历 position-1中保存的下标, 并将该 下标对应的原始数据写入到对应的小组中。
通过执行上述步骤 S203至步骤 S205 , 在分组的过程中, 在原始数据写入 当前小组的同时, 对本次需要写入当前小组的原始数据进行排序。 在该 vector 单位执行完上述分组之后,对下一个相邻的 vector进行如上操作, 直到该目标 数据组中的所有 vector都执行完本次 hash分组。进而得到该目标数据组的第 1 次 hash分组后各个在局部有序的小组, 从而分担最终对各个小组进行排序时 还要对其内部的原始数据进行排序的负担, 实现了降低分组复杂度的目的。 针对当前进行分组的目标数据组中的各个数据段都按照上述方式执行完 第 1次 hash分组之后, 若当前的分组满足预设分组规则, 则停止进行再次分 组。 若不满足预设分组规则, 则继续对当前第 1次 hash分组后的各个小组内 的原始数据进行再次分组。基于本发明实施例二公开的一种哈希连接方法, 其 中, 针对上述公开的步骤 S1034, 基于当前小组内的原始数据关联位置处所保 存的上一次 hash分组中未被指定的 bit位, 将当前 hash分组过程中指定 bit位 上取值相同的 hash值所对应的各个原始数据划分在同一小组内, 并对划分在 同一小组内的各个原始数据,按照各个原始数据在所述目标数据组中的位置在 同一小组内进行排序并保存, 其具体过程如图 6所示, 包括:
步骤 S301 , 调用当前进行 hash分组的小组内各个原始数据关联位置处所 保存的上一次 hash分组中未被指定的 bit位;
在执行步骤 S301的过程中, 当前小组为在上一次 hash分组之后获得的各 个小组中的任意一个小组,调用当前小组内所述原始数据关联位置处所保存的 上一次 hash分组中未被指定的 bit位,是为了进一步的当前小组进行再次 hash 分组。
步骤 S302, 从调用的所述未被指定的 bit位中确定当前 hash分组过程中 所需用到的 bit位, 其中, 当前 hash分组过程中所需用到的 bit位依据数据库 緩存 cache的大小和页表緩冲 TLB的存储大小决定;
步骤 S303 , 查找位于当前 hash分组过程中指定 bit位上取值相同的 hash 值对应的各个原始数据, 将各个原始数据划分在同一小组内。
步骤 S304 , 遍历将划分在同一小组内的各个原始数据的下标, 所述各个 原始数据的下标用于标识各个原始数据在所述目标数据组中的位置;
步骤 S305 , 按照各个下标的大小, 从小至大排列各个下标对应的各个原 始数据;
步骤 S306 , 依据所述从小至大的顺序将各个原始数据写入同一小组内并 保存。
上述步骤 S304至步骤 S306中对将划分在同一小组内的原始数据的排序过 程与上述附图 4中的步骤 S203至步骤 S205相同,具体说明可参照,这里不再 进行赘述。
针对该目标数据组前一次 hash分组得到的各个小组执行上述步骤 S301至 步骤 S306,从而获得再次 hash分组后的内部原始数据有序的新小组, 同样的, 在每次 hash分组完之后, 若当前的 hash分组满足预设分组规则, 则停止 hash 分组。 若不满足预设分组规则, 则执行步骤 S301至步骤 S303再次对前一次 hash分组得到的各个小组进行分组, 直至满足预设分组规则。
基于上述本发明实施例一至本发明实施例三中公开的一种哈希连接方法, 其中, 针对上述公开的步骤 S105 , 所述按照排序依次取所述两个待连接的目 标数据组中经由 N次 hash分组后获得的各个小组中的原始数据进行 Join操作, 具体过程包括:
步骤 S501 , 按顺序分别获取所述待连接的两个目标数据组进行 N次 hash 分组后的各个小组;
在至少两个待连接的目标数据组都按照上述步骤 S102至步骤 S104进行 hash分组之后, 执行步骤 S501 , 获取待连接的两个目标数据组中的各个小组。
步骤 S502, 两两小组为一对进行原始数据 Join操作的方式, 对两个目标 数据组的各个小组中原始数据进行 Join操作;
针对进行 hash分组之后的两个待连接的目标数据组, 按照两两小组为一 对进行原始数据 Join操作, 对两个待连接的目标数据组中各个小组中的原始 数据进行 Join操作的方式, 如图 7所示包括:
步骤 S503 , 由一目标数据组中的一小组顺序遍历另一目标数据组中的各 个小组;
步骤 S504 , 判断当前小组是否在另一目标数据组中遍历到相同的小组, 若是, 则执行步骤 S505 , 若否, 则执行步骤 S507;
步骤 S505 , 若遍历到相同小组时, 将所述小组中的原始数据, 顺序与所 述相同小组内的原始数据进行 Join操作, 其中, 所述相同小组是指该小组内 存储的原始数据的 hash值与用于遍历的小组内存储的原始数据的 hash值相 同;
步骤 S506, 判断当前进行 Join操作的两个小组中, 任意一方中的原始数 据是否都已经执行 Join操作, 若是, 则执行步骤 S507 , 若否, 则继续执行两 个小组内的原始数据的 Join操作, 并返回执行步骤 S506;
步骤 S507 , 移动至下一小组返回执行步骤 S503;
循环执行上述步骤 S503至步骤 S507 ,直至所述目标数据组中的所有小组 对另一目标数据组中的各个小组都执行遍历操作。
在本发明实施例中 hash连接进行分组以及 Join过程中所需执行的过程。 以 vector为数量单位,仅在第 1次分组过程中对每个 vector单元内的原始数据 同时计算 hash值, 然后将同一个分组中所包含的若干个原始数据对应的 hash 值一次性写入对应的分组中。 而将后续使用到的若干 bit位记录到对应的各个 原始数据的关联位置处以备后续分组过程中直接使用,从而省去重复计算 hash 值的代价, 避免了资源浪费。
同时, 在本发明实施例中, 在每一次 hash分组之后, 将原始数据写入各 个对应的小组内之前,对各个小组内的原始数据进行排序, 以及针对本次 hash 分组完成后对各个小组进行排序,使得在最后分组完成之后,对各个小组做最 后的排序时能够实现降低对小组以及小组内部数据进行排序的负担,减少因排 序消耗的时间的目的。
实施例五
针对上述本发明实施例一至本发明实施例四公开且详细描述的哈希连接 管理系统, 下面给出具体的实施例进行详细说明。
如图 8所示, 该哈希连接装置, 应用于数据库, 主要包括: 接收单元 101 , 划分单元 102 , 分组单元 103 , 排序单元 104和连接单元 105。
接收单元 101 , 用于接收包含有连接 Join操作的结构化查询语言 SQL语 句, 解析获取至少两个待连接的目标数据组;
在执行接收单元 101之后,针对解析获取到的每个目标数据组, 进行后续 的划分单元 102 ,分组单元 103和排序单元 104经历划分,分组以及排序之后, 进入连接单元 105 , 使分组后的待连接的两个目标数据组执行 Join操作。
划分单元 102, 用于以矢量 vector为数量单位将每一目标数据组划分为多 个数据段;
分组单元 103 , 用于基于预设分组规则依次对每一目标数据组中的数据段 进行 N次哈希 hash分组, 其中, 在每次 hash分组时, 基于第 1次 hash分组 计算所述数据段中的原始数据所得的用 bit位表示的 hash值, 将当前 hash分 组过程中指定 bit位上取值相同的 hash值所对应的原始数据划分在同一小组 内, 并对划分在同一小组内的各个原始数据,按照各个原始数据在所述目标数 据组中的位置在同一小组内进行排序并保存, N取大于或等于 1的正整数; 排序单元 104 , 用于对每一目标数据组经过 N次 hash分组后获得的小组, 在所述目标数据组中, 按照各个小组中所包含的原始数据对应的 hash值由小 至大对各个 d、组进行排序;
连接单元 105 , 用于按照排序依次取所述两个待连接的目标数据组中经过
N次 hash分组后获得的各个小组中的原始数据进行 Join操作。
其中, 所述分组单元 103包括: 由上至下对所述目标数据组中的数据段进 行第 1次 hash分组一次 hash分组模块 1031 ; 以及, 对上一次 hash分组后得 到的任意一小组中的原始数据进行第 2次至第 n次 hash分组的多次 hash分组 模块 1032, n取大于 2的正整数;
所述一次 hash分组模块 1031 , 用于计算当前所述数据段内包含的原始数 据的 hash值, 并用比特 bit位表示计算所得 hash值; 将位于指定 bit位上取值 相同的 hash值所对应的原始数据划分在同一小组内, 并对划分在同一小组内 的各个原始数据,按照各个原始数据在所述目标数据组中的位置在同一小组内 进行排序和保存;将每一个原始数据对应的 hash值中未被指定的 bit位与该原 始数据进行关联并保存;
所述多次 hash分组模块 1032, 用于基于当前小组内的原始数据所关联并 保存的上一次 hash分组中未被指定的 bit位, 将当前 hash分组过程中指定 bit 位上取值相同的 hash值所对应的各个原始数据划分在同一小组内, 并对划分 在同一小组内的各个原始数据,按照各个原始数据在所述目标数据组中的位置 在同一小组内进行排序和保存; 将每一个原始数据关联的剩余的未被指定的 bit位再次保存。
上述具体过程以及执行的原理可参见上述本发明实施例一和本发明实施 例二公开的内容, 这里不再进行赞述。 需要说明的是, 分组单元 103基于不同 的预设分组规则其所执行的内容也有所不同。
当所述预设分组规则是预设 hash分组次数 N时, 所述分组单元, 用于依 次对每一所述目标数据组中的数据段进行 hash分组,直至完成 N次 hash分组; 当所述预设分组规则是预设分组总数 S时,所述分组单元,用于依次对每 一所述目标数据组中的数据段进行 hash分组, 直至每一所述目标数据组的分 组数等于预设分组数; 当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级高于预设分组总数 S时, 所述分组单元, 用于依次 对每一所述目标数据组中的数据段进行 hash分组, 直至完成 N次 hash分组; 当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 分组总数 S的优先级高于预设 hash分组次数 N时, 所述分组单元, 用于依次 对每一所述目标数据组中的数据段进行 hash分组, 直至每一所述目标数据组 的分组数等于预设分组总数 S;
当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级和预设分组总数 S的优先级一致, 所述分组单元, 用于依次对每一所述目标数据组中的数据段进行 hash分组,直至完成 N次 hash 分组且每一所述目标数据组的分组数等于预设分组总数 S;
当所述预设分组规则包括预设 hash分组次数 N, 预设的每一次 hash分组 的分组数 m和预设分组总数 S时,所述分组单元,用于按照预设的每一次 hash 分组的分组数进行分组, 使得最后的分组次数等于预设 hash分组次数, 所分 的小组的总数等于预设分组总数;
其中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1的正整 数, N包含 n , m小于 N; S的取值由数据库緩存 cache的大小决定, 为大于 等于 2的正整数;所述预设 hash分组次数 N与预设分组总数 S的优先级由 TLB 的存储大小和 cache的大小决定。
上述分组单元 103 所对应的不同预设分组规则的示例可参见本发明实施 例三中给出的示例, 这里不再进行赞述。
需要说明的是, 上述图 8中示出的所述划分单元 102 , 其执行过程以及原 理与上述本发明实施例四中对应公开的 "以矢量 vector为数量单位将每一所述 目标数据组划分为多个数据段"说明部分相同, 这里不再进行赘述, 其主要包 括:
第一划分模块, 用于以矢量 vector为数量单位, 一个 vector对应一个数据 段, 顺序将每一目标数据组划分为 M个数据段, M的取值由所述目标数据组 内的原始数据的个数, 及数据库緩存 cache的大小和页表緩冲 TLB的存储大 小决定;
其中, 第 1至第 M-1个数据段中所包含的原始数据的个数相同, 第 M个 数据段中所包含的原始数据的个数小于或等于第 1至 M-1个数据段中所包含 的原始数据的个数。
需要说明的是,所述用于将位于指定 bit位上取值相同的 hash值所对应的 原始数据划分在同一小组内, 并对划分在同一小组内的各个原始数据,按照各 个原始数据在所述目标数据组中的位置,在同一小组内进行排序和保存的所述 一次 hash分组模块 1031 , 其具体执行过程以及原理可参见上述本发明实施例 三中公开的第 1次 hash详细说明部分, 这里不再进行赞述, 其主要包括: 位表示的 hash值;
第一查找子模块,用于查找位于当前 hash分组过程中指定 bit位上取值相 同的 hash值对应的各个原始数据, 将各个原始数据划分在同一小组内, 其中, 依据数据库緩存 cache的大小和页表緩冲 TLB的存储大小指定当前 hash分组 所需用到的 bit位;
第一遍历子模块, 用于遍历划分在同一小组内的各个原始数据的下标, 所 述各个原始数据的下标用于标识各个原始数据在所述目标数据组中的位置; 第一排列子模块, 用于按照各个下标的大小,从小至大排列各个下标对应 的原始数据;
第一排序子模块,用于依据所述从小至大的顺序将各个原始数据写入同一 小组内并保存。
需要说明的是, 所述基于当前小组内的原始数据所关联并保存的上一次 hash分组中未被指定的 bit位, 将当前 hash分组过程中指定 bit位上取值相同 的 hash值所对应的各个原始数据划分在同一小组内, 并对划分在同一小组内 的各个原始数据,按照各个原始数据在所述目标数据组中的位置在同一小组内 进行排序和保存的所述多次 hash分组模块 1032, 其具体执行过程以及原理可 参见上述本发明实施例一至实施例四中公开的多次 hash分组详细说明部分, 这里不再进行赘述, 其主要包括:
调用子模块, 用于调用当前进行 hash分组的小组内各个原始数据关联位 置处所保存的上一次 hash分组中未被指定的 bit位;
确定子模块,用于从调用的所述未被指定的 bit位中确定当前 hash分组过 程中所需用到的 bit位, 其中, 当前 hash分组过程中所需用到的 bit位依据数 据库緩存 cache的大小和页表緩冲 TLB的存储大小决定;
第二查找子模块,用于查找当前 hash分组过程中指定 bit位上取值相同的 hash值对应的各个原始数据, 将各个原始数据划分在同一小组内;
第二遍历子模块, 用于遍历划分在同一小组内的各个原始数据的下标, 所 述各个原始数据的下标用于标识各个原始数据在所述目标数据组中的位置; 第二排列子模块, 用于按照各个下标的大小,从小至大排列各个下标对应 的各个原始数据;
第二排序子模块,用于依据所述从小至大的顺序将各个原始数据写入同一 小组内并保存。
需要说明的是, 所述连接单元 105 , 其具体执行过程以及原理可参见上述 本发明实施例四中公开 Join操作的详细说明部分, 这里不再进行赘述, 其主 要包括:
获取模块, 用于按顺序分别获取所述待连接的两个目标数据组进行 N次 hash分组后的各个小组;
Join模块,用于两两小组为一对进行原始数据 Join操作的方式,对两个目 标数据组的各个小组中原始数据进行 Join操作;
其中, 所述 Join模块包括:
第三遍历子模块,用于由一目标数据组中的一小组顺序遍历另一目标数据 组中的各个小组; 若遍历到相同小组时, 执行第一 Join子模块; 若未遍历到 相同小组时, 则移动至下一小组返回所述第二遍历子模块; 直至所述目标数据 组中的所有小组对另一目标数据组中的各个小组都执行遍历操作;
所述第一 Join子模块, 用于将进行遍历的所述小组中的原始数据, 顺序 与所述相同小组内的原始数据进行 Join操作, 其中, 所述相同小组是指该小 组内存储的原始数据的 hash值与用于遍历的小组内存储的原始数据的 hash值 相同; 当所述小组中的原始数据都已进行执行 Join操作后, 移动至下一小组 返回所述第三遍历子模块。
本发明实施例五公开对应执行上述哈希连接方法的哈希连接装置,基于上 述公开的各个单元以及模块, 在对目标数据组执行 hash分组的过程中, 以一 个 vector为数量单位按组计算 hash值, 然后将同一个分组中所包含的若干个 原始数据对应的 hash值一次性写入对应的分组中。 以 vector的形式进行分组 则能够避免产生不必要的 cache thrashing, 从而实现减少了 cache miss, 提升 Join性能的目的。 并且, 仅在第 1次分组过程中计算各个原始数据的 hash值, 而将后续使用到的若干 bit位记录到对应的各个原始数据的关联位置处以备后 续分组过程中直接使用, 从而省去重复计算 hash值的代价, 避免了资源浪费。
同时, 在进行 hash分组的过程中, 在每一次 hash分组之后, 将原始数据 写入各个对应的小组内之前,对各个小组内的原始数据进行排序, 最终在各个 小组做最后的排序时, 仅需要对各个小组进行排序即可。 通过该种方式, 能够 实现大大的降低现有技术中在分组完成之后,再对各个小组内的原始数据以及 各个小组进行排序的复杂度, 减少因排序消耗的时间的目的。
结合本发明公开的实施例描述的哈希连接方法,在数据管理系统中可以直 接用硬件、 处理器执行的存储器, 或者二者的结合来实施。 因此, 本发明还对 应上述本发明实施例公开的方法和装置公开了一种数据管理系统。下面给出具 体的实施例进行详细说明。
如图 9所示, 该数据管理系统 1 包括存储器 11和通过总线 12与存储器 11连接的处理器 13。
该存储器 11具有存储介质, 该存储介质中存储有进行数据库查询时的程 序。
存储器 11可能包含高速 RAM存储器, 也可能还包括非易失性存储器, 例如至少一个磁盘存储器。
该处理器 13通过总线 13与存储器 11连接, 当执行数据库查询时, 该处 理器 13调用存储器 11中存储的数据库查询程序。上述数据库查询程序可以包 括程序代码, 所述程序代码包括一系列按照一定顺排列的操作指令。 处理器 13可能是一个中央处理器 CPU, 或者是特定集成电路, 或者是被配置成实施 本发明实施例的一个或多个集成电路。
处理器 13调用的进行数据调度的程序具体可以包括:
接收包含有连接 Join操作的结构化查询语言 SQL语句, 解析获取至少两 个待连接的目标数据组;
以矢量 vector为数量单位将每一目标数据组划分为多个数据段;
基于预设分组规则依次对每一目标数据组中的数据段进行 N次哈希 hash 分组, 其中, 在每次 hash分组时, 基于第 1次 hash分组计算所述数据段中的 原始数据所得的用 bit位表示的 hash值, 将当前 hash分组过程中指定 bit位上 取值相同的 hash值所对应的原始数据划分在同一小组内, 并对划分在同一小 组内的各个原始数据,按照各个原始数据在所述目标数据组中的位置在同一小 组内进行排序并保存, N取大于或等于 1的正整数;
对每一目标数据组经过 N次 hash分组后获得的小组, 在所述目标数据组 中, 按照各个小组中所包含的原始数据对应的 hash值由小至大的对各个小组 进行排序;
按照排序依次取所述两个待连接的目标数据组中经由 N次 hash分组后获 得的各个小组中的原始数据进行 Join操作。
综上所述:
本发明实施例公开通过以 vector 为数量单位以及在后续分组过程中利用 前一次 hash分组过程中未被指定 bit位继续执行 hash分组, 能够实现同时对 若干原始数据进行 hash分组处理, 且在多次 hash分组的过程中不需要重复计 算原始数据的 hash值,即减少了 cache miss緩存缺失,也省去了重复计算 hash 值避免了计算资源的浪费。 同时, 在进行分组的过程中, 按照所述原始数据在 目标数据组中的位置,对划分在同一小组中的原始数据进行排序, 实现降低后 续对各个分组进行排序的复杂度的目的。并且每次分组划分至每个小组中的原 始数据有序,这样完成多个数据段分组后得到的每个小组中的原始数据局部有 序,在对局部有序的原始数据进行 join时,其排序复杂度低于随机分配的原始 数据进行 join时的排序复杂度。
本说明书中各个实施例釆用递进的方式描述,每个实施例重点说明的都是 与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于 实施例公开的装置而言, 由于其与实施例公开的方法相对应, 所以描述的比较 简单,相关之处参见方法部分说明即可。 结合本文中所公开的实施例描述的方 法或算法的步骤可以直接用硬件、处理器执行的软件模块, 或者二者的结合来 实施。 软件模块可以置于随机存储器(RAM )、 内存、 只读存储器 (ROM )、 电可编程 ROM、电可擦除可编程 ROM、寄存器、硬盘、可移动磁盘、 CD-ROM, 或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本 发明。 对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见 的。

Claims (12)

  1. 权 利 要 求
    1、 一种哈希连接方法, 其特征在于, 应用于数据库, 包括:
    接收包含有连接 Join操作的结构化查询语言 SQL语句, 解析获取至少两 个待连接的目标数据组;
    以矢量 vector为数量单位将每一目标数据组划分为多个数据段;
    基于预设分组规则依次对每一目标数据组中的数据段进行 N次哈希 hash 分组, 其中, 在每次 hash分组时, 基于第 1次 hash分组计算所述数据段中的 原始数据所得的用 bit位表示的 hash值, 将当前 hash分组过程中指定 bit位上 取值相同的 hash值所对应的原始数据划分在同一小组内, 并对划分在同一小 组内的各个原始数据,按照各个原始数据在所述目标数据组中的位置在同一小 组内进行排序并保存, N取大于或等于 1的正整数;
    对每一目标数据组经过 N次 hash分组后获得的小组, 在所述目标数据组 中, 按照各个小组中所包含的原始数据对应的 hash值由小至大的对各个小组 进行排序;
    按照排序依次取所述两个待连接的目标数据组中经由 N次 hash分组后获 得的各个小组中的原始数据进行 Join操作。
  2. 2、 根据权利要求 1所述的方法, 其特征在于, 所述基于预设分组规则依 次对每一目标数据组中的数据段进行 N次 hash分组中的第 1次 hash分组包括: 计算当前所述数据段内包含的原始数据的 hash值,并用 bit位表示计算所 得 hash值;
    将位于指定 bit位上取值相同的 hash值所对应的原始数据划分在同一小组 内, 并对划分在同一小组内的各个原始数据,按照各个原始数据在所述目标数 据组中的位置在同一小组内进行排序和保存;
    将每一个原始数据对应的 hash值中未被指定的 bit位与该原始数据进行关 联, 并保存;
    所述基于预设分组规则依次对每一目标数据组中的数据段进行 N次 hash 分组中的第 2次至第 n次 hash分组包括:
    对上一次 hash分组后得到的任意一小组中的原始数据进行 hash分组, n 包含于 N, 取大于 2的正整数包括:
    基于当前小组内的原始数据所关联并保存的上一次 hash分组中未被指定 的 bit位, 将当前 hash分组过程中指定 bit位上取值相同的 hash值所对应的各 个原始数据划分在同一小组内, 并对划分在同一小组内的各个原始数据,按照 各个原始数据在所述目标数据组中的位置在同一小组内进行排序和保存;
    将每一个原始数据关联的剩余的未被指定的 bit位再次保存。
    3、 根据权利要求 1或 2所述的方法, 其特征在于, 所述预设分组规则包 括: 预设 hash分组次数 N, 或者预设分组总数 S , 或者预设 hash分组次数 N 和预设分组总数 S;
    当所述预设分组规则是预设 hash分组次数 N时, 依次对每一所述目标数 据中的数据段进行 hash分组, 直至完成 N次 hash分组;
    当所述预设分组规则是预设分组总数 S时,依次对每一所述目标数据组中 的数据段进行 hash分组,直至每一所述目标数据组的分组数等于预设分组数; 当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级高于预设分组总数 S时, 依次对每一所述目标数据 组中的数据段进行 hash分组, 直至完成 N次 hash分组;
    当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 分组总数 S的优先级高于预设 hash分组次数 N时, 依次对每一所述目标数据 组中的数据段进行 hash分组, 直至每一所述目标数据组的分组数等于预设分 组总数 S;
    当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级和预设分组总数 S的优先级一致, 依次对每一所述 目标数据组中的数据段进行 hash分组,直至完成 N次 hash分组且每一所述目 标数据组的分组数等于预设分组总数 S;
    其中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1的正整 数, N包含 n; S的取值由数据库緩存 cache的大小决定, 为大于等于 2的正 整数;
    所述预设 hash分组次数 N与预设分组总数 S的优先级由 TLB的存储大小 和 cache的大小决定。
    4、 根据权利要求 1或 2所述的方法, 其特征在于, 所述预设分组规则包 括: 预设 hash分组次数 N, 预设的每一次 hash分组的分组数 m和预设分组总 数 S; 其中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1的正 整数, m小于 N; S的取值由数据库緩存 cache的大小决定, 为大于等于 2的 正整数;
    所述依次对每一所述目标数据中的数据段进行 hash分组时, 按照预设的 每一次 hash分组的分组数进行分组, 使得最后的分组次数等于预设 hash分组 次数, 所分的小组的总数等于预设分组总数。
  3. 5、 根据权利要求 1~4中任意一项所述的方法, 其特征在于, 所述以矢量 vector为数量单位将每一目标数据组划分为多个数据段包括:
    以矢量 vector为数量单位, 一个 vector对应一个数据段, 顺序将每一目标 数据组划分为 M个数据段, M的取值由所述目标数据组内的原始数据的个数, 及数据库緩存 cache的大小和页表緩冲 TLB的存储大小决定;
    其中, 第 1至第 M-1个数据段中所包含的原始数据的个数相同, 第 M个 数据段中所包含的原始数据的个数小于或等于第 1至 M-1个数据段中所包含 的原始数据的个数。
  4. 6、 根据权利要求 2~4中任意一项所述的方法, 其特征在于, 将位于指定 bit位上取值相同的 hash值所对应的各个原始数据划分在同一小组内, 并对划 分在同一小组内的各个原始数据,按照各个原始数据在所述目标数据组中的位 置在同一小组内进行排序和保存包括: 查找位于当前 hash分组过程中指定 bit位上取值相同的 hash值对应的各 个原始数据,将各个原始数据划分在同一小组内,其中,依据数据库緩存 cache 的大小和页表緩冲 TLB的存储大小指定当前 hash分组所需用到的 bit位; 遍历划分在同一小组内的各个原始数据的下标,所述各个原始数据的下标 用于标识各个原始数据在所述目标数据组中的位置;
    按照各个下标的大小, 从小至大排列各个下标对应的原始数据;
    依据所述从小至大的顺序将各个原始数据写入同一小组内并保存。
  5. 7、 根据权利要求 2~4中任意一项所述的方法, 其特征在于, 基于当前小 组内的原始数据所关联并保存的上一次 hash分组中未被指定的 bit位,将当前 hash分组过程中指定 bit位上取值相同的 hash值所对应的各个原始数据划分在 同一小组内, 并对划分在同一小组内的各个原始数据,按照各个原始数据在所 述目标数据组中的位置在同一小组内进行排序和保存包括: 调用当前进行 hash分组的小组内各个原始数据关联位置处所保存的上一 次 hash分组中未被指定的 bit位;
    从调用的所述未被指定的 bit位中确定当前 hash分组过程中所需用到的 bit位, 其中, 当前 hash分组过程中所需用到的 bit位依据数据库緩存 cache 的大小和页表緩冲 TLB的存储大小决定;
    查找位于当前 hash分组过程中指定 bit位上取值相同的 hash值对应的各 个原始数据, 将各个原始数据划分在同一小组内;
    遍历划分在同一小组内的各个原始数据的下标,所述各个原始数据的下标 用于标识各个原始数据在所述目标数据组中的位置;
    按照各个下标的大小, 从小至大排列各个下标对应的原始数据;
    依据所述从小至大的顺序将各个原始数据写入同一小组内并保存。
  6. 8、 根据权利要求 1~7中任意一项所述的方法, 其特征在于, 所述按照排 序依次取所述两个待连接的目标数据组中经由 N次 hash分组后获得的各个小 组中的原始数据进行 Join操作包括:
    按顺序分别获取所述待连接的两个目标数据组进行 N次 hash分组后的各 个小组;
    两两小组为一对进行原始数据 Join操作的方式, 对两个目标数据组的各 个小组中原始数据进行 Join操作;
    所述两两小组为一对进行原始数据 Join操作的方式包括:
    由一目标数据组中的一小组顺序遍历另一目标数据组中的各个小组; 若遍历到相同小组时,将所述小组中的原始数据, 顺序与所述相同小组内 的原始数据进行 Join操作, 其中, 所述相同小组是指该小组内存储的原始数 据的 hash值与用于遍历的小组内存储的原始数据的 hash值相同;
    当所述小组中的原始数据都已进行执行 Join操作后, 移动至下一小组返 回执行顺序遍历另一目标数据组中的各个小组这一步骤;
    若未遍历到相同小组时,则移动至下一小组返回执行顺序遍历另一目标数 据中的各个小组这一步骤;
    直至所述目标数据组中的所有小组对另一目标数据组中的各个小组都执 行遍历操作。
  7. 9、 一种哈希连接装置, 其特征在于, 应用于数据库, 包括: 接收单元, 用于接收包含有连接 Join操作的结构化查询语言 SQL语句, 解析获取至少两个待连接的目标数据组;
    划分单元,用于以矢量 vector为数量单位将每一目标数据组划分为多个数 据段;
    分组单元,用于基于预设分组规则依次对每一目标数据组中的数据段进行
    N次哈希 hash分组, 其中, 在每次 hash分组时, 基于第 1次 hash分组计算所 述数据段中的原始数据所得的用 bit位表示的 hash值, 将当前 hash分组过程 中指定 bit位上取值相同的 hash值所对应的原始数据划分在同一小组内,并对 划分在同一小组内的各个原始数据,按照各个原始数据在所述目标数据组中的 位置在同一小组内进行排序并保存, N取大于或等于 1的正整数;
    排序单元, 用于对每一目标数据组经过 N次 hash分组后获得的小组, 在 所述目标数据组中, 按照各个小组中所包含的原始数据对应的 hash值由小至 大对各个小组进行排序;
    连接单元, 用于按照排序依次取所述两个待连接的目标数据组中经由 N 次 hash分组后获得的各个小组中的原始数据进行 Join操作。
    10、 根据权利要求 9所述的装置, 其特征在于, 所述分组单元包括: 每一 目标数据组中的数据段进行第 1次 hash分组的一次 hash分组模块; 以及, 对 上一次 hash分组后得到的任意一小组中的原始数据进行第 2次至第 n次 hash 分组的多次 hash分组模块, n包含于 N, 取大于 2的正整数;
    所述一次 hash分组模块, 用于计算当前所述数据段内包含的原始数据的 hash值,并用 bit位表示计算所得 hash值;将位于指定 bit位上取值相同的 hash 值所对应的原始数据划分在同一小组内,并对划分在同一小组内的各个原始数 据,按照各个原始数据在所述目标数据组中的位置在同一小组内进行排序和保 存;将每一个原始数据对应的 hash值中未被指定的 bit位与该原始数据进行关 联并保存;
    所述多次 hash分组模块, 用于基于当前小组内的原始数据所关联并保存 的上一次 hash分组中未被指定的 bit位, 将当前 hash分组过程中指定 bit位上 取值相同的 hash值所对应的各个原始数据划分在同一小组内, 并对划分在同 一小组内的各个原始数据,按照各个原始数据在所述目标数据组中的位置在同 一小组内进行排序和保存; 将每一个原始数据关联的剩余的未被指定的 bit位 再次保存。
  8. 11、 根据权利要求 9或 10所述的装置, 其特征在于, 包括:
    当所述预设分组规则是预设 hash分组次数 N时, 所述分组单元, 用于依 次对每一所述目标数据组中的数据段进行 hash分组,直至完成 N次 hash分组; 当所述预设分组规则是预设分组总数 S时 ,所述分组单元 ,用于依次对每 一所述目标数据组中的数据段进行 hash分组, 直至每一所述目标数据组的分 组数等于预设分组数;
    当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级高于预设分组总数 S时, 所述分组单元, 用于依次 对每一所述目标数据组中的数据段进行 hash分组, 直至完成 N次 hash分组; 当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 分组总数 S的优先级高于预设 hash分组次数 N时, 所述分组单元, 用于依次 对每一所述目标数据组中的数据段进行 hash分组, 直至每一所述目标数据组 的分组数等于预设分组总数 S;
    当所述预设分组规则是预设 hash分组次数 N和预设分组总数 S, 且预设 hash分组次数 N的优先级和预设分组总数 S的优先级一致, 所述分组单元, 用于依次对每一所述目标数据组中的数据段进行 hash分组,直至完成 N次 hash 分组且每一所述目标数据组的分组数等于预设分组总数 S;
    其中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1的正整 数, N包含 n; S的取值由数据库緩存 cache的大小决定, 为大于等于 2的正 整数;所述预设 hash分组次数 N与预设分组总数 S的优先级由 TLB的存储大 小和 cache的大小决定。
  9. 12、 根据权利要求 9或 10所述的装置, 其特征在于, 包括:
    当所述预设分组规则包括预设 hash分组次数 N, 预设的每一次 hash分组 的分组数 m和预设分组总数 S时,所述分组单元,用于按照预设的每一次 hash 分组的分组数进行分组, 使得最后的分组次数等于预设 hash分组次数, 所分 的小组的总数等于预设分组总数;
    其中, N的取值由页表緩冲 TLB的存储大小决定, 为大于等于 1的正整 数, m小于 N; S的取值由数据库緩存 cache的大小决定, 为大于等于 2的正 整数。 13、 根据权利要求 9~12中任意一项所述的装置, 其特征在于, 所述划分 单元包括:
    第一划分模块, 用于以矢量 vector为数量单位, 一个 vector对应一个数据 段, 顺序将每一目标数据组划分为 M个数据段, M的取值由所述目标数据组 内的原始数据的个数, 及数据库緩存 cache的大小和页表緩冲 TLB的存储大 小决定;
    其中, 第 1至第 M-1个数据段中所包含的原始数据的个数相同, 第 M个 数据段中所包含的原始数据的个数小于或等于第 1至 M-1个数据段中所包含 的原始数据的个数。
  10. 14、根据权利要求 10~12任意一项所述的装置, 其特征在于, 所述用于将 位于指定 bit位上取值相同的 hash值所对应的原始数据划分在同一小组内,并 对划分在同一小组内的各个原始数据,按照各个原始数据在所述目标数据组中 的位置在同一小组内进行排序和保存的所述一次 hash分组模块包括: 位表示的 hash值;
    第一查找子模块,用于查找位于当前 hash分组过程中指定 bit位上取值相 同的 hash值对应的各个原始数据, 将各个原始数据划分在同一小组内, 其中, 依据数据库緩存 cache的大小和页表緩冲 TLB的存储大小指定当前 hash分组 所需用到的 bit位;
    第一遍历子模块, 用于遍历划分在同一小组内的各个原始数据的下标, 所 述各个原始数据的下标用于标识各个原始数据在所述目标数据组中的位置; 第一排列子模块, 用于按照各个下标的大小,从小至大排列各个下标对应 的原始数据;
    第一排序子模块,用于依据所述从小至大的顺序将各个原始数据写入同一 小组内并保存。
  11. 15、根据权利要求 10~12任意一项所述的装置, 其特征在于, 所述基于当 前小组内的原始数据所关联并保存的上一次 hash分组中未被指定的 bit位,将 划分在同一小组内, 并对划分在同一小组内的各个原始数据,按照各个原始数 据在所述目标数据组中的位置在同一小组内进行排序和保存的所述多次 hash 分组模块包括:
    调用子模块, 用于调用当前进行 hash分组的小组内各个原始数据关联位 置处所保存的上一次 hash分组中未被指定的 bit位;
    确定子模块,用于从调用的所述未被指定的 bit位中确定当前 hash分组过 程中所需用到的 bit位, 其中, 当前 hash分组过程中所需用到的 bit位依据数 据库緩存 cache的大小和页表緩冲 TLB的存储大小决定;
    第二查找子模块,用于查找当前 hash分组过程中指定 bit位上取值相同的 hash值对应的各个原始数据, 将各个原始数据划分在同一小组内;
    第二遍历子模块, 用于遍历划分在同一小组内的各个原始数据的下标, 所 述各个原始数据的下标用于标识各个原始数据在所述目标数据组中的位置; 第二排列子模块, 用于按照各个下标的大小,从小至大排列各个下标对应 的原始数据;
    第二排序子模块,用于依据所述从小至大的顺序将各个原始数据写入同一 小组内并保存。
  12. 16、 根据权利要求 9~15中任意一项所述的装置, 其特征在于, 所述连接 单元包括:
    获取模块, 用于按顺序分别获取所述待连接的两个目标数据组进行 N次 hash分组后的各个小组;
    Join模块,用于两两小组为一对进行原始数据 Join操作的方式,对两个目 标数据组的各个小组中原始数据进行 Join操作;
    其中, 所述 Join模块包括:
    第三遍历子模块,用于由一目标数据组中的一小组顺序遍历另一目标数据 组中的各个小组; 若遍历到相同小组时, 执行第一 Join子模块; 若未遍历到 相同小组时, 则移动至下一小组返回所述第二遍历子模块; 直至所述目标数据 组中的所有小组对另一目标数据组中的各个小组都执行遍历操作;
    所述第一 Join子模块, 用于将进行遍历的所述小组中的原始数据, 顺序 与所述相同小组内的原始数据进行 Join操作, 其中, 所述相同小组是指该小 组内存储的原始数据的 hash值与用于遍历的小组内存储的原始数据的 hash值 相同; 当所述小组中的原始数据都已进行执行 Join操作后, 移动至下一小组 返回所述第三遍历子模块。 17、 一种数据库管理系统, 其特征在于, 应用于数据库, 包括: 具有存储介质的存储器, 所述存储器中存储有进行数据库查询时的程序; 通过总线与所述存储器连接的处理器, 当执行数据库查询时, 所述处理器调用 所述存储器中存储的数据库查询程序,并依据权利要求 1~8中任意一项所述的 方法执行所述数据库查询程序。
CN201480037464.8A 2014-05-23 2014-05-23 哈希连接方法和装置 Active CN105359142B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/078304 WO2015176315A1 (zh) 2014-05-23 2014-05-23 哈希连接方法、装置和数据库管理系统

Publications (2)

Publication Number Publication Date
CN105359142A true CN105359142A (zh) 2016-02-24
CN105359142B CN105359142B (zh) 2019-04-05

Family

ID=54553263

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480037464.8A Active CN105359142B (zh) 2014-05-23 2014-05-23 哈希连接方法和装置

Country Status (2)

Country Link
CN (1) CN105359142B (zh)
WO (1) WO2015176315A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326475A (zh) * 2016-08-31 2017-01-11 中国科学院信息工程研究所 一种高效的静态哈希表实现方法及系统
CN108549666A (zh) * 2018-03-22 2018-09-18 上海达梦数据库有限公司 一种数据表的排序方法、装置、设备及存储介质

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11010387B2 (en) 2017-10-06 2021-05-18 Microsoft Technology Licensing, Llc Join operation and interface for wildcards
CN111125011B (zh) * 2019-12-20 2024-02-23 深信服科技股份有限公司 一种文件处理方法、系统及相关设备
CN111026720B (zh) * 2019-12-20 2023-05-12 深信服科技股份有限公司 一种文件处理方法、系统及相关设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080162410A1 (en) * 2006-12-27 2008-07-03 Motorola, Inc. Method and apparatus for augmenting the dynamic hash table with home subscriber server functionality for peer-to-peer communications
CN101593202A (zh) * 2009-01-14 2009-12-02 中国人民解放军国防科学技术大学 基于共享Cache多核处理器的数据库哈希连接方法
CN102508924A (zh) * 2011-11-22 2012-06-20 上海达梦数据库有限公司 一种使用归并连接实现优美哈希连接的方法
US20130173589A1 (en) * 2011-12-29 2013-07-04 Yu Xu Techniques for optimizing outer joins

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080162410A1 (en) * 2006-12-27 2008-07-03 Motorola, Inc. Method and apparatus for augmenting the dynamic hash table with home subscriber server functionality for peer-to-peer communications
CN101593202A (zh) * 2009-01-14 2009-12-02 中国人民解放军国防科学技术大学 基于共享Cache多核处理器的数据库哈希连接方法
CN102508924A (zh) * 2011-11-22 2012-06-20 上海达梦数据库有限公司 一种使用归并连接实现优美哈希连接的方法
US20130173589A1 (en) * 2011-12-29 2013-07-04 Yu Xu Techniques for optimizing outer joins

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326475A (zh) * 2016-08-31 2017-01-11 中国科学院信息工程研究所 一种高效的静态哈希表实现方法及系统
CN108549666A (zh) * 2018-03-22 2018-09-18 上海达梦数据库有限公司 一种数据表的排序方法、装置、设备及存储介质

Also Published As

Publication number Publication date
WO2015176315A1 (zh) 2015-11-26
CN105359142B (zh) 2019-04-05

Similar Documents

Publication Publication Date Title
EP2885728B1 (en) Hardware implementation of the aggregation/group by operation: hash-table method
CN103577440B (zh) 一种非关系型数据库中的数据处理方法和装置
CN105117417B (zh) 一种读优化的内存数据库Trie树索引方法
CN104361113B (zh) 一种内存‑闪存混合存储模式下的olap查询优化方法
CN105359142A (zh) 哈希连接方法、装置和数据库管理系统
CN109948774A (zh) 基于网络层捆绑运算的神经网络加速器及其实现方法
CN104636349B (zh) 一种索引数据压缩以及索引数据搜索的方法和设备
CN106294815B (zh) 一种url的聚类方法及装置
US20110179013A1 (en) Search Log Online Analytic Processing
WO2023143095A1 (en) Method and system for data query
CN102867049A (zh) 一种基于单词查找树实现的汉语拼音快速分词方法
CN106802787B (zh) 基于GPU排序的MapReduce优化方法
US7725448B2 (en) Method and system for disjunctive single index access
US10078521B2 (en) Hybrid bit-sliced dictionary encoding for fast index-based operations
CN110008030A (zh) 一种元数据访问的方法、系统及设备
CN106844541A (zh) 一种联机分析处理方法及装置
WO2022007596A1 (zh) 图像检索系统、方法和装置
CN108549666A (zh) 一种数据表的排序方法、装置、设备及存储介质
CN103902693B (zh) 一种读优化的内存数据库t树索引结构的方法
CN111126619B (zh) 一种机器学习方法与装置
CN104794237B (zh) 网页信息处理方法及装置
WO2015143708A1 (zh) 后缀数组的构造方法及装置
CN114925067A (zh) 数据处理方法、装置、设备和存储介质
CN106897450A (zh) 一种基于HDFS海量数据快速导入HBase的方法
CN102968467A (zh) 一种多层Bloom Filter的优化方法及查询方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant