CN105183880A - 一种哈希连接的方法及装置 - Google Patents

一种哈希连接的方法及装置 Download PDF

Info

Publication number
CN105183880A
CN105183880A CN201510607574.XA CN201510607574A CN105183880A CN 105183880 A CN105183880 A CN 105183880A CN 201510607574 A CN201510607574 A CN 201510607574A CN 105183880 A CN105183880 A CN 105183880A
Authority
CN
China
Prior art keywords
data
hash
internal memory
subregion
cryptographic hash
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.)
Pending
Application number
CN201510607574.XA
Other languages
English (en)
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.)
Inspur Group Co Ltd
Original Assignee
Inspur Group 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 Inspur Group Co Ltd filed Critical Inspur Group Co Ltd
Priority to CN201510607574.XA priority Critical patent/CN105183880A/zh
Publication of CN105183880A publication Critical patent/CN105183880A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24557Efficient disk access during query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • G06F16/2456Join operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种哈希连接的方法及装置,该方法包括:S1:获取待操作的第一表中待操作的第一数据和待操作的第二表中待操作的第二数据;S2:计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的分区号;S3:将对应相同分区号的数据读入到内存的同一个分区中;S4:分别将同一个分区中的第一数据和第二数据进行哈希连接hash?join操作。本发明提供了一种哈希连接的方法及装置,能够提高join效率。

Description

一种哈希连接的方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种哈希连接的方法及装置。
背景技术
Spark是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速。Spark非常小巧玲珑,由加州伯克利大学AMP实验室的Matei为主的小团队所开发。使用的语言是Scala,虽然Spark与Hadoop有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。
在hadoop发展过程中,为了给熟悉RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)但又不理解MapReduce的技术人员提供快速上手的工具,hive应运而生,是当时唯一运行在hadoop上的SQL-on-Hadoop工具。但是,MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低的运行效率,为了提高SQL-on-Hadoop的效率,大量的SQL-on-Hadoop工具开始产生,MapR的Drill、Cloudera的Impala、Shark都是在这一背景下产生的工具,其中Shark是伯克利实验室spark生态环境的组件之一,它修改了下图所示的右下角的内存管理、物理计划、执行三个模块,并使之能运行在spark引擎上,从而使得SQL查询的速度得到10-100倍的提升。
随着Spark的发展,Shark对于hive的太多依赖(如采用hive的语法解析器、查询优化器等等),制约了spark各个组件的相互集成,所以提出了sparkSQL项目。SparkSQL抛弃原有Shark的代码,汲取了Shark的一些优点,如内存列存储(In-MemoryColumnarStorage)、Hive兼容性等,重新开发了SparkSQL代码,由于摆脱了对hive的依赖性,SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便。
Hive中join操作主要有mapjoin和reducejoin组成,这两种join操作均使用的是mapreduce的计算架构,sparksql上的join操作针对mapreduce架构内存利用不足的问题提出了自己的计算模型。现有的hashjoin(哈希连接)操作中,将整个需要实现join操作的数据表存储到内存中进行hashjoin,无法利用现有空闲的内存,只能利用较大的内存进行处理,join效率较低。
发明内容
有鉴于此,本发明提供了一种哈希连接的方法及装置,能够提高join效率。
一方面,本发明提供了一种哈希连接的方法,包括:
S1:获取待操作的第一表中待操作的第一数据和待操作的第二表中待操作的第二数据;
S2:计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的分区号;
S3:将对应相同分区号的数据读入到内存的同一个分区中;
S4:分别将同一个分区中的第一数据和第二数据进行哈希连接hashjoin操作。
进一步地,该方法还包括:
实时检测所述内存的剩余量是否小于等于预设值,如果是,则将所述内存的任一分区中的未进行hashjoin操作的第一数据和/或第二数据移出内存,否则,将从内存中移出的未进行hashjoin操作的数据读入到所述内存中。
进一步地,所述S2中,所述根据每个第一数据的哈希值,确定每个第一数据对应的分区号,包括:
根据公式一确定每个第一数据对应的分区号,其中,公式一为:
num1=|a|modlength;
其中,num1是第一数据对应的分区号,a为第一数据的哈希值,length为预设的内存中分区的数量;
所述S2中,所述根据每个第二数据的哈希值,确定每个第二数据对应的分区号,包括:
根据公式二确定每个第二数据对应的分区号,其中,公式二为:
num2=|b|modlength;
其中,num2是第二数据对应的分区号,b为第二数据的哈希值,length为预设的内存中分区的数量。
进一步地,在所述S1之前,还包括:
D1:分别在存储所述第一表的第一磁盘中和存储所述第二表的第二磁盘中,划分出哈希桶,为每个哈希桶分配哈希桶号;
D2:计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的哈希桶号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的哈希桶号;
D3:根据每个第一数据对应的哈希桶号,将每个第一数据存储在所述第一磁盘中的具有相同哈希桶号的哈希桶中,并根据每个第二数据对应的哈希桶号,将每个第二数据存储在所述第二磁盘中的具有相同哈希桶号的哈希桶中;
所述S1,包括:
分别从第一磁盘和第二磁盘中的具有相同哈希桶号的哈希桶中获取所述第一数据和所述第二数据。
进一步地,所述S4,包括:
为每个分区分配hashjoin操作线程,通过每个分区对应的所述hashjoin操作线程,将每个分区中的第一数据和第二数据进行hashjoin操作。
另一方面,本发明提供了一种哈希连接的装置,包括:
获取单元,用于获取待操作的第一表中待操作的第一数据和待操作的第二表中待操作的第二数据;
分区号确定单元,用于计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的分区号;
读入单元,用于将对应相同分区号的数据读入到内存的同一个分区中;
操作单元,用于分别将同一个分区中的第一数据和第二数据进行哈希连接hashjoin操作。
进一步地,该装置还包括:
检测单元,用于实时检测所述内存的剩余量是否小于等于预设值,如果是,则将所述内存的任一分区中的未进行hashjoin操作的第一数据和/或第二数据移出内存,否则,将从内存中移出的未进行hashjoin操作的数据读入到所述内存中。
进一步地,所述分区号确定单元,在执行所述根据每个第一数据的哈希值,确定每个第一数据对应的分区号时,具体执行:根据公式一确定每个第一数据对应的分区号,其中,公式一为:
num1=|a|modlength;
其中,num1是第一数据对应的分区号,a为第一数据的哈希值,length为预设的内存中分区的数量;
所述分区号确定单元,在执行根据每个第二数据的哈希值,确定每个第二数据对应的分区号时,具体执行:
根据公式二确定每个第二数据对应的分区号,其中,公式二为:
num2=|b|modlength;
其中,num2是第二数据对应的分区号,b为第二数据的哈希值,length为预设的内存中分区的数量。
进一步地,该装置还包括:
分桶单元,用于分别在存储所述第一表的第一磁盘中和存储所述第二表的第二磁盘中,划分出哈希桶,为每个哈希桶分配哈希桶号;
桶号确定单元,用于计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的哈希桶号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的哈希桶号;
存储单元,用于根据每个第一数据对应的哈希桶号,将每个第一数据存储在所述第一磁盘中的具有相同哈希桶号的哈希桶中,并根据每个第二数据对应的哈希桶号,将每个第二数据存储在所述第二磁盘中的具有相同哈希桶号的哈希桶中;
所述获取单元,用于分别从第一磁盘和第二磁盘中的具有相同哈希桶号的哈希桶中获取所述第一数据和所述第二数据。
进一步地,所述操作单元,用于为每个分区分配hashjoin操作线程,通过每个分区对应的所述hashjoin操作线程,将每个分区中的第一数据和第二数据进行hashjoin操作。
本发明提供的一种哈希连接的方法及装置,将待操作的数据按照哈希值分区存储到内存中,在内存中分别对同一个分区中的数据进行hashjoin操作,无需对整个待操作的表格进行操作,无需将整个待操作的表存储到内存中即可实现hashjoin操作,可以利用小块的空闲内存进行处理,提高了内存的利用率,进而提高了join效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种哈希连接的方法的流程图;
图2是本发明一实施例提供的另一种哈希连接的方法的流程图;
图3是本发明一实施例提供的一种从磁盘向内存读入数据的示意图;
图4是本发明一实施例提供的一种将内存中的数据移出到磁盘的示意图;
图5是本发明一实施例提供的另一种将内存中的数据移出到磁盘的示意图;
图6是本发明一实施例提供的一种将从内存中移出的数据读入到内存的示意图;
图7是本发明一实施例提供的一种哈希连接的装置的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种哈希连接的方法,该方法可以包括以下步骤:
S1:获取待操作的第一表中待操作的第一数据和待操作的第二表中待操作的第二数据;
S2:计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的分区号;
S3:将对应相同分区号的数据读入到内存的同一个分区中;
S4:分别将同一个分区中的第一数据和第二数据进行哈希连接hashjoin操作。
通过本发明实施例提供的一种哈希连接的方法,将待操作的数据按照哈希值分区存储到内存中,在内存中分别对同一个分区中的数据进行hashjoin操作,无需对整个待操作的表格进行操作,无需将整个待操作的表存储到内存中即可实现hashjoin操作,可以利用小块的空闲内存进行处理,提高了内存的利用率,进而提高了join效率。
在进行hashjoin操作的过程中,可能由于内存中的数据过多造成内存不足,这样就需要从内存中移出部分数据,当有足够的空闲内存时,在将移出的数据读入内存进行处理。在一种可能的实现方式中,该方法,还包括:
实时检测所述内存的剩余量是否小于等于预设值,如果是,则将所述内存的任一分区中的未进行hashjoin操作的第一数据和/或第二数据移出内存,否则,将从内存中移出的未进行hashjoin操作的数据读入到所述内存中。
现有技术中在内存不足时,需要将全部的待操作的数据移出内存,内存的利用率较低,通过本实现方式,将某一分区中的数据移出即可,其他分区可以继续进行hashjoin操作,充分利用了空闲的内存,提高了内存利用率。
在一种可能的实现方式中,所述S2中,所述根据每个第一数据的哈希值,确定每个第一数据对应的分区号,包括:
根据公式一确定每个第一数据对应的分区号,其中,公式一为:
num1=|a|modlength;
其中,num1是第一数据对应的分区号,a为第一数据的哈希值,length为预设的内存中分区的数量;
所述S2中,所述根据每个第二数据的哈希值,确定每个第二数据对应的分区号,包括:
根据公式二确定每个第二数据对应的分区号,其中,公式二为:
num2=|b|modlength;
其中,num2是第二数据对应的分区号,b为第二数据的哈希值,length为预设的内存中分区的数量。
通过该实现方式,通过第一数据的哈希值的绝对值对length取模运算,得到第一数据对应的分区号,通过第二数据的哈希值的绝对值对length取模运算,得到第二数据对应的分区号,可以保证相同的数据存储在同一个分区中。
另外,在计算机语言中,可以通过o.hashCode()函数计算每个数据的哈希值,可以通过以下公式来确定分区号:
num=(o.hashCode()&0x7FFFFFFF)%length,
其中,num是分区号,o.hashCode()为用于计算每个第一数据和每个第二数据的哈希值的函数,输出每个第一数据和每个第二数据的哈希值,length为预设的内存中分区的数量。
为了加快hashjoin操作的速度,可以在磁盘中将待操作的数据按照哈希值分桶存储。在一种可能的实现方式中,在所述S1之前,还包括:
D1:分别在存储所述第一表的第一磁盘中和存储所述第二表的第二磁盘中,划分出哈希桶,为每个哈希桶分配哈希桶号;
D2:计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的哈希桶号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的哈希桶号;
D3:根据每个第一数据对应的哈希桶号,将每个第一数据存储在所述第一磁盘中的具有相同哈希桶号的哈希桶中,并根据每个第二数据对应的哈希桶号,将每个第二数据存储在所述第二磁盘中的具有相同哈希桶号的哈希桶中;
所述S1,包括:
分别从第一磁盘和第二磁盘中的具有相同哈希桶号的哈希桶中获取所述第一数据和所述第二数据。
在获取向内存中存储的数据时,获取具有相同哈希桶号的数据,举例来说,在第一磁盘中哈希桶号为2的哈希桶与在第二磁盘中哈希桶号为2的哈希桶,获取这两个桶中的数据进行分成存储,只对桶号相同的第一数据和第二数据进行处理,这样缩小了数据处理的范围,提高了hashjoin操作的效率。
所述D2,包括:将每个第一数据的哈希值以第一磁盘中哈希桶的数量取模,得到每个第一数据对应的哈希桶号;将每个第二数据的哈希值以第二磁盘中哈希桶的数量取模,得到每个第二数据对应的哈希桶号。
在为每个哈希桶分配哈希桶号时,可以根据每个磁盘中哈希桶的数量进行分配。举例来说,共有n个哈希桶,可以将0,1,…,n-1作为哈希桶号,其中,哈希桶号均为整数。通过本发明实施例提供的方式,可以将第一数据和第二数据分别分配对应的哈希桶号。通过该方式可以使得相同的数据存储在同一个分区中,使得后续的hashjoin操作能够更加准确,能够输出所有第一数据和所有第二数据中相匹配的数据。
为了提高hashjoin操作的速度,可以对每个分区中的数据分别启用线程进行处理。在一种可能的实现方式中,所述S4,包括:
为每个分区分配hashjoin操作线程,通过每个分区对应的所述hashjoin操作线程,将每个分区中的第一数据和第二数据进行hashjoin操作。
通过该实现方式,将存储在同一个分区中,通过多个线程同时对多个分区中的数据进行hashjoin操作,提高了hashjoin操作的速度,提高了join效率。
为使本发明的目的、技术方案和优点更加清楚,下面结合附图及具体实施例对本发明作进一步地详细描述。
在本发明实施例中,需要在表A的a列上和表B的b列上完成hashjoin操作。其中,表A存储在磁盘A上,表B存储在磁盘B上。在每个磁盘上需要划分出8个哈希桶。
如图2所示,本发明实施例提供了一种哈希连接的方法,该方法可以包括以下步骤:
步骤201:分别在磁盘A中和磁盘B中,划分出哈希桶,为每个哈希桶分配哈希桶号。
具体地,哈希桶号依次是0、1、2、3、4、5、6、7。
步骤202:计算每个第一数据的哈希值,将每个第一数据的哈希值以8取模,得到每个第一数据对应的哈希桶号,并计算每个第一数据的哈希值,将每个第二数据的哈希值以8取模,得到每个第二数据对应的哈希桶号。
举例来说,计算第一数据A1的哈希值A1,对哈希值A1以8取模,得到2,则第一数据A1对应的哈希桶号为2,依次类推。
步骤203:根据每个第一数据对应的哈希桶号,将每个第一数据存储在磁盘A中的具有相同哈希桶号的哈希桶中,并根据每个第二数据对应的哈希桶号,将每个第二数据存储在磁盘B中的具有相同哈希桶号的哈希桶中。
举例来说,将第一数据A1存储在哈希桶号为2的哈希桶中。
步骤204:分别从磁盘A和磁盘B中的具有相同哈希桶号的哈希桶中获取第一数据和第二数据。
步骤205:计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的分区号。
具体地,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,包括:
根据公式一确定每个第一数据对应的分区号,其中,公式一为:
num1=|a|modlength;
其中,num1是第一数据对应的分区号,a为第一数据的哈希值,length为预设的内存中分区的数量;
根据每个第二数据的哈希值,确定每个第二数据对应的分区号,包括:
根据公式二确定每个第二数据对应的分区号,其中,公式二为:
num2=|b|modlength;
其中,num2是第二数据对应的分区号,b为第二数据的哈希值,length为预设的内存中分区的数量。
举例来说,length为7,第一数据A1的哈希值为10,对7取模运算,得到3,那么A1对应的分区号为3。
步骤206:将对应相同分区号的数据读入到所述内存的同一个分区中。
其中,可以设置每个分区号可以对应一个分区,不同的分区号对应不同的分区。
再根据哈希值对数据进行分区存储,然后针对分区进行数据操作,缩小了数据处理的范围,减少了进行hashjoin操作的计算量,加快了处理速度。
步骤207:为每个分区分配hashjoin操作线程,通过每个分区对应的hashjoin操作线程,将每个分区中的第一数据和第二数据进行hashjoin操作。
由于存储在同一个分区中的数据的哈希值相同,哈希值不同的数据存储在不同的分区中,因此,相同的数据一定存储在同一个分区中,只需对同一个分区中的第一数据和第二数据进行hashjoin操作即可,减小了比对的范围。
具体地,在同一个分区中,在进行hashjoin操作时,可以通过每个第二数据探测所有第一数据,即将当前的第二数据与每个第一数据进行比对,找出与当前的第二数据相同的第一数据,输出比对结果;针对每个第二数据执行相同的处理。
另外,该方法还可以包括:实时检测所述内存的剩余量是否小于等于预设值,如果是,则将所述内存的任一分区中的未进行hashjoin操作的第一数据和/或第二数据移出内存,否则,将从内存中移出的未进行hashjoin操作的数据读入到所述内存中。
将任一分区中第一数据和/或第二数据移出内存后,可以缓存在磁盘或其他存储介质中。
如果表A和表B分表存储在不同的节点上,两个节点之间需要通过网络进行数据传输,可以将表A和表B中的数据均读入到表A所在的节点上的内存中,由于表B向该内存传输数据需要通过网络IO进行,为了减少网络IO的调用可以将表B中b列的第二数据持续向内存传输,当内存不足时,可以将内存中的第二数据存储到表A节点中的磁盘中,当内存足够时,从该磁盘中读入第二数据进行处理,这样通过磁盘IO进行数据传输即可,磁盘IO比网络IO速度快,而且稳定,能够提高hashjoin操作的效率。
如图3所示,从磁盘中向内存中读入第一数据和第二数据,并将数据分区存储,图中包括第一分区F1、第二分区F2、第三分区F3、第四分区F4,其中,第一数据和第二数据可以来源于不同的磁盘。相同分区的数据中,通过第二数据探测第一数据。随着从磁盘中读入内存的数据越来越多内存会出现不足的情况,这时可以将分区中的第一数据从内存移出到磁盘中,如图4所示,将第一分区F1和第二分区F2中的第一数据移出到磁盘中,同时继续从表B读入数据,使用这些数据继续探测表A的数据,如果表B中的第二数据的探测数据位于磁盘中,则可以将该第二数据标注一下,便于当磁盘中的第一数据恢复到内存后进行处理。当从磁盘中读入的表B数据也超过了内存的承受能力时,而且表A也已经读入一部分数据到磁盘时,将分区中表B的第二数据读入到磁盘中,如图5所示,将第三分区F3和第四分区F4中的第二数据存储到磁盘中,继续向内存中读入数据。当内存满足要求时,可以将从内存中移出的数据读入到内存中,如图6所示,将第一分区F1和第二分区F2中的第一数据重新读入内存中。
还有,本发明实施例提供的一种哈希连接的方法,该方法可以在将数据经过内存上传给Hbase的过程中。
需要说明的是:在获取第一数据和第二数据之前,可以通过sql语句的过滤条件对数据进行过滤,分别对第一数据和第二数据制作成内存中的hashtable,便于访问第一数据和第二数据。传统的sql执行模式是分阶段执行sql的解析语句,这种方式的缺点是会产生大量的中间数据,同时sql的响应效率也不高,通过本发明实施例提供的方法,分区对少量数据进行处理,处理完的数据从内存中消除即可,可以大量减少中间数据的产生,同时提高sql作业的执行响应时间。另外,本发明实施例提供的方法可以结合pipeline算法,在将第一表和第二表中的数据上传到Hbase的过程中,来执行本发明实施例提供的方法,使得数据流可以有序流动,提高hashjoin操作的效率。
如图7所示,本实施例提供的一种哈希连接的装置,包括:
获取单元701,用于获取待操作的第一表中待操作的第一数据和待操作的第二表中待操作的第二数据;
分区号确定单元702,用于计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的分区号;
读入单元703,用于将对应相同分区号的数据读入到内存的同一个分区中;
操作单元704,用于分别将同一个分区中的第一数据和第二数据进行哈希连接hashjoin操作。
在一种可能的实现方式中,该装置还包括:
检测单元,用于实时检测所述内存的剩余量是否小于等于预设值,如果是,则将所述内存的任一分区中的未进行hashjoin操作的第一数据和/或第二数据移出内存,否则,将从内存中移出的未进行hashjoin操作的数据读入到所述内存中。
在一种可能的实现方式中,所述分区号确定单元702,在执行所述根据每个第一数据的哈希值,确定每个第一数据对应的分区号时,具体执行:根据公式一确定每个第一数据对应的分区号,其中,公式一为:
num1=|a|modlength;
其中,num1是第一数据对应的分区号,a为第一数据的哈希值,length为预设的内存中分区的数量;
所述分区号确定单元702,在执行根据每个第二数据的哈希值,确定每个第二数据对应的分区号时,具体执行:
根据公式二确定每个第二数据对应的分区号,其中,公式二为:
num2=|b|modlength;
其中,num2是第二数据对应的分区号,b为第二数据的哈希值,length为预设的内存中分区的数量。
在一种可能的实现方式中,该装置还包括:
分桶单元,用于分别在存储所述第一表的第一磁盘中和存储所述第二表的第二磁盘中,划分出哈希桶,为每个哈希桶分配哈希桶号;
桶号确定单元,用于计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的哈希桶号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的哈希桶号;
存储单元,用于根据每个第一数据对应的哈希桶号,将每个第一数据存储在所述第一磁盘中的具有相同哈希桶号的哈希桶中,并根据每个第二数据对应的哈希桶号,将每个第二数据存储在所述第二磁盘中的具有相同哈希桶号的哈希桶中;
所述获取单元701,用于分别从第一磁盘和第二磁盘中的具有相同哈希桶号的哈希桶中获取所述第一数据和所述第二数据。
在一种可能的实现方式中,所述操作单元704,用于为每个分区分配hashjoin操作线程,通过每个分区对应的所述hashjoin操作线程,将每个分区中的第一数据和第二数据进行hashjoin操作。
上述装置内的各单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本发明实施例提供的一种哈希连接的方法及装置,具有如下有益效果:
1、本发明实施例提供的一种哈希连接的方法及装置,将待操作的数据按照哈希值分区存储到内存中,在内存中分别对同一个分区中的数据进行hashjoin操作,无需对整个待操作的表格进行操作,无需将整个待操作的表存储到内存中即可实现hashjoin操作,可以利用小块的空闲内存进行处理,提高了内存的利用率,进而提高了join效率。
2、本发明实施例提供的一种哈希连接的方法及装置,将磁盘中待操作的数据进行分桶存储,并将读入内存中的数据进行分区存储,实现更细粒度的处理数据,提高了join效率。
3、本发明实施例提供的一种哈希连接的方法及装置,为每个分区分配对应的线程,通过多个线程对应每个分区中的数据进行hashjoin操作,提高了CPU的利用率。
4、本发明实施例提供的一种哈希连接的方法及装置,将内存中的数据进行分区存储,并对每个分区中的数据进行独立处理,无需将所有待操作的数据都读入到内存中,提高了内存利用效率。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个〃〃〃〃〃〃”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储在计算机可读取的存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质中。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (10)

1.一种哈希连接的方法,其特征在于,包括:
S1:获取待操作的第一表中待操作的第一数据和待操作的第二表中待操作的第二数据;
S2:计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的分区号;
S3:将对应相同分区号的数据读入到内存的同一个分区中;
S4:分别将同一个分区中的第一数据和第二数据进行哈希连接hashjoin操作。
2.根据权利要求1所述的方法,其特征在于,还包括:
实时检测所述内存的剩余量是否小于等于预设值,如果是,则将所述内存的任一分区中的未进行hashjoin操作的第一数据和/或第二数据移出内存,否则,将从内存中移出的未进行hashjoin操作的数据读入到所述内存中。
3.根据权利要求1所述的方法,其特征在于,所述S2中,所述根据每个第一数据的哈希值,确定每个第一数据对应的分区号,包括:
根据公式一确定每个第一数据对应的分区号,其中,公式一为:
num1=|a|modlength;
其中,num1是第一数据对应的分区号,a为第一数据的哈希值,length为预设的内存中分区的数量;
所述S2中,所述根据每个第二数据的哈希值,确定每个第二数据对应的分区号,包括:
根据公式二确定每个第二数据对应的分区号,其中,公式二为:
num2=|b|modlength;
其中,num2是第二数据对应的分区号,b为第二数据的哈希值,length为预设的内存中分区的数量。
4.根据权利要求1所述的方法,其特征在于,在所述S1之前,还包括:
D1:分别在存储所述第一表的第一磁盘中和存储所述第二表的第二磁盘中,划分出哈希桶,为每个哈希桶分配哈希桶号;
D2:计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的哈希桶号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的哈希桶号;
D3:根据每个第一数据对应的哈希桶号,将每个第一数据存储在所述第一磁盘中的具有相同哈希桶号的哈希桶中,并根据每个第二数据对应的哈希桶号,将每个第二数据存储在所述第二磁盘中的具有相同哈希桶号的哈希桶中;
所述S1,包括:
分别从第一磁盘和第二磁盘中的具有相同哈希桶号的哈希桶中获取所述第一数据和所述第二数据。
5.根据权利要求1-4中任一所述的方法,其特征在于,所述S4,包括:
为每个分区分配hashjoin操作线程,通过每个分区对应的所述hashjoin操作线程,将每个分区中的第一数据和第二数据进行hashjoin操作。
6.一种哈希连接的装置,其特征在于,包括:
获取单元,用于获取待操作的第一表中待操作的第一数据和待操作的第二表中待操作的第二数据;
分区号确定单元,用于计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的分区号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的分区号;
读入单元,用于将对应相同分区号的数据读入到内存的同一个分区中;
操作单元,用于分别将同一个分区中的第一数据和第二数据进行哈希连接hashjoin操作。
7.根据权利要求6所述的装置,其特征在于,还包括:
检测单元,用于实时检测所述内存的剩余量是否小于等于预设值,如果是,则将所述内存的任一分区中的未进行hashjoin操作的第一数据和/或第二数据移出内存,否则,将从内存中移出的未进行hashjoin操作的数据读入到所述内存中。
8.根据权利要求6所述的装置,其特征在于,所述分区号确定单元,在执行所述根据每个第一数据的哈希值,确定每个第一数据对应的分区号时,具体执行:根据公式一确定每个第一数据对应的分区号,其中,公式一为:
num1=|a|modlength;
其中,num1是第一数据对应的分区号,a为第一数据的哈希值,length为预设的内存中分区的数量;
所述分区号确定单元,在执行根据每个第二数据的哈希值,确定每个第二数据对应的分区号时,具体执行:
根据公式二确定每个第二数据对应的分区号,其中,公式二为:
num2=|b|modlength;
其中,num2是第二数据对应的分区号,b为第二数据的哈希值,length为预设的内存中分区的数量。
9.根据权利要求6所述的装置,其特征在于,还包括:
分桶单元,用于分别在存储所述第一表的第一磁盘中和存储所述第二表的第二磁盘中,划分出哈希桶,为每个哈希桶分配哈希桶号;
桶号确定单元,用于计算每个第一数据的哈希值,根据每个第一数据的哈希值,确定每个第一数据对应的哈希桶号,并计算每个第二数据的哈希值,根据每个第二数据的哈希值,确定每个第二数据对应的哈希桶号;
存储单元,用于根据每个第一数据对应的哈希桶号,将每个第一数据存储在所述第一磁盘中的具有相同哈希桶号的哈希桶中,并根据每个第二数据对应的哈希桶号,将每个第二数据存储在所述第二磁盘中的具有相同哈希桶号的哈希桶中;
所述获取单元,用于分别从第一磁盘和第二磁盘中的具有相同哈希桶号的哈希桶中获取所述第一数据和所述第二数据。
10.根据权利要求6-9中任一所述的装置,其特征在于,所述操作单元,用于为每个分区分配hashjoin操作线程,通过每个分区对应的所述hashjoin操作线程,将每个分区中的第一数据和第二数据进行hashjoin操作。
CN201510607574.XA 2015-09-22 2015-09-22 一种哈希连接的方法及装置 Pending CN105183880A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510607574.XA CN105183880A (zh) 2015-09-22 2015-09-22 一种哈希连接的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510607574.XA CN105183880A (zh) 2015-09-22 2015-09-22 一种哈希连接的方法及装置

Publications (1)

Publication Number Publication Date
CN105183880A true CN105183880A (zh) 2015-12-23

Family

ID=54905961

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510607574.XA Pending CN105183880A (zh) 2015-09-22 2015-09-22 一种哈希连接的方法及装置

Country Status (1)

Country Link
CN (1) CN105183880A (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017148297A1 (zh) * 2016-03-02 2017-09-08 阿里巴巴集团控股有限公司 数据表连接方法及装置
CN107633001A (zh) * 2017-08-03 2018-01-26 北京空间科技信息研究所 哈希分区优化方法和装置
CN107993151A (zh) * 2018-01-17 2018-05-04 平安科技(深圳)有限公司 基金交易清算方法、装置、设备及计算机可读存储介质
CN108182084A (zh) * 2017-12-28 2018-06-19 中国科学院计算技术研究所 哈希混合加速系统及应用其进行哈希连接的方法
CN110059107A (zh) * 2019-04-19 2019-07-26 成都四方伟业软件股份有限公司 计划优化方法、装置、系统及计算机可读存储介质
CN110851452A (zh) * 2020-01-16 2020-02-28 医渡云(北京)技术有限公司 数据表连接处理方法及装置、电子设备和存储介质
CN112256704A (zh) * 2020-10-23 2021-01-22 山东超越数控电子股份有限公司 一种快速join方法、存储介质及计算机
CN113297209A (zh) * 2021-02-10 2021-08-24 阿里巴巴集团控股有限公司 数据库执行哈希连接的方法以及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226639B1 (en) * 1998-09-22 2001-05-01 International Business Machines Corporation System and method for hybrid hash join using over-partitioning to respond to database query
CN103262074A (zh) * 2010-11-16 2013-08-21 赛贝斯股份有限公司 并行再分区索引扫描

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6226639B1 (en) * 1998-09-22 2001-05-01 International Business Machines Corporation System and method for hybrid hash join using over-partitioning to respond to database query
CN103262074A (zh) * 2010-11-16 2013-08-21 赛贝斯股份有限公司 并行再分区索引扫描

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘明超: "多存储层次能效散列连接算法", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *
廖荣贵 许正宪 王龙发 蔡能聪: "《数据结构与算法》", 30 November 2004, 清华大学出版社 *

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017148297A1 (zh) * 2016-03-02 2017-09-08 阿里巴巴集团控股有限公司 数据表连接方法及装置
CN107633001A (zh) * 2017-08-03 2018-01-26 北京空间科技信息研究所 哈希分区优化方法和装置
CN108182084A (zh) * 2017-12-28 2018-06-19 中国科学院计算技术研究所 哈希混合加速系统及应用其进行哈希连接的方法
CN107993151A (zh) * 2018-01-17 2018-05-04 平安科技(深圳)有限公司 基金交易清算方法、装置、设备及计算机可读存储介质
WO2019140734A1 (zh) * 2018-01-17 2019-07-25 平安科技(深圳)有限公司 基金交易清算方法、装置、设备及计算机可读存储介质
CN107993151B (zh) * 2018-01-17 2020-12-29 平安科技(深圳)有限公司 基金交易清算方法、装置、设备及计算机可读存储介质
CN110059107A (zh) * 2019-04-19 2019-07-26 成都四方伟业软件股份有限公司 计划优化方法、装置、系统及计算机可读存储介质
CN110851452A (zh) * 2020-01-16 2020-02-28 医渡云(北京)技术有限公司 数据表连接处理方法及装置、电子设备和存储介质
CN110851452B (zh) * 2020-01-16 2020-09-04 医渡云(北京)技术有限公司 数据表连接处理方法及装置、电子设备和存储介质
CN112256704A (zh) * 2020-10-23 2021-01-22 山东超越数控电子股份有限公司 一种快速join方法、存储介质及计算机
CN113297209A (zh) * 2021-02-10 2021-08-24 阿里巴巴集团控股有限公司 数据库执行哈希连接的方法以及装置
CN113297209B (zh) * 2021-02-10 2024-03-08 阿里巴巴集团控股有限公司 数据库执行哈希连接的方法以及装置

Similar Documents

Publication Publication Date Title
CN105183880A (zh) 一种哈希连接的方法及装置
CA2941115C (en) Mapping attributes of keyed entities
Afrati et al. Optimizing joins in a map-reduce environment
CN109155763B (zh) 数据流上的数字信号处理
US20140351239A1 (en) Hardware acceleration for query operators
CN106339274A (zh) 一种数据快照获取的方法及系统
CN104778236A (zh) 一种基于元数据的etl实现方法及系统
CN103440246A (zh) 用于MapReduce的中间结果数据排序方法及系统
CN105706092B (zh) 四值模拟的方法和系统
CN105930479A (zh) 一种数据倾斜处理方法及装置
US20200026746A1 (en) Matrix and Vector Multiplication Operation Method and Apparatus
CN110941602B (zh) 数据库的配置方法、装置、电子设备及存储介质
CN107491508B (zh) 一种基于循环神经网络的数据库查询时间预测方法
CN103678550A (zh) 一种基于动态索引结构的海量数据实时查询方法
Goyal et al. Cross platform (RDBMS to NoSQL) database validation tool using bloom filter
CN102207935A (zh) 用于创建索引的方法和系统
CN106445913A (zh) 基于MapReduce的语义推理方法及系统
CN105302915B (zh) 基于内存计算的高性能数据处理系统
CN105677645A (zh) 一种数据表比对方法和装置
CN110389953B (zh) 基于压缩图的数据存储方法、存储介质、存储装置和服务器
US11599540B2 (en) Query execution apparatus, method, and system for processing data, query containing a composite primitive
CN103699627B (zh) 一种基于Hadoop集群的超大文件并行数据块定位方法
CN101930566A (zh) 基于平行系统的水利实验模拟系统及实验模拟方法
CN104090895B (zh) 获取基数的方法、装置、服务器及系统
CN103593401A (zh) 代码转换方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20151223

WD01 Invention patent application deemed withdrawn after publication