CN101350010B - 一种哈希表的操作方法 - Google Patents
一种哈希表的操作方法 Download PDFInfo
- Publication number
- CN101350010B CN101350010B CN2007100495729A CN200710049572A CN101350010B CN 101350010 B CN101350010 B CN 101350010B CN 2007100495729 A CN2007100495729 A CN 2007100495729A CN 200710049572 A CN200710049572 A CN 200710049572A CN 101350010 B CN101350010 B CN 101350010B
- Authority
- CN
- China
- Prior art keywords
- hash table
- nuclear
- node
- memory
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种哈希表的操作方法,涉及一种主从式并行多核处理器系统下哈希表操作的方法,目的是提供一种在主从式多核处理器系统中,能够高效地对Hash表进行创建、插入等操作,并使Hash表的上述操作不影响Hash表查找性能的Hash表的操作方法,包括以下步骤:在主核上进行哈希表管理中的表创建和内存分配操作;哈希表的查找、插入、删除、更新操作在创建了哈希表的各个核上进行,上述操作都在同一个线程或任务中完成,表创建操作是指在主核上进行操作,为需要创建表的每个核创建一张哈希表;内存分配是指主核为各个哈希表总的表项数对应的节点分配所需要的内存,并将这些内存节点通过链表链接起来。本发明适用于主从式并行多核处理器系统。
Description
技术领域
本发明涉及哈希表的操作方法,尤其涉及一种主从式并行多核处理器系统下哈希表操作的方法。
背景技术
哈希表(Hash)表因其结构简单并且查找速度快,又可以很方便地替换Hash算法,故而常常被用以存储关键的数据。Hash表一般组织为数组加双向链表的结构,其中链表作为Hash桶用以解决Hash冲突的情况。
Hash表的管理涉及创建、插入、删除、更新等操作。因Hash表用来存储关键数据,故而查找性能是一个关键指标,要求越快越好,所以Hash表管理的操作方法的不同对Hash表查找性能的影响也不同。
在共享存储器的主从式结构的多核处理器系统中,各个处理器核(简称核)的功能是不一样的,如有的核上没有内存管理部分。若所有需要通过Hash表来管理的数据共用一张Hash表,为保证数据的一致性和完整性,需要加信号量或锁进行数据保护,这种数据保护措施对查找性能的影响非常大。若每个核分别用自己的一张表,但管理仍旧在一个核上,查找操作在各个核上进行,同样涉及到数据的保护问题,从而影响查找性能。若每个核分别用自己的一张表,管理和查找都只在自己的核上进行,则要求各个核都有内存管理功能,这对一些主从式多核处理器系统不适用。
发明内容
本发明的目的在于克服上述现有技术中的不足,提供一种在主从式多核处理器系统中,能够高效地对Hash表进行创建、插入等管理操作,并使Hash表的上述操作不影响Hash表查找性能的Hash表的操作方法,包括以下步骤:
a、在主核上进行哈希表管理中的表创建和内存分配操作;
b、哈希表的查找、插入、删除、更新操作在创建了哈希表的各个核上进 行,上述操作都在同一个线程或任务中完成。
更具体而言,所述步骤a中,表创建操作是指在主核上进行操作,为需要创建表的每个核创建一张哈希表;内存分配是指主核为各个哈希表总的表项数对应的节点分配所需要的内存,并将这些内存节点通过链表链接起来。上述需要创建表的每个核根据具体需要而定,可以是仅有主核,或是除主核以外的全部从核,或是除主核以外的部分从核,或是包括主核和全部从核,或是包括主核和部分从核。
所述步骤b中,在各个核上进行的哈希表的插入操作是在各个从核上,从已有的内存节点链表上取下首节点,对节点赋值,然后插入到该从核的哈希表中相应的哈希桶的第一个节点位置前。
所述步骤b中,在各个核上进行的哈希表的删除操作是在各个从核上,从该从核的哈希表中取下需删除的节点,并不释放内存,而是将该节点重新放入内存节点链表的尾部。
从上述方法中可以看出,由于一个从核一张表,而各个从核中表的查找和管理都在一个线程或任务中进行,故查找时不需要加信号量或锁进行数据保护,查找性能很高。而在管理的操作中,对内存的分配在模块初始化时进行,以后使用仅涉及到链表的加或删插入或者删除操作,内存管理的问题得到解决,而且内存管理的代价非常小。
附图说明
图1是本发明中内存节点链表的示意图;
图2是本发明中实施例1的第一Hash表的示意图;
图3是本发明中实施例1的第二Hash表的示意图;
图4是本发明中一个节点的插入过程示意图。
图中标号:1是内存节点链表,2是第一Hash表,3是第二Hash表,3a是Hash桶链表的首节点。
具体实施方式
下面结合具体实施例,对本发明Hash表管理的操作方法作进一步详细的说明。
实施例1:本实施例是在具有一个主核和一个从核的主从式多核处理器系统中实施。图1、图2、图3是本实施例中两个核的Hash表和内存节点链表的示意图。图1、图2、图3中表示,初始化时,在主核上进行操作,创建和初始化第一Hash表2和第二Hash表3,其中第一Hash表2是主核用于数据管理的Hash上,第二Hash表3是从核用于数据管理的Hash表,然后主核为两个Hash表总的表项数对应的节点分配所需要的内存,并将这些内存节点通过内存节点链表1链接起来。为了限制内存的使用,一般需要限制总的Hash表的表项数,故而预留一定的内存是合理的。在主核上预先分配内存,可以简化从核的内存管理,或可以不需要从核有内存管理功能。分配好的内存节点的指针,不是存储在内存节点链表1上,就是存储在各个核的Hash表上。
图4是本实施例中从核上的第二Hash表3的节点的插入操作示意图。图4中,在从核上,查找发现没有对应的节点,需要新插入一个节点时,先取出内存节点链表1首部指针所指向的节点,此动作需要写锁保护,然后给新节点赋相应的数据值,经过冲突计算,将该新节点插入到第二Hash表3的对应第i个Hash桶链表的首节点3a之前。
在从核中,新插入节点时,先检查本核第二Hash表3的总项数,若总项数大于高水平阈值,则进行老化收缩,即删除一些节点,使总项数减少到低水平阈值。在老化删除时,遍历每个Hash表的Hash桶,当此Hash桶链表中总节点个数大于平均节点数,则删除掉Hash桶链表尾部的节点。删除时并不释放此节点的内存,而是将此节点放入内存节点链表1的尾部,加入内存节点链表时,需要加锁保护。
在从核中,对数据进行查找操作,当待查找数据查找不到时,会触发老化删除、插入、更新等Hash表的管理操作,这些查找和管理操作都在一个线程中进行。通过以上的查找处理方式,不需要保护数据指针,从而查找性能很高。
实施例2:本实施例是在具有一个主核和多个从核的主从式多核处理器系统 中实施。在主核上为包括主核和从核在内的每个核创建一张Hash表,并为每个核的Hash表总的表项数对应的节点分配所需要的内存,并将这些内存节点通过内存节点链表链接起来。
在Hash表进行查找操作时,主核的Hash表的查找操作在主核上进行,各个从核的Hash表的查找操作在相应的各个从核上进行。
各个从核上的插入、删除、更新操作如实施例1。
尽管上面对本发明说明性的具体实施方式进行了描述,但应当清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
Claims (4)
1.一种哈希表的操作方法,其特征在于,在共享内存的主从式多核处理器系统中,
a、在主核上进行哈希表管理中的表创建和内存分配操作;
b、哈希表的查找、插入、删除、更新操作在创建了哈希表的各个核上进行,上述操作都在同一个线程或任务中完成;
所述步骤a中,表创建操作是指在主核上进行操作,为需要创建表的每个核创建一张哈希表;内存分配是指主核为各个哈希表总的表项数对应的节点分配所需要的内存,并将这些内存节点通过链表链接起来。
2.根据权利要求1所述一种哈希表的操作方法,其特征在于,所述步骤b中,在各个核上进行的哈希表的插入操作是在各个从核上,从已有的内存节点链表上取下首节点,对节点赋值,然后插入到该从核的哈希表中相应的哈希桶的第一个节点位置前。
3.根据权利要求2所述一种哈希表的操作方法,其特征在于,所述步骤b中,在各个核上进行的哈希表的删除操作是在各个从核上,从该从核的哈希表中取下需删除的节点,并不释放内存,而是将该节点重新放入内存节点链表的尾部。
4.根据权利要求1所述一种哈希表的操作方法,其特征在于,所述步骤b中,在各个核上进行的哈希表的删除操作是在各个从核上,从该从核的哈希表中取下需删除的节点,并不释放内存,而是将该节点重新放入内存节点链表的尾部。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100495729A CN101350010B (zh) | 2007-07-20 | 2007-07-20 | 一种哈希表的操作方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007100495729A CN101350010B (zh) | 2007-07-20 | 2007-07-20 | 一种哈希表的操作方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101350010A CN101350010A (zh) | 2009-01-21 |
CN101350010B true CN101350010B (zh) | 2011-08-17 |
Family
ID=40268805
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007100495729A Active CN101350010B (zh) | 2007-07-20 | 2007-07-20 | 一种哈希表的操作方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101350010B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102117278B (zh) * | 2009-12-31 | 2016-10-05 | 联想(北京)有限公司 | 链表的创建方法及系统、数据的查找方法及系统 |
US8880554B2 (en) * | 2010-12-03 | 2014-11-04 | Futurewei Technologies, Inc. | Method and apparatus for high performance, updatable, and deterministic hash table for network equipment |
CN102325091B (zh) * | 2011-10-17 | 2014-09-17 | 迈普通信技术股份有限公司 | 内存释放方法和路由系统 |
CN102780641B (zh) * | 2012-08-17 | 2015-07-08 | 北京傲天动联技术股份有限公司 | 快速转发引擎的流表老化方法、装置以及交换机 |
CN107169055B (zh) * | 2017-04-27 | 2019-10-18 | 北京众享比特科技有限公司 | 一种数据库表的操作方法和操作系统 |
CN109360335A (zh) * | 2018-10-31 | 2019-02-19 | 湖南金码智能设备制造有限公司 | 一种自动组柜方法和自助购物系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1608249A (zh) * | 2001-10-22 | 2005-04-20 | 太阳微系统有限公司 | 多核心多线程处理器 |
-
2007
- 2007-07-20 CN CN2007100495729A patent/CN101350010B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1608249A (zh) * | 2001-10-22 | 2005-04-20 | 太阳微系统有限公司 | 多核心多线程处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN101350010A (zh) | 2009-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101350010B (zh) | 一种哈希表的操作方法 | |
CN103765381B (zh) | 对b+树的并行操作 | |
US9495398B2 (en) | Index for hybrid database | |
CN100543687C (zh) | 一种多核系统的资源管理方法和控制核 | |
CN104731799B (zh) | 内存数据库管理装置 | |
CN110032549B (zh) | 分区分裂方法、装置、电子设备及可读存储介质 | |
CN105930280A (zh) | 一种面向非易失性内存的高效的页面组织和管理方法 | |
JP2015090615A (ja) | データを管理するシステムおよび方法 | |
CN105320775A (zh) | 数据的存取方法和装置 | |
CN1963788A (zh) | 一种内存管理方法 | |
CN107016100A (zh) | 一种基于非易失性内存文件系统的元数据管理方法 | |
CN112000847B (zh) | 基于gpu并行的自适应基数树动态索引方法 | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN105095261A (zh) | 数据插入方法和装置 | |
US20160357673A1 (en) | Method of maintaining data consistency | |
WO2014179354A2 (en) | Index for fast batch updates of large data tables | |
CN105959419A (zh) | 基于一致性树的分布式存储结构的构建方法及系统 | |
KR20170065374A (ko) | 버킷 단위의 정렬을 기반으로 하는 해시 충돌 처리 방법 | |
CN102521143A (zh) | 一种堆数据处理方法及装置 | |
CN117271531B (zh) | 一种数据存储方法、系统、设备及介质 | |
CN106383826A (zh) | 数据库查询方法和装置 | |
CN103699681B (zh) | 数据回滚的处理方法和装置 | |
CN109492020A (zh) | 一种数据缓存方法、装置、电子设备及存储介质 | |
CN104753788A (zh) | 一种基于索引分配的数据转发方法及装置 | |
CA2439243C (en) | Organising data in a database |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |