CN104809135A - 一种数据存取方法及装置 - Google Patents

一种数据存取方法及装置 Download PDF

Info

Publication number
CN104809135A
CN104809135A CN201410040329.0A CN201410040329A CN104809135A CN 104809135 A CN104809135 A CN 104809135A CN 201410040329 A CN201410040329 A CN 201410040329A CN 104809135 A CN104809135 A CN 104809135A
Authority
CN
China
Prior art keywords
node
index value
hash bucket
sequence number
chained list
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.)
Granted
Application number
CN201410040329.0A
Other languages
English (en)
Other versions
CN104809135B (zh
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.)
Tencent Technology Shenzhen Co Ltd
Tencent Cloud Computing Beijing Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201410040329.0A priority Critical patent/CN104809135B/zh
Publication of CN104809135A publication Critical patent/CN104809135A/zh
Application granted granted Critical
Publication of CN104809135B publication Critical patent/CN104809135B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

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

Abstract

一种数据存取方法,包括:在存储器中构建哈希桶和链表,接收存储数据的指令并获取要存储的对象,新分配一个链表的节点,并在该节点内写入该对象的序列号以及过期时间,将该节点插入到该链表中对应的位置使该链表中所有节点按照过期时间排序,根据该序列号获取一个索引值,将该对象以及该节点的地址存储在该哈希桶中下标为该索引值的位置。还提供一种数据存取装置,上述方法及装置可实现对数据高效的添加、查找、删除操作,以及实现高效的状态机超时检测操作。

Description

一种数据存取方法及装置
技术领域
本发明涉及数据处理领域,尤其涉及一种数据存取方法及装置。
背景技术
在服务器模块开发过程中,经常会用到状态机,状态机对应的是一个数据结构,状态机的每一个状态的变化都是由于网络收发引起的,而在全异步的服务器模型中,为了实现IO复用,映射关系频繁被使用,并且服务器需要感知到状态机的超时。
现有技术中,标准模板库(STL,Standard Template Library)是C++标准库里的一个数据结构,内部是由红黑树实现的。
在以上现有技术中,数据处理效率低,需要平衡树结构,哈希算法选择不适当,会造成冲突较多,并且检测状态机超时需要遍历全部元素,检测效率低。
发明内容
有鉴于此,本发明提供一种数据存取方法及装置,可实现对数据高效的存取操作。
本发明实施例提供的数据存取方法,包括:
在存储器中构建哈希桶和链表;
接收存储数据的指令并获取要存储的对象;
新分配一个链表的节点,并在所述节点内写入所述对象的序列号以及过期时间;
将所述节点插入到所述链表中对应的位置使所述链表中所有节点按照过期时间排序;
根据所述序列号获取一个索引值;
将所述对象以及所述节点的地址存储在所述哈希桶中下标为所述索引值的位置。
本发明实施例提供的数据存取装置,包括:
构建模块,用于在存储器中构建哈希桶和链表;
第一获取模块,用于接收存储数据的指令并从所述指令中获取要存储的对象;
链表存储模块,用于新分配一个链表的节点模块,并在所述节点内写入所述对象的序列号以及过期时间;
链表排序模块,用于将所述节点插入到所述链表中对应的位置使所述链表中所有节点按照过期时间排序;
索引值获取模块,用于根据所述序列号获取一个索引值;
存储模块,用于将所述对象以及所述节点的地址存储在所述哈希桶中下标为所述索引值的位置。
本发明实施例提供的数据存取方法及装置,通过在互相可定位的哈希桶和链表组成的数据结构中,在链表中存储节点以及节点对应的数据,并根据存储位置生成索引值,以在哈希桶中快速定位需要处理的对象,用以实现高效的添加操作。并且,可以快速查找到过期的节点,提高处理过期节点的效率。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
图1为计算装置的一个实施例的结构框图。
图2为第一实施例提供的数据存取方法流程图。
图3为第一实施例的方法中采用的哈希桶与链表的存储结构示意图。
图4为第二实施例提供的数据存取方法流程图。
图5为第三实施例提供的数据存取方法流程图。
图6为第四实施例提供的数据存取方法流程图。
图7为第五实施例提供的数据存储装置的结构框图。
图8为第六实施例提供的数据存储装置的结构框图。
具体实施方式
为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明的具体实施方式、结构、特征及其功效,详细说明如后。
本发明实施例提供一种数据存取方法及装置,其用于计算装置中实现对一些特定类型的数据结构进行查询、新增、删除、遍历等操作。上述的特定类型的数据结构例如是指状态机,但也可以为其他数据结构。上述的计算装置例如可包括服务器、个人计算机、移动电子终端等。
状态机对应的是一个数据结构,其具有多个状态,而每一个状态的变化都是由于网络收发引起的,而在全异步的服务器模型中,为了实现IO(例如网络连接)复用,映射关系频繁被使用,并且服务器需要感知到状态机的超时。当然,状态机也并不限于仅在服务器中被使用,任意计算机或者其他计算装置中使用。
图1为上述的计算装置的一个实施例的结构框图。如图1所示,计算装置100包括:存储器102、存储控制器104、一个或多个(图中仅示出一个)处理器106、外设接口108以及网络模块110。可以理解,图1所示的结构仅为示意,其并不对计算装置100的结构造成限定。例如,计算装置100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器102可用于存储软件程序以及模块,如本发明实施例中的计算任务处理方法及装置对应的程序指令/模块,处理器104通过运行存储在存储器102内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的方法。
存储器102可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器102可进一步包括相对于处理器106远程设置的存储器,这些远程存储器可以通过网络连接至计算装置100。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。处理器106以及其他可能的组件对存储器102的访问可在存储控制器104的控制下进行。
外设接口108将各种输入/输入装置耦合至处理器106。处理器106运行存储器102内的各种软件、指令计算装置100执行各种功能以及进行数据处理。在一些实施例中,外设接口108、处理器106以及存储控制器104可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。
网络模块110用于接收以及发送网络信号。上述网络信号可包括无线信号或者有线信号。在一个实例中,上述网络信号为有线网络信号。此时,网络模块110可包括处理器、随机存储器、转换器、晶体振荡器等元件。
上述的软件程序以及模块包括:操作系统122以及数据存取模块124。其中操作系统122例如可为LINUX,UNIX,WINDOWS,其可包括各种用于管理系统任务(例如存储器管理、存储设备控制、电源管理等)的软件组件和/或驱动,并可与各种硬件或软件组件相互通讯,从而提供其他软件组件的运行环境。数据存取模块124运行在操作系统122的基础上,其具体实现本发明实施例提供的数据存取方法,以下结合实施例对上述方法进行描述。
第一实施例提供一种数据存取方法,请参阅图2,本实施例的方法包括:
步骤201、在存储器中构建哈希桶和链表。
处理器106在存储器102中划出一部分存储空间来构建哈希桶和链表,该哈希桶和链表是基于要存储的对象相互关联的。图3为上述的哈希桶及链表的存储结构示意图。哈希桶301是一个结构化数组,可以采用H[N](N为自然数)来表示,其内每个项目H[i](i为自然数且小于等于N)的成员包括序列号、节点地址以及有效数据,其中序列号是一个无符号的整形数值,节点地址是指链表302中对应的节点的地址,而有效数据是指实际此结构实际承载的数据,例如上述的状态机。链表302中的每个节点的成员包括:序列号以及过期时间。
哈希桶301中的每个项目是与要存储的对象一一对应的,链表302中的每个节点也是与要存储的对象一一对应的,而且哈希桶301与链表302中用于存储同一对象的项目或者节点也是相互关联的。具体地,对应于同一对象,若其在链表302内存储的节点的序列号为i,则根据序列号可直接获取一个索引值k,其在哈希桶301中对应的哈希桶项目即为H[k],由于哈希桶的特性,在访问链表302的节点时,通过序列号可以直接定位至哈希桶301中的项目。此外,在哈希桶301的项目中还存储有节点地址,其直接指向链表302中的一个节点,根据节点地址,也可以直接访问链表302中的节点。由此,哈希桶301与链表302可以实现双向快速定位。
步骤202、接收存储数据的指令并获取要存储的对象;
例如,当计算装置100需要保存新的映射关系,例如用户与网络连接之间的映射关系时,其可以为该用户创建状态机,然后计算装置100可将创建的状态机传递给专门的存储模块进行存储。可以理解,此处的存储模块是指数据存取模块124中用于进行存储的子功能模块。相应地,存储模块接收存储数据的指令,并获取要存储的对象(例如上述的状态机)。
步骤203、新分配一个链表的节点,并在该节点内写入该对象的序列号以及过期时间;
根据获取的存储的对象,为其新分配一个链表302的节点,并在该节点内写入该对象的序列号以及过期时间。链表302中的序列号可以是连续进行分配的。过期时间是指超过该时间后存储的对象过期,其所存储的映射关系也不再生效。
步骤204、将该节点插入到该链表中对应的位置,使该链表中所有节点按照过期时间排序;
按照节点的过期时间大小的顺序,根据该节点的过期时间在各个节点的过期时间大小的顺序中的位置,将该节点插入到链表202中对应的位置,使链表202中所有节点按照过期时间排序。
例如,链表中节点1的过期时间是2秒,节点2的过期时间是3秒,节点3的过期时间是5秒,新分配的节点过期时间是4秒,则应将该节点插入链表中节点2和节点3之间的位置。从而使该链表中所有节点按照过期时间排序。
步骤205、根据该序列号获取一个索引值;
例如,可以直接采用该序列号作为索引值,还可以采用一定的算法根据序列号计算索引值。
在一个实例中,索引值=序列号%SIZE,其中%表示取模操作,而SIZE表示哈希桶301的长度。
步骤206、将该对象以及该节点的地址存储在该哈希桶中下标为该索引值的位置。
将存取数据的指令中获取的存储的对象,以及该新分配的节点的地址存储在哈希桶301中下标为该索引值的位置。这样,根据该索引值便可获取存储的对象。
根据本实施例中的数据存储方法,通过在互相可定位的哈希桶和链表组成的数据结构中,在链表中存储节点以及节点对应的数据,并根据存储位置生成索引值,以在哈希桶中快速定位需要处理的对象,用以实现高效的添加、查找、删除操作。并且,可以快速查找到过期的节点,提高处理过期节点的效率。
本发明第二实施例提供一种数据存取方法,请参阅图4,上述方法包括:
步骤401、接收查找数据的指令并获取查找对象的序列号;
上述第一实施例中的哈希桶301和链表302构成的数据结构中,哈希桶301和链表302是基于要存储的对象相互关联的,哈希桶301是一个结构化数组,其内每个项目的成员包括序列号、节点地址以及有效数据,节点序列号是按照预置规则为节点配置的序列号,节点地址是指链表302中对应的节点的地址,而有效数据是指实际此结构实际承载的数据。链表302中的每个节点的成员包括:序列号以及过期时间。哈希桶301中的每个项目是与要存储的对象一一对应的,链表302中的每个节点也是与要存储的对象一一对应的,而且哈希桶301与链表302中用于存储同一对象的项目或者节点也是相互关联的。由于哈希桶的特性,在访问链表302的节点时,通过序列号可以直接定位至哈希桶301中的项目。此外,在哈希桶301的项目中还存储有节点地址,其直接指向链表302中的一个节点,根据节点地址,也可以直接访问链表302中的节点。由此,哈希桶301与链表302可以实现双向快速定位。因此,通过上述数据结构可实现快速查找功能。
具体地,接收查找数据的指令,并根据该指令获取查找对象的序列号。例如,获取的查找对象是节点3,其序列号是3。
步骤402、根据该查找对象的序列号获取该查找对象在该哈希桶内的索引值;
例如,可以直接采用该序列号作为索引值,还可以采用一定的算法根据序列号计算索引值。
在一个实例中,索引值=序列号%SIZE,其中%表示取模操作,而SIZE表示哈希桶301的长度。具体地,根据查找对象节点3的序列号3,哈希桶SIZE是20,则对该哈希桶进行SIZE取模,获取该节点在该哈希桶内的索引值3。
步骤403、若该哈希桶中与该查找对象的索引值对应的位置不为空,则返回该哈希桶中与该目标对象的索引值对应的记录。
例如,若与该查找对象的索引值3对应的哈希桶301的位置不为空,则返回哈希桶301中与该目标对象的索引值对应的记录,该记录可以是与节点3对应的有效数据。本实施例中的查找对象的方法是O(1)的,O(1)是指可以在常数步内可以完成。
根据本实施例中的数据存储方法,通过在互相可定位的哈希桶和链表组成的数据结构中,在链表中存储节点以及节点对应的数据,并通过根据存储位置生成的索引值,在该哈希桶中与该查找对象的索引值对应的位置的记录,以实现在哈希桶中快速定位需要处理的对象,提高处理速度。
本发明第三实施例提供一种数据存取方法,请参阅图5,上述方法包括:
步骤501、接收删除数据的指令并获取删除对象的序列号;
上述第一实施例中的哈希桶301和链表302构成的数据结构中,上述第一实施例中的哈希桶301和链表302构成的数据结构中,哈希桶301和链表302是基于要存储的对象相互关联的,哈希桶301是一个结构化数组,其内每个项目的成员包括序列号、节点地址以及有效数据,节点序列号是按照预置规则为节点配置的序列号,节点地址是指链表302中对应的节点的地址,而有效数据是指实际此结构实际承载的数据。链表302中的每个节点的成员包括:序列号以及过期时间。哈希桶301中的每个项目是与要存储的对象一一对应的,链表302中的每个节点也是与要存储的对象一一对应的,而且哈希桶301与链表302中用于存储同一对象的项目或者节点也是相互关联的。由于哈希桶的特性,在访问链表302的节点时,通过序列号可以直接定位至哈希桶301中的项目。此外,在哈希桶301的项目中还存储有节点地址,其直接指向链表302中的一个节点,根据节点地址,也可以直接访问链表302中的节点。由此,哈希桶301与链表302可以实现双向快速定位。
因此,通过上述数据结构可实现快速删除功能。
具体地,接收删除数据的指令,并根据该删除指令获取删除对象的序列号。例如,获取的删除对象是节点6,其序列号是6。
步骤502、根据该删除对象的序列号获取该删除对象在该哈希桶内的索引值;
例如,可以直接采用该序列号作为索引值,还可以采用一定的算法根据序列号计算索引值。
在一个实例中,索引值=序列号%SIZE,其中%表示取模操作,而SIZE表示哈希桶301的长度。具体地,根据删除对象节点6的序列号6,哈希桶SIZE是20,对该哈希桶进行SIZE取模,获取节点6在该哈希桶内的索引值6。
步骤503、从该哈希桶中与该删除对象的索引值对应的位置获取该链表中与该删除对象对应的节点的地址;
例如,从该哈希桶中与该删除对象节点6的索引值6对应的位置获取该链表中与该删除对象节点6中对应的节点的地址。
步骤504、根据该链表中与该删除对象对应的节点的地址删除对应的节点;
根据链表302中与该删除对象对应的节点的地址删除对应的节点,例如,根据该链表中与该删除对象节点6中对应的节点的地址,将该对应的节点删除。
步骤505、将该哈希桶中与该删除对象的索引值对应的位置设置为表示为空的预设值。
将哈希桶201中与该删除对象节点6的索引值对应的位置,设置为表示为空的预设值,表示已经将节点6的数据从哈希桶中删除。本实施例中的删除对象的方法也是O(1)的。
根据本实施例中的数据存储方法,通过在互相可定位的哈希桶和链表组成的数据结构中,在链表中存储节点以及节点对应的数据,并通过根据存储位置生成的索引值,在该哈希桶中与该查找对象的索引值对应的位置的记录,以实现在哈希桶中快速定位并删除需要处理的对象,提高删除指令的处理速度。
本发明第四实施例提供一种数据存取方法,请参阅图6,上述方法包括:
步骤601、接收超时遍历的指令;
上述第一实施例中的哈希桶301和链表302构成的数据结构中,哈希桶301和链表302是基于要存储的对象相互关联的,哈希桶301是一个结构化数组,其内每个项目的成员包括序列号、节点地址以及有效数据,节点序列号是按照预置规则为节点配置的序列号,节点地址是指链表302中对应的节点的地址,而有效数据是指实际此结构实际承载的数据。链表302中的每个节点的成员包括:序列号以及过期时间。哈希桶301中的每个项目是与要存储的对象一一对应的,链表302中的每个节点也是与要存储的对象一一对应的,而且哈希桶301与链表302中用于存储同一对象的项目或者节点也是相互关联的。由于哈希桶的特性,在访问链表302的节点时,通过序列号可以直接定位至哈希桶301中的项目。此外,在哈希桶301的项目中还存储有节点地址,其直接指向链表302中的一个节点,根据节点地址,也可以直接访问链表302中的节点。由此,哈希桶301与链表302可以实现双向快速定位。通过上述数据结构可实现快速遍历全部节点以检测出超时节点的功能。
具体地,接收超时遍历的指令,该指令用于遍历各节点以确定节点是否过期。
步骤602、根据该超时遍历的指令判断当前节点是否已经过期;
根据该超时遍历的指令,判断当前节点是否已经过期。从左到右遍历链表中的每一个节点,对比当前节点中的时间是否小于当前时间,如果小于当前时间,则说明当前节点已经过期。
若该当前节点已经过期则执行步骤603。
步骤603、获取当前节点的序列号;
在链表302中获取当前节点的序列号。
步骤604、根据该当前节点的序列号获取对应的索引值;
例如,可以直接采用该序列号作为索引值,还可以采用一定的算法根据序列号计算索引值。
在一个实例中,索引值=序列号%SIZE,其中%表示取模操作,而SIZE表示哈希桶301的长度。根据该当前节点的序列号获取对应的索引值,例如,根据当前节点7的序列号7,哈希桶SIZE是20,对该哈希桶进行SIZE取模,获取节点7在该哈希桶内的索引值7。
步骤605、将该哈希桶中与该当前节点的索引值对应的位置设置为表示为空的预设值;
将哈希桶301中与该当前节点的索引值对应的位置,设置为表示为空的预设值,表示将此位置的记录删除。
步骤606、从该链表中删除该当前节点。
从链表302中删除该当前节点。
根据本实施例中的数据存储方法,通过在互相可定位的哈希桶和链表组成的数据结构中,在链表中存储节点以及节点对应的数据,并通过根据存储位置生成的索引值,根据该超时遍历的指令,判断当前节点是否已经过期,以实现在哈希桶中快速查找到过期节点,并将其删除,提高遍历超时节点指令的处理速度。
本发明第五实施例提供一种数据存取装置,其可用于图1所示的计算装置中,参阅图7,本实施例的装置包括:构建模块71、第一获取模块72、链表存储模块73、链表排序模块74、索引值获取模块75以及存储模块76。
构建模块71用于在存储器中构建哈希桶和链表;
处理器106在存储器102中划出一部分存储空间来构建哈希桶和链表,该哈希桶和链表是基于要存储的对象相互关联的。图3为上述的哈希桶及链表的存储结构示意图。哈希桶301是一个结构化数组,可以采用H[N](N为自然数)来表示,其内每个项目H[i](i为自然数且小于等于N)的成员包括序列号、节点地址以及有效数据,其中序列号是一个无符号的整形数值,节点地址是指链表302中对应的节点的地址,而有效数据是指实际此结构实际承载的数据,例如上述的状态机。链表302中的每个节点的成员包括:序列号以及过期时间。
哈希桶301中的每个项目是与要存储的对象一一对应的,链表302中的每个节点也是与要存储的对象一一对应的,而且哈希桶301与链表302中用于存储同一对象的项目或者节点也是相互关联的。具体地,对应于同一对象,若其在链表302内存储的节点的序列号为i,则根据序列号可直接获取一个索引值k,其在哈希桶301中对应的哈希桶项目即为H[k],由于哈希桶的特性,在访问链表302的节点时,通过序列号可以直接定位至哈希桶301中的项目。此外,在哈希桶301的项目中还存储有节点地址,其直接指向链表302中的一个节点,根据节点地址,也可以直接访问链表302中的节点。由此,哈希桶301与链表302可以实现双向快速定位。
第一获取模块72用于接收存储数据的指令,并从该指令中获取要存储的对象;
例如,当计算装置100需要保存新的映射关系,例如用户与网络连接之间的映射关系时,其可以为该用户创建状态机,然后计算装置100可将创建的状态机传递给专门的存储模块进行存储。可以理解,此处的存储模块是指数据存取模块124中用于进行存储的子功能模块。相应地,存储模块接收存储数据的指令,并获取要存储的对象(例如上述的状态机)。
链表存储模块73用于新分配一个链表的节点模块,并在该节点内写入该对象的序列号以及过期时间;
链表302中的序列号可以是连续进行分配的。过期时间是指超过该时间后存储的对象过期,其所存储的映射关系也不再生效。
链表排序模块74用于将该节点插入到该链表中对应的位置使该链表中所有节点按照过期时间排序;
索引值获取模块75还用于根据该序列号获取一个索引值;
例如,可以直接采用该序列号作为索引值,还可以采用一定的算法根据序列号计算索引值。
在一个实例中,索引值=序列号%SIZE,其中%表示取模操作,而SIZE表示哈希桶301的长度。
存储模块76用于将该对象以及该节点的地址存储在该哈希桶中下标为该索引值的位置。
关于本实施例的装置的其他细节,还可参阅图2以及相关说明。
根据本实施例中的数据存储方法,通过在互相可定位的哈希桶和链表组成的数据结构中,在链表中存储节点以及节点对应的数据,并根据存储位置生成索引值,以在哈希桶中快速定位需要处理的对象,用以实现高效的添加、查找、删除操作。并且,可以快速查找到过期的节点,提高处理过期节点的效率。
第六实施例提供一种数据存取装置,其可用于图1所示的计算装置中。参阅图8,本实施例的装置与图7所示的装置相似,其不同之处在于,还包括:第二获取模块81、返回模块82、第三获取模块83、节点地址获取模块84、模块删除模块85、第四获取模块86以及超时遍历模块87。
其中,第二获取模块81用于接收查找数据的指令并获取查找对象的序列号。
索引值获取模块75,还用于根据第二获取模块81获取的查找对象的序列号获取该查找对象在该哈希桶内的索引值。
返回模块82用于若该哈希桶中与该查找对象的索引值对应的位置不为空则返回该哈希桶中与该目标对象的索引值对应的记录。
第三获取模块83还用于接收删除数据的指令并获取删除对象的序列号;
索引值获取模块75还用于根据该删除对象的序列号获取该删除对象在该哈希桶内的索引值。
节点地址获取模块84用于从该哈希桶中与该删除对象的索引值对应的位置获取该链表中与该删除对象对应的节点的地址;
模块删除模块85用于根据该链表中与该删除对象对应的节点的地址删除对应的节点模块,并将该哈希桶中与该删除对象的索引值对应的位置设置为表示为空的预设值。
第四获取模块86用于接收超时遍历的指令。
超时遍历模块87用于在第四获取模块86获取超遍历的指令后进行以下步骤:
判断当前节点是否已经过期,若已经过期,则:
获取当前节点的序列号;
根据该当前节点的序列号获取对应的索引值;
将该哈希桶中与该当前节点的索引值对应的位置设置为表示为空的预设值并从该链表中删除该当前节点模块。
索引值获取模块75根据该序列号获取一个索引值包括:
根据该序列号与该哈希桶的长度进行取模运算得到一个索引值。
关于本实施例的装置的其他细节,还可参阅图2至图6以及相关说明。
根据本实施例中的数据存储方法,通过在互相可定位的哈希桶和链表组成的数据结构中,在链表中存储节点以及节点对应的数据,并根据存储位置生成索引值,以在哈希桶中快速定位需要处理的对象,用以实现高效的添加、查找、删除操作。并且,可以快速查找到过期的节点,提高处理过期节点的效率。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者装置中还存在另外的相同要素。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

Claims (10)

1.一种数据存取方法,其特征在于,包括:
在存储器中构建哈希桶和链表;
接收存储数据的指令并获取要存储的对象;
新分配一个链表的节点,并在所述节点内写入所述对象的序列号以及过期时间;
将所述节点插入到所述链表中对应的位置使所述链表中所有节点按照过期时间排序;
根据所述序列号获取一个索引值;
将所述对象以及所述节点的地址存储在所述哈希桶中下标为所述索引值的位置。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收查找数据的指令并获取查找对象的序列号;
根据所述查找对象的序列号获取所述查找对象在所述哈希桶内的索引值;
若所述哈希桶中与所述查找对象的索引值对应的位置不为空则返回所述哈希桶中与所述目标对象的索引值对应的记录。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收删除数据的指令并获取删除对象的序列号;
根据所述删除对象的序列号获取所述删除对象在所述哈希桶内的索引值;
从所述哈希桶中与所述删除对象的索引值对应的位置获取所述链表中与所述删除对象对应的节点的地址;
根据所述链表中与所述删除对象对应的节点的地址删除对应的节点;以及
将所述哈希桶中与所述删除对象的索引值对应的位置设置为表示为空的预设值。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收超时遍历的指令;
根据所述超时遍历的指令对所述链表中的每个节点进行以下操作:
判断当前节点是否已经过期,若已经过期则:
获取当前节点的序列号;
根据所述当前节点的序列号获取对应的索引值;
将所述哈希桶中与所述当前节点的索引值对应的位置设置为表示为空的预设值并
从所述链表中删除所述当前节点。
5.根据权利要求1所述的方法,其特征在于,所述根据所述序列号获取一个索引值包括:
根据所述序列号与所述哈希桶的长度进行取模运算得到一个索引值。
6.一种数据存取装置,其特征在于,包括:
构建模块,用于在存储器中构建哈希桶和链表;
第一获取模块,用于接收存储数据的指令并从所述指令中获取要存储的对象;
链表存储模块,用于新分配一个链表的节点模块,并在所述节点内写入所述对象的序列号以及过期时间;
链表排序模块,用于将所述节点插入到所述链表中对应的位置使所述链表中所有节点按照过期时间排序;
索引值获取模块,用于根据所述序列号获取一个索引值;
存储模块,用于将所述对象以及所述节点的地址存储在所述哈希桶中下标为所述索引值的位置。
7.根据权利要求6所述的装置,其特征在于,还包括:
第二获取模块,用于接收查找数据的指令并获取查找对象的序列号;
所述索引值获取模块,还用于根据所述第二获取模块获取的查找对象的序列号获取所述查找对象在所述哈希桶内的索引值;
所述装置还包括:
返回模块,用于若所述哈希桶中与所述查找对象的索引值对应的位置不为空则返回所述哈希桶中与所述目标对象的索引值对应的记录。
8.根据权利要求6所述的装置,其特征在于,还包括:
第三获取模块,用于接收删除数据的指令并获取删除对象的序列号;
所述索引值获取模块,还用于根据所述第三获取模块获取的删除对象的序列号获取所述删除对象在所述哈希桶内的索引值;
所述装置还包括:
节点地址获取模块,用于从所述哈希桶中与所述删除对象的索引值对应的位置获取所述链表中与所述删除对象对应的节点的地址;
模块删除模块,用于根据所述链表中与所述删除对象对应的节点的地址删除对应的节点模块并将所述哈希桶中与所述删除对象的索引值对应的位置设置为表示为空的预设值。
9.根据权利要求8所述的装置,其特征在于,还包括:
第四获取模块,用于获取超时遍历的指令;
超时遍历模块,用于在所述第四获取模块获取超遍历的指令后进行以下步骤:
判断当前节点是否已经过期,若已经过期则:
获取当前节点的序列号;
根据所述当前节点的序列号获取对应的索引值;
将所述哈希桶中与所述当前节点的索引值对应的位置设置为表示为空的预设值并从所述链表中删除所述当前节点模块。
10.根据权利要求6所述的装置,其特征在于,所述索引值获取模块根据所述序列号获取一个索引值包括:根据所述序列号与所述哈希桶的长度进行取模运算得到一个索引值。
CN201410040329.0A 2014-01-27 2014-01-27 一种数据存取方法及装置 Active CN104809135B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410040329.0A CN104809135B (zh) 2014-01-27 2014-01-27 一种数据存取方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410040329.0A CN104809135B (zh) 2014-01-27 2014-01-27 一种数据存取方法及装置

Publications (2)

Publication Number Publication Date
CN104809135A true CN104809135A (zh) 2015-07-29
CN104809135B CN104809135B (zh) 2019-01-11

Family

ID=53693960

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410040329.0A Active CN104809135B (zh) 2014-01-27 2014-01-27 一种数据存取方法及装置

Country Status (1)

Country Link
CN (1) CN104809135B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106570111A (zh) * 2016-11-01 2017-04-19 浙江宇视科技有限公司 一种数据存储方法及存储服务器
CN106777293A (zh) * 2016-12-29 2017-05-31 北京奇虎科技有限公司 数据存储和查找方法及装置
CN107623606A (zh) * 2016-07-15 2018-01-23 中国科学院声学研究所 基于openflow交换机的流表表项空闲超时检测方法
CN108804031A (zh) * 2017-05-04 2018-11-13 慧与发展有限责任合伙企业 最佳记录查找
CN108984431A (zh) * 2017-06-01 2018-12-11 北京京东尚科信息技术有限公司 用于清空过期缓存的方法和装置
CN109101643A (zh) * 2018-08-21 2018-12-28 智久(厦门)机器人科技有限公司上海分公司 数据信息表的构建、抗伪点全局匹配方法、装置及机器人
CN110427397A (zh) * 2018-04-27 2019-11-08 腾讯科技(深圳)有限公司 凭证数据查重方法及相关设备
CN110866152A (zh) * 2019-11-22 2020-03-06 深圳市元征科技股份有限公司 一种故障码检索方法、装置和电子设备及可读存储介质
CN111177109A (zh) * 2018-11-09 2020-05-19 北京京东尚科信息技术有限公司 一种删除过期键的方法和装置
CN111694559A (zh) * 2020-05-21 2020-09-22 北京云杉世纪网络科技有限公司 Gc程序语言中哈希表的实现方法及装置
CN112102014A (zh) * 2020-11-13 2020-12-18 支付宝(杭州)信息技术有限公司 一种记录用户资源的方法和装置
CN115985434A (zh) * 2022-12-06 2023-04-18 湘南学院 医疗大数据的数据处理方法及智能处理系统

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080192754A1 (en) * 2007-02-12 2008-08-14 Yoon-Jin Ku Routing system and method for managing rule entries of ternary content addressable memory in the same
US7702628B1 (en) * 2003-09-29 2010-04-20 Sun Microsystems, Inc. Implementing a fully dynamic lock-free hash table without dummy nodes
CN101951591A (zh) * 2010-08-17 2011-01-19 优视科技有限公司 根据移动终端的ua匹配资源的方法和装置
US20110264687A1 (en) * 2010-04-23 2011-10-27 Red Hat, Inc. Concurrent linked hashed maps
CN103019805A (zh) * 2011-09-20 2013-04-03 佳都新太科技股份有限公司 一种多线程环境下定时器的设置方法
CN103106222A (zh) * 2011-11-15 2013-05-15 阿里巴巴集团控股有限公司 定时器的处理方法及装置
US20130332434A1 (en) * 2012-06-11 2013-12-12 Actian Netherlands, B.V. System and method using partial just-in-time complation to resolve memory access pattern problems in hash table probing

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7702628B1 (en) * 2003-09-29 2010-04-20 Sun Microsystems, Inc. Implementing a fully dynamic lock-free hash table without dummy nodes
US20080192754A1 (en) * 2007-02-12 2008-08-14 Yoon-Jin Ku Routing system and method for managing rule entries of ternary content addressable memory in the same
US20110264687A1 (en) * 2010-04-23 2011-10-27 Red Hat, Inc. Concurrent linked hashed maps
CN101951591A (zh) * 2010-08-17 2011-01-19 优视科技有限公司 根据移动终端的ua匹配资源的方法和装置
CN103019805A (zh) * 2011-09-20 2013-04-03 佳都新太科技股份有限公司 一种多线程环境下定时器的设置方法
CN103106222A (zh) * 2011-11-15 2013-05-15 阿里巴巴集团控股有限公司 定时器的处理方法及装置
US20130332434A1 (en) * 2012-06-11 2013-12-12 Actian Netherlands, B.V. System and method using partial just-in-time complation to resolve memory access pattern problems in hash table probing

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107623606B (zh) * 2016-07-15 2019-12-17 中国科学院声学研究所 基于openflow交换机的流表表项空闲超时检测方法
CN107623606A (zh) * 2016-07-15 2018-01-23 中国科学院声学研究所 基于openflow交换机的流表表项空闲超时检测方法
CN106570111A (zh) * 2016-11-01 2017-04-19 浙江宇视科技有限公司 一种数据存储方法及存储服务器
CN106777293A (zh) * 2016-12-29 2017-05-31 北京奇虎科技有限公司 数据存储和查找方法及装置
CN108804031A (zh) * 2017-05-04 2018-11-13 慧与发展有限责任合伙企业 最佳记录查找
CN108804031B (zh) * 2017-05-04 2021-10-01 慧与发展有限责任合伙企业 最佳记录查找
CN108984431B (zh) * 2017-06-01 2021-04-30 北京京东尚科信息技术有限公司 用于清空过期缓存的方法和装置
CN108984431A (zh) * 2017-06-01 2018-12-11 北京京东尚科信息技术有限公司 用于清空过期缓存的方法和装置
CN110427397A (zh) * 2018-04-27 2019-11-08 腾讯科技(深圳)有限公司 凭证数据查重方法及相关设备
CN110427397B (zh) * 2018-04-27 2023-03-21 腾讯科技(深圳)有限公司 凭证数据查重方法及相关设备
CN109101643A (zh) * 2018-08-21 2018-12-28 智久(厦门)机器人科技有限公司上海分公司 数据信息表的构建、抗伪点全局匹配方法、装置及机器人
CN111177109A (zh) * 2018-11-09 2020-05-19 北京京东尚科信息技术有限公司 一种删除过期键的方法和装置
CN110866152A (zh) * 2019-11-22 2020-03-06 深圳市元征科技股份有限公司 一种故障码检索方法、装置和电子设备及可读存储介质
CN111694559A (zh) * 2020-05-21 2020-09-22 北京云杉世纪网络科技有限公司 Gc程序语言中哈希表的实现方法及装置
CN111694559B (zh) * 2020-05-21 2023-07-21 北京云杉世纪网络科技有限公司 Gc程序语言中哈希表的实现方法及装置
CN112102014A (zh) * 2020-11-13 2020-12-18 支付宝(杭州)信息技术有限公司 一种记录用户资源的方法和装置
CN115985434A (zh) * 2022-12-06 2023-04-18 湘南学院 医疗大数据的数据处理方法及智能处理系统
CN115985434B (zh) * 2022-12-06 2023-10-20 湘南学院 医疗大数据的数据处理方法及智能处理系统

Also Published As

Publication number Publication date
CN104809135B (zh) 2019-01-11

Similar Documents

Publication Publication Date Title
CN104809135A (zh) 一种数据存取方法及装置
CN103440208B (zh) 一种数据存储的方法及装置
CN105808622A (zh) 一种文件存储的方法和装置
CN102968498A (zh) 数据处理方法及装置
CN101944124A (zh) 分布式文件系统管理方法、装置以及对应的文件系统
CN101315628A (zh) 内存数据库系统及实现内存数据库的方法和装置
CN109471838B (zh) 目录文档的操作方法、装置、电子设备、可读存储介质
CN104298541A (zh) 云存储系统的数据分布算法及其装置
CN103500191A (zh) 一种流表配置、查询、表项删除方法及装置
CN105574054A (zh) 一种分布式缓存范围查询方法、装置及系统
CN106302632A (zh) 一种基础镜像的下载方法以及管理节点
US20150170316A1 (en) Subgraph-based distributed graph processing
CN104423961A (zh) 一种生成测试脚本的方法及系统
CN104317795A (zh) 一种二维过滤器的生成方法、查询方法及装置
CN103688257A (zh) 元数据管理方法和装置
CN104424256A (zh) 布隆过滤器生成方法和装置
CN105183768A (zh) 一种文件管理方法、装置和终端设备
CN103366021A (zh) 一种云计算平台上的变邻域搜索方法及系统
CN104956340A (zh) 可扩展数据重复删除
CN106161106A (zh) 一种应用于有向拓扑图的节点聚合方法及装置
CN104462577A (zh) 一种数据存储方法及装置
CN104932986A (zh) 一种数据重分布方法及装置
CN103559307A (zh) 一种查询的缓存方法及装置
CN103930890B (zh) 数据处理方法、装置及重删处理器
CN111813517A (zh) 任务队列的分配方法、装置、计算机设备及介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20190730

Address after: 518057 Nanshan District science and technology zone, Guangdong, Zhejiang Province, science and technology in the Tencent Building on the 1st floor of the 35 layer

Co-patentee after: Tencent cloud computing (Beijing) limited liability company

Patentee after: Tencent Technology (Shenzhen) Co., Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: Tencent Technology (Shenzhen) Co., Ltd.

TR01 Transfer of patent right