一种用于访问关键字的方法及装置转让专利

申请号 : CN201210448336.5

文献号 : CN102937993B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 许瑞军王亚辉孙大庆

申请人 : 小米科技有限责任公司

摘要 :

本发明公开了一种用于访问关键字的方法和装置,其中,该方法包括:获取关键字对应的存储位置,其中,所述该关键字对应的存储位置是:在首次访问该关键字时,根据该关键字从哈希表获得、并记录的该关键字的键值的存储位置;根据获取的存储位置访问该关键字的键值。本发明实施例通过查找哈希表获得关键字的键值的存储位置后,将该存储位置记录下来,随后再次访问该关键字时只需根据记录的该存储位置即可获取或设置键值。减少了重复的计算过程,节省了时间,提高了效率。

权利要求 :

1.一种用于访问关键字的方法,其特征在于,包括以下步骤:获取关键字的键值对应的存储位置,其中,所述关键字的键值对应的存储位置是:在首次访问该关键字时,根据该关键字从哈希表获得、并记录的该关键字的键值的存储位置,所述哈希表中保存有关键字到关键字的键值的存储位置的映射关系;

根据获取的存储位置访问该关键字的键值。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:在首次访问该关键字时,无法从哈希表获得该关键字的键值的存储位置时,在哈希表中建立关键字到该关键字的键值的存储位置的映射关系。

3.根据权利要求2所述的方法,其特征在于,在哈希表中建立关键字到该关键字的键值的存储位置的映射关系的步骤包括:为关键字新建键值并存储;

获得键值的存储位置;

将所述关键字到所述键值的存储位置的映射关系存储至哈希表。

4.根据权利要求3所述的方法,其特征在于,所述为关键字新建键值并存储的步骤包括:为关键字新建键值并存储至预先建立的数据存储结构中。

5.根据权利要求4所述的方法,其特征在于,所述预先建立的数据存储结构包括数组或链表;

当所述数据存储结构为数组时,键值的存储位置为数组下标;当所述数据存储结构为链表时,键值的存储位置为链表的节点序号。

6.根据权利要求1所述的方法,其特征在于,当使用访问器访问关键字时,所述方法还包括:将获得的存储位置输入访问器。

7.一种用于访问关键字的装置,其特征在于,包括:获取模块,用于获取关键字的键值对应的存储位置;其中,所述关键字的键值对应的存储位置是:在首次访问该关键字时,根据该关键字从哈希表获得、并记录的该关键字的键值的存储位置,所述哈希表中保存有关键字到关键字的键值的存储位置的映射关系;

访问模块,用于根据获取的存储位置访问该关键字的键值。

8.根据权利要求7所述的装置,其特征在于,所述装置还包括:注册模块,用于在首次访问该关键字时,从哈希表无法获得该关键字的键值的存储位置时,在哈希表中建立关键字到该关键字的键值的存储位置的映射关系。

9.根据权利要求8所述的装置,其特征在于,所述注册模块用于:为关键字新建键值并存储;

获得键值的存储位置;

将所述关键字到所述键值的存储位置的映射关系存储至哈希表。

10.根据权利要求9所述的装置,其特征在于,所述注册模块用于:为关键字新建键值并存储至预先建立的数据存储结构中。

11.根据权利要求10所述的装置,其特征在于,所述预先建立的数据存储结构包括数组或链表;当所述数据存储结构为数组时,键值的存储位置为数组下标;当所述数据存储结构为链表时,键值的存储位置为链表的节点序号。

说明书 :

一种用于访问关键字的方法及装置

技术领域

[0001] 本发明涉及信息处理领域,更具体地,涉及一种用于访问关键字的方法及装置。

背景技术

[0002] 目前,哈希表广泛应用于网络数据包处理领域,如IP路由查找、数据包分类、负载均衡和网络安全系统等。在这些应用中,哈希表通常用于管理网络中的并发连接会话,以支持进一步的流粒度分析与处理。在高速网络环境下,并发连接数量庞大,可达数十万之多。
[0003] 有时需要利用哈希表访问关键字,即将关键字(key)通过哈希表映射到键值(value),如图1所示为现有哈希表的映射关系图,访问(包括查询get()和赋值set())关键字时需要将关键字通过哈希函数映射到键值。
[0004] 然而,从关键字到键值的映射需要经过复杂的计算,因此,在经常访问关键字,特别是频繁访问关键字时的情形下,将严重影响性能,降低工作效率,并造成资源浪费。

发明内容

[0005] 有鉴于此,本发明实施例的目的是提出一种用于访问关键字的方法和装置,其能够便捷地存取关键字的键值。
[0006] 为了达到上述目的,本发明实施例提出一种用于访问关键字的方法,包括以下步骤:
[0007] 获取关键字对应的存储位置;其中,所述关键字对应的存储位置是:在首次访问该关键字时,根据该关键字从哈希表获得、并记录的该关键字的键值的存储位置;
[0008] 根据获取的存储位置访问该关键字的键值。
[0009] 本发明实施例是根据保存有关键字到关键字的键值的存储位置的映射关系的哈希表,来获得并记录某个关键字的键值的存储位置,随后再次访问该关键字时只需根据记录的该存储位置就可以获取或设置键值。因此,减少了重复的计算过程,节省了时间,提高了效率,并且使用频繁时还可以提高系统的性能,显著提高了用户体验。
[0010] 作为上述技术方案的优选,在首次访问该关键字时,无法从哈希表获得该关键字的键值的存储位置时,在哈希表中建立关键字到该关键字的键值的存储位置的映射关系。
[0011] 作为上述技术方案的优选,在哈希表中建立关键字到该关键字的键值的存储位置的映射关系的步骤包括:
[0012] 为关键字新建键值并存储;
[0013] 获得键值的存储位置;
[0014] 将所述关键字到所述键值的存储位置的映射关系存储至哈希表。
[0015] 本方案给出了对关键字的访问进行封装的方法。
[0016] 作为上述技术方案的优选,所述为关键字新建键值并存储的步骤包括:
[0017] 为关键字新建键值并存储至预先建立的数据存储结构中。
[0018] 作为上述技术方案的优选,所述预先建立的数据存储结构包括数组或链表。当所述数据存储结构为数组时,键值的存储位置为数组下标;当所述数据存储结构为链表时,键值的存储位置为链表的节点序号。本方案给出了优选的两种数据存储结构。
[0019] 作为上述技术方案的优选,当使用访问器访问关键字时,所述方法还包括:将获得的存储位置输入访问器。
[0020] 本发明实施例还提出一种用于访问关键字的装置,包括:
[0021] 获取模块,用于获取关键字对应的存储位置;其中,所述关键字对应的存储位置是:在首次访问该关键字时,根据该关键字从哈希表获得、并记录的该关键字的键值的存储位置;
[0022] 访问模块,用于根据获取的存储位置访问该关键字的键值。
[0023] 作为上述技术方案的优选,所述装置还包括:
[0024] 注册模块,用于在首次访问该关键字时,无法从哈希表获得该关键字的键值的存储位置时,在哈希表中建立关键字到该关键字的键值的存储位置的映射关系。
[0025] 作为上述技术方案的优选,所述注册模块用于:
[0026] 为关键字新建键值并存储;
[0027] 获得键值的存储位置;
[0028] 将所述关键字到所述键值的存储位置的映射关系存储至哈希表。
[0029] 作为上述技术方案的优选,所述注册模块用于:
[0030] 为关键字新建键值并存储预先建立的数据存储结构中。
[0031] 作为上述技术方案的优选,所述预先建立的数据存储结构包括数组或链表。当所述数据存储结构为数组时,键值的存储位置为数组下标;当所述数据存储结构为链表时,键值的存储位置为链表的节点序号。
[0032] 本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
[0033] 下面通过附图和实施例,对本发明实施例的技术方案做进一步的详细描述。

附图说明

[0034] 附图用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明实施例的限制。在附图中:
[0035] 图1是目前关键字通过哈希表映射到键值的示意图;
[0036] 图2是本发明优选实施例提出的访问关键字的方法的流程图;
[0037] 图3是本发明一具体实施例提出的访问关键字的方法的流程图;
[0038] 图4是本发明另一具体实施例提出的访问关键字的方法的示意图;
[0039] 图5是本发明优选实施例提出的访问关键字的装置的结构示意图;
[0040] 图6是本发明一具体实施例提出的访问关键字的装置的结构示意图。

具体实施方式

[0041] 以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明实施例,并不用于限定本发明实施例。
[0042] 如图2所示为本发明优选实施例提出的一种用于访问关键字的方法,包括:
[0043] 步骤S21:获取关键字对应的存储位置;其中,所述关键字对应的存储位置是:在首次访问该关键字时,根据该关键字从哈希表获得、并记录的该关键字的键值的存储位置;
[0044] 步骤S22:根据获取的存储位置访问该关键字的键值;
[0045] 本发明实施例是根据保存有关键字到关键字的键值的存储位置的映射关系的哈希表,来获得并记录某个关键字的键值的存储位置,随后再次访问该关键字时只需根据记录的该存储位置就可以获取或设置键值。因此,减少了重复的计算过程,节省了时间,提高了效率,并且使用频繁时还可以提高系统的性能,显著提高了用户体验。
[0046] 下面通过其他具体实施例来对本发明实施例提出的用于访问关键字的方法进行详细说明。
[0047] 如图3所示为本发明提出的一种用于访问关键字的方法的具体实施例,在本实施例中,关键字的键值存储在预先建立的数组中。具体地,该方法包括以下步骤:
[0048] 步骤S31:首次对关键字Key1进行访问时,在哈希表中查找是否存在关键字Key1对应的数组下标;若是,执行步骤S34;若否,执行步骤S32。
[0049] 步骤S32:为关键字Key1新建键值value1存储到预先建立的数组中。
[0050] 其中,数组为较佳的数据存储结构。因为数组是将元素在内存中连续存放,由于每个元素占用内存相同,因此通过数组下标就可以迅速访问数组中任何元素,适用于需要快速访问数据的情形。
[0051] 优选地,数据存储结构还可以为链表。
[0052] 步骤S33:将键值value1在数组中的存储位置即数组下标和关键字Key1的映射关系存储至哈希表中。
[0053] 若数据存储结构为链表,键值在数据存储结构中的存储位置为链表的节点序号。
[0054] 上述步骤S32和步骤S33可以称为注册步骤(register())。
[0055] 步骤S34:根据从哈希表获得的关键字Key1对应的数组下标访问数组以获取或设置关键字Key1的键值value1。
[0056] 步骤S35:记录关键字Key1对应的数组下标。
[0057] 该步骤是本方案中的关键步骤,优选地,该步骤中所指的记录是临时存储,只在固定访问关键字Key1的范围内有效。这样不会增加额外的存储负担。
[0058] 应当注意的是,上述步骤S34和步骤S35的执行顺序可以互换,也可以同时执行。
[0059] 此后,若再次访问关键字Key1,则可以根据记录的数组下标访问数组以获取或设置关键字Key1的键值。而无需再根据关键字Key1去查找哈希表。
[0060] 本实施例是在根据哈希表从关键字映射到键值的基础上新增了数组,将原本关键字通过哈希表映射的键值存储到新增的数组中,而将数组下标放入哈希表中。如此,仅在第一次访问该关键字时需要将该关键字通过哈希表映射得到数组下标,并记录该数组下标,之后的访问都无需进行哈希映射,只需通过记录的数组下标直接访问数组。本发明实施例结合了哈希表的动态映射和数组访问的高效率,对于固定范围内关键字频繁访问的情形能带来很大的改善和提高。
[0061] 在本发明的另一具体实施例中,在实施对关键字的访问时,优选地,使用访问器访问关键字,即实现对关键字的使用的封装,以后对该关键字的访问(即获取键值或设置键值)都通过该访问器来操作。
[0062] 为关键字创建的访问器包括以下要素:关键字对应的存储位置,获取键值访问器和/或设置键值访问器。其中,获取键值访问器为get访问器,其功能是获取键值,设置键值访问器为set访问器,其功能是设置键值。
[0063] 如图4所示的使用访问器访问关键字的示意图,访问器具体实现了:
[0064] 1)关键字在全局第一次被访问时,发现在哈希表中没有找到对应的存储位置(即图中的数组下标)时,将关键字进行注册(register()),即在数组中创建键值,以及获得该键值的数组下标,并将该关键字和数组下标的映射关系存储至哈希表;
[0065] 2)关键字在此访问器第一次被访问时查找哈希表获得该关键字对应的数组下标;
[0066] 3)关键字在此访问器第二次及以后被访问时使用记录的数组下标获取或设置键值。
[0067] 相应地,如图5所示,本发明实施例还提出一种用于访问关键字的装置,包括:
[0068] 获取模块501,用于获取关键字对应的存储位置;其中,所述关键字对应的存储位置是:在首次访问该关键字时,根据该关键字从哈希表获得、并记录的该关键字的键值的存储位置;
[0069] 访问模块502,用于根据获取的存储位置访问该关键字的键值;
[0070] 优选地,所述装置还可以包括:
[0071] 注册模块503,用于在首次访问该关键字时,无法从哈希表获得该关键字的键值的存储位置时,在哈希表中建立关键字到该关键字的键值的存储位置的映射关系。
[0072] 注册模块503具体用于:
[0073] 为关键字新建键值并存储;
[0074] 获得键值的存储位置;
[0075] 将所述关键字到所述键值的存储位置的映射关系存储至哈希表。
[0076] 优选地,注册模块503用于:
[0077] 为关键字新建键值并存储预先建立的数据存储结构中。
[0078] 其中,所述预先建立的数据存储结构包括数组或链表。
[0079] 当所述数据存储结构为数组时,键值的存储位置为数组下标;当所述数据存储结构为链表时,键值的存储位置为链表的节点序号。
[0080] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0081] 本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0082] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0083] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0084] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。