CN117971899A - 一种数据查找方法、装置、设备及存储介质 - Google Patents

一种数据查找方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN117971899A
CN117971899A CN202311843029.1A CN202311843029A CN117971899A CN 117971899 A CN117971899 A CN 117971899A CN 202311843029 A CN202311843029 A CN 202311843029A CN 117971899 A CN117971899 A CN 117971899A
Authority
CN
China
Prior art keywords
data
node
sub
storage node
storage
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
CN202311843029.1A
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.)
Beijing Ucas Technology Co ltd
Original Assignee
Beijing Ucas Technology 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 Beijing Ucas Technology Co ltd filed Critical Beijing Ucas Technology Co ltd
Priority to CN202311843029.1A priority Critical patent/CN117971899A/zh
Publication of CN117971899A publication Critical patent/CN117971899A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及计算机技术领域,公开了一种数据查找方法、装置、设备及存储介质,本发明首先对索引数据进行高低位划分,得到用以确定候选存储位置的第一子数据,然后利用高低位划分后得到的第二子数据确定出数据的存储位置;通过这样的方式,避免了查找数据时遍历整个数据结构的情况,能够准确提供数据的存储位置或者其存储的大致范围,降低了查找的时间复杂度;而且由于存储位置中仅存储了待查找数据的部分数据,因此,还需要将存储位置的存储数据和第一子数据进行合并,方可得到待查找数据;通过存储部分数据的方式,解决了当前内存消耗大的问题,降低了内存的占用。

Description

一种数据查找方法、装置、设备及存储介质
技术领域
本发明涉及计算机技术领域,具体涉及一种数据查找方法、装置、设备及存储介质。
背景技术
在计算机系统中,数据查找是很多场景下非常常见的需求,常见的查找算法包括链表、红黑树、基数树(即radix树)等。但是,以上查找算法在查找数据时,需要遍历整个数据结构,从而导致时间复杂度较高。
为解决查找过程中时间复杂度较大的问题,提出了哈希算法。哈希算法虽然在一定程度上解决了时间复杂度较高的问题,但还存在内存消耗较大的弊端。尤其是在嵌入式系统中,内存极为有限。因此,当前亟需一种既可以保证查找时的低时间复杂度,又可以保证内存消耗小的数据查找方法,以解决当前查找算法中存在的问题。
发明内容
有鉴于此,本发明提供了一种数据查找方法、装置、设备及存储介质,以解决当前内存消耗大和时间复杂度高的问题。
第一方面,本发明提供了一种数据查找方法,方法包括:
从数据查找指令中获取索引数据;对索引数据进行高低位划分,得到第一子数据和第二子数据;以第一子数据为索引,从预设哈希表中确定候选存储节点;若候选存储节点数据域中的存储数据包括第二子数据,则将存储数据和第一子数据进行合并,得到待查找数据;若候选存储节点数据域中的存储数据不包括第二子数据,则遍历以候选存储节点为头结点的链表,以根据链表结点中包含第二子数据的存储数据和第一子数据得到待查找数据。
本实施例提供的数据查找方法,首先对索引数据进行高低位划分,得到用以确定候选存储位置的第一子数据,然后利用高低位划分后得到的第二子数据确定出数据的存储位置;通过这样的方式,避免了查找数据时遍历整个数据结构的情况,能够准确提供数据的存储位置或者其存储的大致范围,降低了查找的时间复杂度;而且由于存储位置中仅存储了待查找数据的部分数据,因此,还需要将存储位置的存储数据和第一子数据进行合并,方可得到待查找数据;通过存储部分数据的方式,解决了当前内存消耗大的问题,降低了内存的占用。
在一种可选的实施方式中,对索引数据进行高低位划分,得到第一子数据和第二子数据,包括:
获取预设偏移量;根据偏移量对索引数据进行移位处理,得到移位结果;根据移位结果,将低位部分对应的数据确定为第一子数据,将高位部分对应的数据确定为第二子数据。
相较于传统哈希值通过除留余数的方法得到,本优选实施例通过移位的处理方式确定第一子数据,从而降低了对CPU的消耗,进而使得该处理过程更高效;而且,根据通常的数据编码习惯,高位数据更容易相同,因此,本实施例将低位部分的数据确定为第一子数据,可以尽量减少哈希冲突的发生,从而提高数据查找的效率。
在一种可选的实施方式中,方法还包括:
从数据存储指令中获取待存储数据,待存储数据包括第三子数据和第四子数据;获取索引取第三子数据时对应节点的状态;根据节点的状态确定目标存储节点,以将第四子数据存储至目标存储节点。
在一种可选的实施方式中,根据节点的状态确定目标存储节点,以将第四子数据存储至目标存储节点,包括:
当节点的状态为空时,将节点确定为目标存储节点,将第四子数据存储至目标存储节点的数据域中。
本实施例在进行数据存储时,将待存储数据进行拆分,仅对拆分后的第四子数据进行存储,使得空间占用减少。
在一种可选的实施方式中,根据节点的状态确定目标存储节点,以将第四子数据存储至目标存储节点,方法还包括:
当节点的状态为非空时,获取空闲链表的状态,预设哈希表中包括冲突域,空闲链表头结点的地址存储于冲突域头结点的指针域中;当空闲链表的状态为非空时,将空闲链表的头结点确定为目标存储节点,并将第四子数据存储至目标存储节点,将头结点从空闲链表删除;当空闲链表的状态为空时,判断冲突域是否存在空闲节点;根据判断结果确定目标存储节点。
在一种可选的实施方式中,根据判断结果确定目标存储节点,包括:
当判断结果为冲突域中不存在空闲节点时,存储失败;当判断结果为冲突域中存在空闲节点时,根据冲突域头结点中的数据确定冲突域中的首个空闲节点对应的位置,将该位置确定为目标存储节点。
在一种可选的实施方式中,在确定目标存储节点之后,方法还包括:
将目标存储节点插入至以候选存储节点为头结点的链表中,并将目标存储节点作为节点的后继节点。
本实施例在进行数据存储时,将目标存储节点直接作为候选存储节点的后继节点,不需要通过遍历方式将目标存储节点插入至链表尾部,使得存储过程的时间复杂度变低。
在一种可选的实施方式中,方法还包括:
获取待删除数据,待删除数据包括第五子数据和第六子数据;根据第五子数据确定待删除数据的存储节点;当存储节点属于冲突域时,将存储节点中的数据和存储节点所属链表中头结点的数据进行交换;将交换后存储节点所属链表的头结点删除。
本实施例提供的数据查找方法,在查找到待删除数据所在的存储节点后,直接将存储节点与该存储节点所属链表头结点数据域的部分进行交换,无需再对存储节点的前继节点和后继节点进行存储,简化了删除流程,提高了删除效率。
第二方面,本发明提供了一种数据查找装置,装置包括:
第一获取模块,用于从数据查找指令中获取索引数据;划分模块,用于对索引数据进行高低位划分,得到第一子数据和第二子数据;第一确定模块,用于以第一子数据为索引,从预设哈希表中确定候选存储节点;第一查找模块,用于若候选存储节点数据域中的存储数据包括第二子数据,则将存储数据和第一子数据进行合并,得到待查找数据;第二查找模块,用于若候选存储节点数据域中的存储数据不包括第二子数据,则遍历以候选存储节点为头结点的链表,以根据链表结点中包含第二子数据的存储数据和第一子数据得到待查找数据。
第三方面,本发明提供了一种计算机设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的数据查找方法。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例1的数据查找方法的流程示意图;
图2是根据本发明实施例1的哈希桶结构分布示意图;
图3是根据本发明实施例2的数据查找方法的流程示意图;
图4是根据本发明实施例2中数据存储的流程图;
图5是根据本发明实施例3的数据查找方法的流程示意图;
图6是根据本发明实施例3中数据删除的流程图;
图7是根据本发明实施例4的数据查找装置的结构框图;
图8是本发明实施例5的计算机设备的硬件结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
传统的数据查找方法,通常需要遍历整个数据结构才能找到待查找数据,使得查找的时间复杂度较高。但哈希算法通过计算的哈希值便可直接确定待查找数据的存储位置,从而降低了查找的时间复杂度。
具体地,哈希算法对应的数据结构-哈希表主要用于存储键值对数据,键值对数据包括键值key和属性值value。在利用哈希算法对数据进行查找时,首先通过哈希函数计算出key对应的哈希值hash,然后以hash为索引,确定该key对应的键值对数据在哈希表中的存储位置,最后从存储位置中获取待查找的键值对数据。正是由于哈希值的存在,使得查找键值对时,不必再通过遍历整个数据结果进行查找,从而降低了查找过程中的时间复杂度。
但是,在上述描述中可以得知,键值key和属性值value同时存储于哈希表中,而在进行查找时,其实是基于key查找value,因此,存储于哈希表中的key占用了大量的内存。尤其是当该算法应用于嵌入式系统时,内存的占用就成了非常严重的问题。
除上述缺陷外,哈希算法还容易出现哈希冲突。哈希冲突(Hash Collision)是指在使用哈希表存储数据时,两个或多个不同的键(Key)被哈希函数映射到同一个位置的情况。在这种情况下,就会导致数据的存储和删除变得困难。
具体地,当存储数据的过程中出现哈希冲突时,传统的哈希算法,首先需要通过哈希值确定出哈希桶的位置,查找到以该哈希桶为头结点的链表的最后一个节点,通过动态分配内存的方式,在哈希桶对应链表的尾部增加一个结点,并将待存储数据存储至新增加的节点中。当删除数据的过程中出现哈希冲突时,类似的,通过遍历的方式找到待删除数据的存储位置,并将待删除数据所在存储节点的前继节点和后继节点保存,以便将待删除数据删除后,修改指针域。
但是,上述数据存储过程中依然需要对所有冲突数据进行遍历才能完成存储操作,从而使得存储的时间复杂度变高;而数据删除过程中,还需要对待删除数据的前继节点和后继节点进行保存,使得删除操作变得复杂。
为此,本方案对经典哈希算法进行了改良,提出了一种查找时间复杂度低且内存占用低的数据查找的方法,以应用至嵌入式系统中。
根据本发明实施例,提供了一种数据查找方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
实施例1
在本实施例中提供了一种数据查找方法,可用于移动终端、PC等,图1是根据本发明实施例的数据查找方法的流程图,如图1所示,该流程包括如下步骤:
步骤S101,从数据查找指令中获取索引数据。
具体地,数据查找指令中携带有查找操作指令和索引数据,索引数据即待查找数据的索引信息。
具体地,数据查找指令可通过用户端触发产生。当接收到数据查找指令时,从数据查找指令中获取查找操作指令和索引数据,以使控制器基于查找操作指令,从哈希表中查找与索引数据对应的待查找数据。
本方案采用的哈希表由哈希桶和冲突域两部分组成,且哈希桶和冲突域是如图2所示的集中分布,而非传统意义上的散列分布。其中,哈希桶用于存储元数据;冲突域用于存储冲突数据。如A数据和B数据存在哈希冲突,且A数据先于B数据出现,则将A数据定义为元数据,将B数据定义为冲突数据。又如,C数据不存在哈希冲突,则C数据也为元数据。
还需要说明的是,哈希桶和冲突域统一编址,如哈希桶的元素范围是A[0]-A[1000],冲突域的元素范围是A[1001]-A[1600]。本方案中,对哈希表数据结构通过如下代码定义:
#define p(2^m)
#define BUCKET_SIZE p//定义哈希桶的容量
#define COLLISION_SIZE 1024*2//定义冲突域的容量,注:冲突域容量最大为2^m。
示例性地,哈希表中各元素的结构体如表一所示,包括数据域data和指针域next。
表一
data next
示例性地,索引数据可以是键值对中的键值key,索引数据随应用场景而变化,此处不做具体限定。本实施例中,对哈希表数据结构的定义代码如下:
步骤S102,对索引数据进行高低位划分,得到第一子数据和第二子数据。
具体地,对索引数据进行高低位划分,即可得到高位部分的数据和低位部分的数据。其中,第一子数据可以是高位部分的数据,也可以是低位部分的数据,第一子数据与高低位数据的对应关系此处不做具体限定,本领域技术人员可以根据实际情况进行选择。
示例性地,如索引数据为64位数据0xFFCA00003F3C0012(16进制),进行高低位划分之后,将低20位的部分即0xC0012作为第一子数据,将高44位的部分即0xFFCA00003F3作为第二子数据。
步骤S103,以第一子数据为索引,从预设哈希表中确定候选存储节点。
具体地,在预设哈希表中,将索引为第一子数据的哈希桶确定为可能存储待查找数据的节点,即候选存储节点。预设哈希表即待查找数据所属的哈希表。
示例性地,仍以步骤S102中的实施例为例,第一子数据为0xC0012,则将下标为0xC0012的哈希桶确定为候选存储节点。
步骤S104,若候选存储节点数据域中的存储数据包括第二子数据,则将存储数据和第一子数据进行合并,得到待查找数据。
具体地,在确定出候选存储节点后,首先读取候选存储节点数据域中存储的数据(即存储数据);然后判断存储数据中是否包括第二子数据;当存储数据中包括第二子数据时,表示该候选存储节点即本次查找的目标位置,此时,可将存储数据和第一子数据进行合并,从而得到待查找数据。
示例性地,通常第二子数据位于存储数据的首部字段,因此,判断存储数据中是否包括第二子数据的方式可以是,获取存储数据前m位的数据,将前m位的数据与第二子数据进行一致性比较,根据比较结果判断存储数据中是否包括第二子数据。如若二者一致,则确定存储数据中包括第二子数据;若二者不一致,则确定存储数据中不包括第二子数据。其中,本实施例中的m即第二子数据的位数。
步骤S105,若候选存储节点数据域中的存储数据不包括第二子数据,则遍历以候选存储节点为头结点的链表,以根据链表结点中包含第二子数据的存储数据和第一子数据得到待查找数据。
具体地,存储数据中不包括第二子数据,表示候选存储节点并非本次查找的目标位置,而且还表示,待查找数据存在哈希冲突。当待查找数据存在哈希冲突时,存储待查找数据的节点必然在以候选存储节点为头节点的链表中。因此,需要依次遍历链表中的节点,以查找出携带第二子数据的存储数据,从而根据查找出的存储数据和第一子数据实现待查找数据的还原。此处需要强调的是,在存储待查找数据的节点所属的链表中,头结点为第一子数据对应的哈希桶,其余结点均为冲突域中的元素。还需要说明的是,若候选存储节点数据域中的存储数据不包括第二子数据且候选存储节点的指针域为空,或者,以候选存储节点所属链表中,其余节点的数据域中均不存在第二子数据时,表示待查找数据在该哈希表中不存在,因此,此次查找失败,并将查找失败的结果显示于用户界面。
本实施例提供的数据查找方法,首先对索引数据进行高低位划分,得到用以确定候选存储位置的第一子数据,然后利用高低位划分后得到的第二子数据确定出数据的存储位置;通过这样的方式,避免了查找数据时遍历整个数据结构的情况,能够准确提供数据的存储位置或者其存储的大致范围,降低了查找的时间复杂度;而且由于存储位置中仅存储了待查找数据的部分数据,因此,还需要将存储位置的存储数据和第一子数据进行合并,方可得到待查找数据;通过存储部分数据的方式,解决了当前内存消耗大的问题,降低了内存的占用。
优选地,上述步骤S102包括:
获取预设偏移量。
具体地,预设偏移量在进行数据存储时,由用户根据实际场景进行取值。其取值与存储数据的数据量和存储数据中高低位数据的重叠率有关。若数据量极少,且存储数据的高位部分重叠率较低,那么预设偏移量的取值可以偏小;若数据量较多,且高低位部分重叠率较高,那么预设偏移量的取值尽量偏大,以降低数据冲突。
根据偏移量对索引数据进行移位处理,得到移位结果。
具体地,以偏移量为移位位数,对索引数据进行左移位处理,得到移位结果。
根据移位结果,将低位部分对应的数据确定为第一子数据,将高位部分对应的数据确定为第二子数据。
具体地,将移位后得到的低位部分数据确定为第一子数据,将剩余的高位部分确定为第二子数据。
相较于传统哈希值通过除留余数的方法得到,本优选实施例通过移位的处理方式确定第一子数据,从而降低了对CPU的消耗,进而使得该处理过程更高效;而且,根据通常的数据编码习惯,高位数据更容易相同,因此,本实施例将低位部分的数据确定为第一子数据,可以尽量减少哈希冲突的发生,从而提高数据查找的效率。
实施例2
在本实施例中提供了一种数据查找方法,可用于移动终端,PC等,图3是根据本发明实施例的数据查找方法的流程图,如图3所示,该流程包括如下步骤:
步骤S301,从数据查找指令中获取索引数据。详细请参见图1所示实施例的步骤S101,在此不再赘述。
步骤S302,对索引数据进行高低位划分,得到第一子数据和第二子数据。详细请参见图1所示实施例的步骤S102,在此不再赘述。
步骤S303,以第一子数据为索引,从预设哈希表中确定候选存储节点。详细请参见图1所示实施例的步骤S103,在此不再赘述。
步骤S304,若候选存储节点数据域中的存储数据包括第二子数据,则将存储数据和第一子数据进行合并,得到待查找数据。详细请参见图1所示实施例的步骤S104,在此不再赘述。
步骤S305,若候选存储节点数据域中的存储数据不包括第二子数据,则遍历以候选存储节点为头结点的链表,以根据链表结点中包含第二子数据的存储数据和第一子数据得到待查找数据。详细请参见图1所示实施例的步骤S105,在此不再赘述。
步骤S306,从数据存储指令中获取待存储数据,待存储数据包括第三子数据和第四子数据。
具体地,数据存储指令中携带有存储操作指令和待存储数据。在获取到待存储数据之后,利用步骤S102的优选方式,将待存储数据划分为第三子数据和第四子数据。
步骤S307,获取索引取第三子数据时对应节点的状态。
具体地,在哈希表中,以第三子数据作为索引,获取该索引对应哈希桶的状态。哈希桶的状态包括空和非空。
示例性地,如第三子数据为0011,则从哈希表中查找出下标为0011的哈希桶,并获取该哈希桶的状态。
步骤S308,根据节点的状态确定目标存储节点,以将第四子数据存储至目标存储节点。
具体地,上述步骤S308包括:
步骤S3081,当节点的状态为空时,将节点确定为目标存储节点,将第四子数据存储至目标存储节点的数据域中。
具体地,当哈希桶(即节点)的状态为空时,表示当前哈希桶可进行数据存储,此时,直接将该哈希桶确定为目标存储节点,然后将第四子数据存储至目标存储节点的数据域中。由于该哈希桶原先状态为空,因此,该哈希桶的指针域依然为空,无需进行修改。
步骤S3082,当节点的状态为非空时,获取空闲链表的状态。
具体地,当哈希桶(即节点)的状态为非空时,表示当前哈希桶已有数据存储,且当前待存储数据存在哈希冲突,因此,需要将待存储数据存储于冲突域的节点中。对待存储数据进行存储时,首先需要从冲突域中确定出用以存储待存储数据的目标存储节点。确定目标存储节点的第一步,则是获取冲突域中空闲链表的状态。
具体地,参照步骤S101中对哈希表以及哈希表中元素结构体的说明,冲突域的头结点包括数据域和指针域,其中,数据域部分用于存储自哈希表构建时刻起至当前时刻为止,所有冲突数据的数据量,该数据量为当前依然存在的冲突数据和原先存在但已删除的冲突数据的总和;指针域部分则指向空闲链表的头结点。空闲链表是由原先非空,但后续因存储数据被删而处于空闲状态的节点形成的。
示例性地,如冲突域的容量为100,除头节点外,真正可用空间为99个,头结点数据域中的数据为80,空闲链表中有20个节点。那么,当前可用的节点共39个,其中包括冲突域中从未存储过数据的19个节点,还包括空闲链表中已经释放的20个节点。
步骤S3083,当空闲链表的状态为非空时,将空闲链表的头结点确定为目标存储节点,并将第四子数据存储至目标存储节点,将头结点从空闲链表删除。
步骤S3084,当空闲链表的状态为空时,判断冲突域是否存在空闲节点。
具体地,当空闲链表的状态为空时,表示空闲链表中不存在可用于存储的节点。此时,需要判断冲突域中是否存在其他空闲节点。
具体地,判断冲突域中是否存在其他空闲节点的方法为:读取冲突域头结点数据域中的数据量;将该数据量与冲突域的容量-1进行比较;若二者一致,则表示冲突域已被存满,不存在其他空闲节点;若不一致,则表示还存在其他空闲节点。
步骤S3085,根据判断结果确定目标存储节点。
在一些可选的实施方式中,上述步骤S3085包括:
步骤a1,当判断结果为冲突域中不存在空闲节点时,存储失败。
具体地,当冲突域中不存在空闲节点时,表示哈希表中再无多余空间可用于存储,因此,此次存储操作失败。
步骤a2,当判断结果为冲突域中存在空闲节点时,根据冲突域头结点中的数据确定冲突域中的首个空闲节点对应的位置,将该位置确定为目标存储节点。
具体地,当冲突域中存在空闲节点时,表示冲突域还有空间可用,此时,可以以冲突域头结点的下一节点为起始,头结点中存储的数据量为偏移量,确定目标存储节点。
步骤a3,将目标存储节点插入至以候选存储节点为头结点的链表中,并将目标存储节点作为节点的后继节点。
本实施例在进行数据存储时,将待存储数据进行拆分,仅对拆分后的第四子数据进行存储,使得空间占用减少;在存储数据时,将目标存储节点直接作为候选存储节点的后继节点,使得时间复杂度变低。步骤S306至步骤S308中涉及的数据存储过程如图4所示。
实施例3
在本实施例中提供了一种数据查找方法,可用于移动终端,如手机、平板电脑等,图5是根据本发明实施例的数据查找方法的流程图,如图5所示,该流程包括如下步骤:
步骤S501,从数据查找指令中获取索引数据。详细请参见图1所示实施例的步骤S101,在此不再赘述。
步骤S502,对索引数据进行高低位划分,得到第一子数据和第二子数据。详细请参见图1所示实施例的步骤S102,在此不再赘述。
步骤S503,以第一子数据为索引,从预设哈希表中确定候选存储节点。详细请参见图1所示实施例的步骤S103,在此不再赘述。
步骤S504,若候选存储节点数据域中的存储数据包括第二子数据,则将存储数据和第一子数据进行合并,得到待查找数据。详细请参见图1所示实施例的步骤S104,在此不再赘述。
步骤S505,若候选存储节点数据域中的存储数据不包括第二子数据,则遍历以候选存储节点为头结点的链表,以根据链表结点中包含第二子数据的存储数据和第一子数据得到待查找数据。详细请参见图1所示实施例的步骤S105,在此不再赘述。
步骤S506,获取待删除数据,待删除数据包括第五子数据和第六子数据。
具体地,待删除数据可以从接收到的数据删除指令中获取,在获取到待删除数据之后,可利用步骤S102的优选方法,将待存储数据划分为第五子数据和第六子数据。
步骤S507,根据第五子数据确定待删除数据的存储节点。
具体地,将第五子数据作为索引,在哈希表中查找存储第六子数据的节点,并将存储数据中包括第六子数据的节点确定为待删除数据的存储节点。若未查找到待删除数据的存储节点,则表示该待删除数据在哈希表中不存在,将删除失败显示与交互界面。
步骤S508,当存储节点属于冲突域时,将存储节点中的数据和存储节点所属链表中头结点的数据进行交换。
具体地,当存储节点属于哈希桶时,直接将对应哈希桶删除。
步骤S509,将交换后存储节点所属链表的头结点删除。
步骤S506至步骤S509中涉及的数据删除的过程如图6所示。
本实施例提供的数据查找方法,在查找到待删除数据所在的存储节点后,直接将存储节点与该存储节点所属链表头结点数据域的部分进行交换,无需再对存储节点的前继节点和后继节点进行存储,简化了删除流程,提高了删除效率。
实施例4
在本实施例中还提供了一种数据查找装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
本实施例提供一种数据查找装置,如图7所示,装置包括:
第一获取模块701,用于从数据查找指令中获取索引数据。
划分模块702,用于对索引数据进行高低位划分,得到第一子数据和第二子数据。
第一确定模块703,用于以第一子数据为索引,从预设哈希表中确定候选存储节点;第二获取模块,用于以第一子数据为索引,从预设哈希表中确定候选存储节点。
第一查找模块704,用于若候选存储节点数据域中的存储数据包括第二子数据,则将存储数据和第一子数据进行合并,得到待查找数据。
第二查找模块705,用于若候选存储节点数据域中的存储数据不包括第二子数据,则遍历以候选存储节点为头结点的链表,以根据链表结点中包含第二子数据的存储数据和第一子数据得到待查找数据。
在一些可选的实施方式中,划分模块702包括:
第一获取子模块,用于获取预设偏移量;移位子模块,用于根据偏移量对索引数据进行移位处理,得到移位结果;第一确定子模块,用于根据移位结果,将低位部分对应的数据确定为第一子数据,将高位部分对应的数据确定为第二子数据。
在一些可选的实施方式中,装置还包括:
第二获取模块,用于从数据存储指令中获取待存储数据,待存储数据包括第三子数据和第四子数据;第三获取模块,用于获取索引取第三子数据时对应节点的状态;存储模块,用于根据节点的状态确定目标存储节点,以将第四子数据存储至目标存储节点。
在一些可选的实施方式中,存储模块包括:
第一存储子模块,用于当节点的状态为空时,将节点确定为目标存储节点,将第四子数据存储至目标存储节点的数据域中。
在一些可选的实施方式中,存储模块还包括:
第二获取子模块,用于当节点的状态为非空时,获取空闲链表的状态,空闲链表头结点的地址存储于冲突域头结点的指针域中;第二确定子模块,用于当空闲链表的状态为非空时,将空闲链表的头结点确定为目标存储节点,并将第四子数据存储至目标存储节点,将头结点从空闲链表删除;判断子模块,用于当空闲链表的状态为空时,判断冲突域是否存在空闲节点;第三确定子模块,用于根据判断结果确定目标存储节点。
在一些可选的实施方式中,第三确定子模块包括:
显示单元,用于当判断结果为冲突域中不存在空闲节点时,存储失败;确定单元,用于当判断结果为冲突域中存在空闲节点时,根据冲突域头结点中的数据确定冲突域中的首个空闲节点对应的位置,将该位置确定为目标存储节点。
在一些可选的实施方式中,在确定单元之后,还包括:
插入单元,用于将目标存储节点插入至以候选存储节点为头结点的链表中,并将目标存储节点作为节点的后继节点。
在一些可选的实施方式中,装置还包括:
第四获取模块,用于获取待删除数据,待删除数据包括第五子数据和第六子数据;第二确定模块,用于根据第五子数据确定待删除数据的存储节点;交换模块,用于当存储节点属于冲突域时,将存储节点中的数据和存储节点所属链表中头结点的数据进行交换;删除模块,用于将交换后存储节点所属链表的头结点删除。
上述各个模块和单元的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
本实施例中的数据查找装置是以功能单元的形式来呈现,这里的单元是指ASIC(Application Specific Integrated Circuit,专用集成电路)电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
实施例5
本发明实施例还提供一种计算机设备,具有上述图7所示的数据查找装置。
请参阅图8,图8是本发明可选实施例提供的一种计算机设备的结构示意图,如图8所示,该计算机设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在计算机设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示GUI的图形信息的指令。在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个计算机设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图8中以一个处理器10为例。
处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
其中,存储器20存储有可由至少一个处理器10执行的指令,以使至少一个处理器10执行实现上述实施例示出的方法。
存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器20可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器20可选包括相对于处理器10远程设置的存储器,这些远程存储器可以通过网络连接至该计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
存储器20可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器20还可以包括上述种类的存储器的组合。
该计算机设备还包括通信接口30,用于该计算机设备与其他设备或通信网络通信。
本发明实施例还提供了一种计算机可读存储介质,上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现上述实施例示出的方法。
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

Claims (10)

1.一种数据查找方法,其特征在于,所述方法包括:
从数据查找指令中获取索引数据;
对所述索引数据进行高低位划分,得到第一子数据和第二子数据;
以所述第一子数据为索引,从预设哈希表中确定候选存储节点;
若所述候选存储节点数据域中的存储数据包括所述第二子数据,则将所述存储数据和所述第一子数据进行合并,得到待查找数据;
若所述候选存储节点数据域中的存储数据不包括所述第二子数据,则遍历以所述候选存储节点为头结点的链表,以根据链表结点中包含所述第二子数据的存储数据和所述第一子数据得到所述待查找数据。
2.根据权利要求1所述的方法,其特征在于,所述对所述索引数据进行高低位划分,得到第一子数据和第二子数据,包括:
获取预设偏移量;
根据所述偏移量对所述索引数据进行移位处理,得到移位结果;
根据所述移位结果,将低位部分对应的数据确定为所述第一子数据,将高位部分对应的数据确定为所述第二子数据。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
从数据存储指令中获取待存储数据,所述待存储数据包括第三子数据和第四子数据;
获取索引取所述第三子数据时对应节点的状态;
根据所述节点的状态确定目标存储节点,以将所述第四子数据存储至所述目标存储节点。
4.根据权利要求3所述的方法,其特征在于,所述根据所述节点的状态确定目标存储节点,以将所述第四子数据存储至所述目标存储节点,包括:
当所述节点的状态为空时,将所述节点确定为所述目标存储节点,将所述第四子数据存储至所述目标存储节点的数据域中。
5.根据权利要求4所述的方法,其特征在于,所述根据所述节点的状态确定目标存储节点,以将所述第四子数据存储至所述目标存储节点,所述方法还包括:
当所述节点的状态为非空时,获取空闲链表的状态,所述预设哈希表中包括冲突域,所述空闲链表头结点的地址存储于所述冲突域头结点的指针域中;
当所述空闲链表的状态为非空时,将所述空闲链表的头结点确定为目标存储节点,并将所述第四子数据存储至所述目标存储节点,将所述头结点从所述空闲链表删除;
当所述空闲链表的状态为空时,判断所述冲突域是否存在空闲节点;
根据判断结果确定所述目标存储节点。
6.根据权利要求5所述的方法,其特征在于,所述根据判断结果确定所述目标存储节点,包括:
当所述判断结果为所述冲突域中不存在空闲节点时,存储失败;
当所述判断结果为所述冲突域中存在空闲节点时,根据所述冲突域头结点中的数据确定所述冲突域中的首个空闲节点对应的位置,将该位置确定为目标存储节点。
7.根据权利要求5所述的方法,其特征在于,在确定所述目标存储节点之后,所述方法还包括:
将所述目标存储节点插入至以所述候选存储节点为头结点的链表中,并将所述目标存储节点作为所述节点的后继节点。
8.根据权利要求5所述的方法,其特征在于,所述方法还包括:
获取待删除数据,所述待删除数据包括第五子数据和第六子数据;
根据所述第五子数据确定所述待删除数据的存储节点;
当所述存储节点属于所述冲突域时,将所述存储节点中的数据和所述存储节点所属链表中头结点的数据进行交换;
将交换后所述存储节点所属链表的头结点删除。
9.一种数据查找装置,其特征在于,所述装置包括:
第一获取模块,用于从数据查找指令中获取索引数据;
划分模块,用于对所述索引数据进行高低位划分,得到第一子数据和第二子数据;
第一确定模块,用于以所述第一子数据为索引,从预设哈希表中确定候选存储节点;
第一查找模块,用于若所述候选存储节点数据域中的存储数据包括所述第二子数据,则将所述存储数据和所述第一子数据进行合并,得到待查找数据;
第二查找模块,用于若所述候选存储节点数据域中的存储数据不包括所述第二子数据,则遍历以所述候选存储节点为头结点的链表,以根据链表结点中包含所述第二子数据的存储数据和所述第一子数据得到所述待查找数据。
10.一种计算机设备,其特征在于,包括:
存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1至8中任一项所述的数据查找方法。
CN202311843029.1A 2023-12-28 2023-12-28 一种数据查找方法、装置、设备及存储介质 Pending CN117971899A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311843029.1A CN117971899A (zh) 2023-12-28 2023-12-28 一种数据查找方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311843029.1A CN117971899A (zh) 2023-12-28 2023-12-28 一种数据查找方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN117971899A true CN117971899A (zh) 2024-05-03

Family

ID=90862226

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311843029.1A Pending CN117971899A (zh) 2023-12-28 2023-12-28 一种数据查找方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN117971899A (zh)

Similar Documents

Publication Publication Date Title
CN107832062B (zh) 一种程序更新方法及终端设备
CN110555001B (zh) 数据处理方法、装置、终端及介质
US20150113230A1 (en) Directory storage method and query method, and node controller
US20100228914A1 (en) Data caching system and method for implementing large capacity cache
CN110674053A (zh) Ssd数据存储节点管理方法、装置、计算机设备及存储介质
CN110489405B (zh) 数据处理的方法、装置和服务器
CN107992577B (zh) 一种哈希表数据冲突处理方法及装置
CN109213450B (zh) 一种基于闪存阵列的关联元数据删除方法、装置及设备
CN112579595A (zh) 数据处理方法、装置、电子设备及可读存储介质
CN108377394A (zh) 视频编码器的图像数据读取方法、计算机装置及计算机可读存储介质
CN113867627A (zh) 一种存储系统性能优化方法及系统
CN111930924A (zh) 基于布隆过滤器的数据查重系统及方法
CN107451070B (zh) 一种数据的处理方法和服务器
CN112650692A (zh) 堆内存分配方法、装置及存储介质
CN116431080B (zh) 一种数据落盘方法、系统、设备及计算机可读存储介质
CN108804571B (zh) 一种数据存储方法、装置以及设备
CN115964002A (zh) 一种电能表终端档案管理方法、装置、设备及介质
CN117971899A (zh) 一种数据查找方法、装置、设备及存储介质
CN111752941A (zh) 一种数据存储、访问方法、装置、服务器及存储介质
CN112269665B (zh) 内存的处理方法和装置、电子设备和存储介质
CN115114289A (zh) 一种数据查询方法、装置及电子设备
CN111104435B (zh) 一种元数据组织方法、装置、设备及计算机可读存储介质
CN110413617B (zh) 一种根据数据量的大小动态调节哈希表组的方法
CN112068948B (zh) 数据散列方法、可读存储介质和电子设备
CN110674170B (zh) 基于链表逆序访问的数据缓存方法、装置、设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination