一种内存数据库的hash索引构建方法及装置制造方法及图纸

技术编号:21361121 阅读:40 留言:0更新日期:2019-06-15 09:17
本发明专利技术公开了一种内存数据库的hash索引构建方法及装置,该hash索引构建方法包括:获取内存数据库中的数据链表的行数;根据行数分配用于hash索引的桶节点数组中的桶节点个数,并记录各个桶节点数组的头节点;根据桶节点个数及头节点构建用于模拟数据链表的数组元素。通过实施本发明专利技术,基于使用数组元素来模拟链表节点,且不再额外分配空间存储链表节点的值,空间占用小;数组元素一次性分配,内存连续,访问速度快,效率不受影响。

A hash index construction method and device for memory database

The invention discloses a hash index construction method and device for a main memory database. The hash index construction method includes: acquiring rows of the data link list in the main memory database; allocating the number of barrel nodes in the barrel node array for hash index according to rows, and recording the head nodes of each barrel node array; and constructing the analog data link list according to the number of barrel nodes and the head nodes. Array elements. By implementing the invention, the linked list node is simulated based on the use of array elements, and no additional space is allocated to store the value of the linked list node, so that the space occupation is small; the array element is allocated once, the memory is continuous, the access speed is fast, and the efficiency is not affected.

【技术实现步骤摘要】
一种内存数据库的hash索引构建方法及装置
本专利技术涉及数据处理
,具体涉及一种内存数据库的hash索引构建方法及装置。
技术介绍
现有技术在内存数据库中实现hash索引时,hash桶下的元素节点多为单向或者双向链表,数据行上某一个或者某几个字段的索引,是根据这些字段值,通过hash函数进行运算,映射到某个hash桶下。hash桶下的元素节点,存储了数据行的行号,当使用select*fromtablewherea=value;进行查询时,先根据value计算hash值,算出在第几个hash桶,然后遍历hash桶下的元素,根据存储的行号,取出每一行a这一列存储的值,与value进行比对,若完全相等,则就是要找的行。以hash桶下的节点为双向链表举例,桶下的元素节点结构为:对于内存数据库里的某张表,假设表总共有m行,表上有n个hash索引,则这张表就有n套hash结构,每套hash结构有m个桶节点,以上述双向链表为例,这张表的hash索引占用的内存为n*(hash索引头节点占用内存+m*24字节),在n较大时,内存占用非常明显。24个字节有时甚至比数据表中这行数据本身占用的内存还要大。
技术实现思路
有鉴于此,本专利技术实施例提供了一种内存数据库的hash索引构建方法及装置,以解决现有的hash索引数据结构内存占用较大的问题。根据第一方面,本专利技术实施例提供了一种内存数据库的hash索引构建方法,包括:获取内存数据库中的数据链表的行数;根据所述行数分配用于hash索引的桶节点数组中的桶节点个数,并记录各个所述桶节点数组的头节点;根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素。结合第一方面,在第一方面第一实施方式中,根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素,包括:根据所述数据链表中的数据行数与hash桶的映射关系,将所述hash桶指向对应映射的数据链表中的行。结合第一方面第一实施方式,在第一方面第二实施方式中,根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素,还包括:按照所述内存数据库中的数据链表的行序号,为所述数组元素设置下标。结合第一方面,在第一方面第三实施方式中,该内存数据库的hash索引构建方法还包括:判断所述数据链表的行数是否发生变化;如果所述数据链表的行数发生变化,根据所述数据链表的行数变化对应修改所述桶节点数组的数组元素。根据第二方面,本专利技术实施例提供了一种内存数据库的hash索引构建装置,包括:数据行数获取模块,用于获取内存数据库中的数据链表的行数;桶节点分配模块,用于根据所述行数分配用于hash索引的桶节点数组中的桶节点个数,并记录各个所述桶节点数组的头节点;数据元素构建模块,用于根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素。结合第二方面,在第二方面第一实施方式中,所述数据元素构建模块包括:数据元素构建子模块,用于根据所述数据链表中的数据行数与hash桶的映射关系,将所述hash桶指向对应映射的数据链表中的行。结合第二方面第一实施方式,在第二方面第二实施方式中,所述数据元素构建模块还包括:下标配置子模块,用于按照所述内存数据库中的数据链表的行序号,为所述数组元素设置下标。结合第二方面,在第二方面第三实施方式中,该内存数据库的hash索引构建装置还包括:行数判断模块,用于判断所述数据链表的行数是否发生变化;如果所述数据链表的行数发生变化,所述数据元素构建子模块还用于根据所述数据链表的行数变化对应修改所述桶节点数组的数组元素。根据第三方面,本专利技术实施例提供了一种电子设备/移动终端/服务器,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面或者第一方面的任意一种实施方式中所述的内存数据库的hash索引构建方法。根据第四方面,本专利技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行第一方面或者第一方面的任意一种实施方式中所述的内存数据库的hash索引构建方法。本专利技术实施例的内存数据库的hash索引构建方法及装置,所具备的有益效果在于,基于使用数组元素来模拟链表节点,且不再额外分配空间存储链表节点的值,空间占用小;数组元素一次性分配,内存连续,访问速度快,效率不受影响。附图说明通过参考附图会更加清楚的理解本专利技术的特征和优点,附图是示意性的而不应理解为对本专利技术进行任何限制,在附图中:图1示出了本专利技术实施例的内存数据库的hash索引构建方法的流程图;图2示出了本专利技术实施例的内存数据库的hash索引构建装置的结构示意图;图3示出了本专利技术实施例的计算机设备的结构框图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术实施例提供一种内存数据库的hash索引构建方法,如图1所示,该内存数据库的hash索引构建方法主要包括:步骤S1:获取内存数据库中的数据链表的行数;步骤S2:根据行数分配用于hash索引的桶节点数组中的桶节点个数,并记录各个桶节点数组的头节点;对于内存数据库中的数据链表,获取其预分配n行行数,对应地,hash索引的桶节点数组预分配n个元素,即一个array_nodearray_node_0[n]的数组,并记录每个桶的头节点。步骤S3:根据桶节点个数及头节点构建用于模拟数据链表的数组元素。假设单向链表、双向链表的节点值,是一个从0开始的连续的非负整数集合,且各个链表节点的值各不相同,本专利技术实施例中,可以通过连续的数组进行模拟,且节点元素不需要存储节点值,从而减少链表元素的内存占用。由于数组一次性分配,每一组位于连续内存空间,访问上一个、下一个元素节点的效率不会下降。本专利技术实施例的内存数据库的hash索引构建方法,基于使用数组元素来模拟链表节点,且不再额外分配空间存储链表节点的值,空间占用小;数组元素一次性分配,内存连续,访问速度快,效率不受影响。可选地,在本专利技术实施例中,上述的步骤S3,根据桶节点个数及头节点构建用于模拟数据链表的数组元素,具体包括:根据数据链表中的数据行数与hash桶的映射关系,将hash桶指向对应映射的数据链表中的行。例如,对于某个hash索引,数据链表的第3行,第29行,第36815行都映射到桶2下,则桶2的头节点指向array_node[3]。通过数组来模拟链表,内存占用减少1/3,并且数组的内存是一次性分配出来,内存连续,访问速度快。可选地,在本专利技术的一些实施例中,步骤S3,根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素,还包括:按照内存数据库中的数据链表的行序号,为数组元素设置下标。对于某张有n行的数据链表,申请分配数组空间array_node[n],对于数组中的某个元素array_node[k],其下标k有两个含义,一个是数组中的下标,用于访问array_node[k].pr本文档来自技高网...

【技术保护点】
1.一种内存数据库的hash索引构建方法,其特征在于,包括:获取内存数据库中的数据链表的行数;根据所述行数分配用于hash索引的桶节点数组中的桶节点个数,并记录各个所述桶节点数组的头节点;根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素。

【技术特征摘要】
1.一种内存数据库的hash索引构建方法,其特征在于,包括:获取内存数据库中的数据链表的行数;根据所述行数分配用于hash索引的桶节点数组中的桶节点个数,并记录各个所述桶节点数组的头节点;根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素。2.根据权利要求1所述的内存数据库的hash索引构建方法,其特征在于,根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素,包括:根据所述数据链表中的数据行数与hash桶的映射关系,将所述hash桶指向对应映射的数据链表中的行。3.根据权利要求2所述的内存数据库的hash索引构建方法,其特征在于,根据所述桶节点个数及头节点构建用于模拟所述数据链表的数组元素,还包括:按照所述内存数据库中的数据链表的行序号,为所述数组元素设置下标。4.根据权利要求1所述的内存数据库的hash索引构建方法,其特征在于,还包括:判断所述数据链表的行数是否发生变化;如果所述数据链表的行数发生变化,根据所述数据链表的行数变化对应修改所述桶节点数组的数组元素。5.一种内存数据库的hash索引构建装置,其特征在于,包括:数据行数获取模块,用于获取内存数据库中的数据链表的行数;桶节点分配模块,用于根据所述行数分配用于hash索引的桶节点数组中的桶节点个数,并记录各个所述桶节点数组的头节点;数据元素构...

【专利技术属性】
技术研发人员:王运来蔡哲军褚华兴宋凯曹东升龚岩
申请(专利权)人:亚信科技中国有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1