哈希游戏- 哈希游戏平台- 哈希游戏官方网站
哈希连接(hashjoin),是在数据库中建立多张表之间的关系的操作,不管是传统的关系型数据库,还是大数据领域的数据仓库中,特别是olap里,都是常见的基础操作。哈希连接对一个表构建哈希表,扫描另一个表的数据与哈希表比对,从而探测出二者的连接。例如,一个针对订票的商业系统,有两张表及各自字段:订单表(会员号,订单时间,订单详情)和会员表(会员号,会员名称,会员时间),对提交订单的会员,将订单表和会员表根据会员号关联时,就是一种连接操作。
可选地,在选择的探测模式为攒批探测模式的情况下,所述利用选择的探测模式对哈希表执行哈希连接的探测,包括:从驱动表获取一条未扫描过的数据,使该条数据成为已扫描过的数据;如果所述驱动表不存在未扫描过的数据,判断是否还有存下来的行号未获取需要的列,如果有,根据存下来的行号获取需要的列的数据;根据所述一条数据的关联键,在哈希表中查找到匹配的数据行存下来;判断本次探测扫描数据累计的条数是否达到攒批探测模式对应的预设攒批阈值;如果否,重新进入所述从驱动表获取一条未扫描过的数据的步骤;如果是,根据本次探测查找到的数据行的行号获取需要的列的数据;判断所述驱动表是否存在未扫描过的数据,如果存在,通过返回到所述从驱动表获取一条未扫描过的数据的步骤进入下一次探测扫描。
可选地,所述方法还包括:设置多个探测模式分别对应的表数据量范围的初值;获取为哈希连接构建的哈希表样本的数据量;通过将所述哈希表样本的数据量与多个探测模式分别对应的表数据量范围比较,选择所述哈希表样本对应的探测模式,所述多个探测模式单次探测扫描的数据量不同;在利用选择的探测模式对哈希表样本执行哈希连接的探测时,采集表示哈希连接性能的性能数据;根据采集的性能数据调整一个或多个探测模式分别对应的表数据量范围。
本说明书一个实施例提供了数据库执行哈希连接的方法,该方法获取哈希连接构建的哈希表的数据量,通过将所述哈希表的数据量与多个探测模式分别对应的表数据量范围比较,选择所述哈希表对应的探测模式对哈希表执行哈希连接的探测,由于数据量不同的单次探测对应不同数据量的哈希表在探测时表现的查询性能不同,因此,本说明书实施例提供的方法预设了多个探测模式分别对应的表数据量范围,从而能够根据哈希表数据量选择对应的探测模式,利用探测模式对应的单次探测扫描的数据量来执行哈希连接的探测,能够最大化利用不同探测模式的性能优势,有效提高哈希连接的查询性能。
哈希连接主要分为两个阶段:建立阶段(buildphase)和探测阶段(probephase)。建立阶段,主要用于构建build表也即哈希表。例如,针对订票的商业系统的订单表和会员表,可以根据会员表构建哈希表,提供按会员号(关联键)查找会员数据的功能。在本说明书实施例提供的方法中,在探测阶段先选择哈希表大小范围对应的探测模式,例如,根据哈希表的大小选择逐条探测模式或者攒批探测模式,再根据选择的探测模式对应的单次探测扫描的数据量来扫描订单表中的数据,去build表中根据会员号匹配到对应的会员,然后读取该会员的相关信息,这个过程被称为probe操作,订单表称之为probe表。
需要说明的是,本说明书实施例提供的方法对多个探测模式的单次探测扫描的数据量具体数值并不进行限制,具体可以依据实施场景需要进行限制。例如,一个探测模式的单次探测扫描的数据可以是n条,另一个探测模式的单次探测扫描的数据可以是m条。其中,mn≥1。具体地,例如,一个探测模式为逐条探测模式,其单次探测扫描的数据可以是1条,另一个探测模式为攒批探测模式,其单次探测扫描的数据的条数可以是预设的某个大于1的数值。
再例如,在选择的探测模式为攒批探测模式的情况下,所述利用选择的探测模式对哈希表执行哈希连接的探测,包括:从驱动表获取一条未扫描过的数据,使该条数据成为已扫描过的数据;如果所述驱动表不存在未扫描过的数据,判断是否还有存下来的行号未获取需要的列,如果有,根据存下来的行号获取需要的列的数据;根据所述一条数据的关联键在哈希表中查找到匹配的数据行存下来;判断本次探测扫描数据累计的条数是否达到攒批探测模式对应的预设攒批阈值;如果否,重新进入所述从驱动表获取一条未扫描过的数据的步骤;如果是,根据本次探测查找到的数据行的行号获取需要的列的数据;判断所述驱动表是否存在未扫描过的数据,如果存在,通过返回到所述从驱动表获取一条未扫描过的数据的步骤进入下一次探测扫描。
可以理解的是,单次探测扫描的数据量越大,越能够达到内存访问性能的提升,但是同时会带来cpu指令的增加。因此,在选择探测模式时,需要平衡内存访问性能提升和cpu指令开销。从计算机体系结构理论来讲,内存访问性能和内存大小是有关的,cpu读取数据会先将数据加载进缓存里,缓存有三个级别,分别是l1、l2、l3。其中l3缓存空间最大,访问性能最差;l1缓存空间最小,访问性能最好,接近于cpu指令直接处理的开销。由此,在某些场景中,可以根据l1、l2、l3三个级别带来的内存访问性能提升和cpu指令开销来确定多个探测模式分别对应的表数据量范围。但是,由于实际生产上cpu型号层次不齐,摩尔定律促使cpu不断更新换代,不同级别缓存的性能和大小都在不断变化,有时根据l1、l2、l3也难以决定阈值来确定多个探测模式分别对应的表数据量范围以及单次探测扫描的数据量。
计算设备800还包括接入设备840,接入设备840使得计算设备800能够经由一个或多个网络860通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备840可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。