一种数据存取方法,包括:在存储器中构建哈希桶和链表,接收存储数据的指令并获取要存储的对象,新分配一个链表的节点,并在该节点内写入该对象的序列号以及过期时间,将该节点插入到该链表中对应的位置使该链表中所有节点按照过期时间排序,根据该序列号获取一个索引值,将该对象以及该节点的地址存储在该哈希桶中下标为该索引值的位置。还提供一种数据存取装置,上述方法及装置可实现对数据高效的添加、查找、删除操作,以及实现高效的状态机超时检测操作。
【技术实现步骤摘要】
本专利技术涉及数据处理领域,尤其涉及一种数据存取方法及装置。
技术介绍
在服务器模块开发过程中,经常会用到状态机,状态机对应的是一个数据结构,状态机的每一个状态的变化都是由于网络收发引起的,而在全异步的服务器模型中,为了实现1复用,映射关系频繁被使用,并且服务器需要感知到状态机的超时。现有技术中,标准模板库(STL, Standard Template Library)是C++标准库里的一个数据结构,内部是由红黑树实现的。在以上现有技术中,数据处理效率低,需要平衡树结构,哈希算法选择不适当,会造成冲突较多,并且检测状态机超时需要遍历全部元素,检测效率低。
技术实现思路
有鉴于此,本专利技术提供一种数据存取方法及装置,可实现对数据高效的存取操作。本专利技术实施例提供的数据存取方法,包括:在存储器中构建哈希桶和链表;接收存储数据的指令并获取要存储的对象;新分配一个链表的节点,并在所述节点内写入所述对象的序列号以及过期时间;将所述节点插入到所述链表中对应的位置使所述链表中所有节点按照过期时间排序;根据所述序列号获取一个索引值;将所述对象以及所述节点的地址存储在所述哈希桶中下标为所述索引值的位置。本专利技术实施例提供的数据存取装置,包括:构建模块,用于在存储器中构建哈希桶和链表;第一获取模块,用于接收存储数据的指令并从所述指令中获取要存储的对象;链表存储模块,用于新分配一个链表的节点模块,并在所述节点内写入所述对象的序列号以及过期时间;链表排序模块,用于将所述节点插入到所述链表中对应的位置使所述链表中所有节点按照过期时间排序;索引值获取模块,用于根据所述序列号获取一个索引值;存储模块,用于将所述对象以及所述节点的地址存储在所述哈希桶中下标为所述索引值的位置。本专利技术实施例提供的数据存取方法及装置,通过在互相可定位的哈希桶和链表组成的数据结构中,在链表中存储节点以及节点对应的数据,并根据存储位置生成索引值,以在哈希桶中快速定位需要处理的对象,用以实现高效的添加操作。并且,可以快速查找到过期的节点,提高处理过期节点的效率。为让本专利技术的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。【附图说明】图1为计算装置的一个实施例的结构框图。图2为第一实施例提供的数据存取方法流程图。图3为第一实施例的方法中采用的哈希桶与链表的存储结构示意图。图4为第二实施例提供的数据存取方法流程图。图5为第三实施例提供的数据存取方法流程图。图6为第四实施例提供的数据存取方法流程图。图7为第五实施例提供的数据存储装置的结构框图。图8为第六实施例提供的数据存储装置的结构框图。【具体实施方式】为更进一步阐述本专利技术为实现预定专利技术目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本专利技术的【具体实施方式】、结构、特征及其功效,详细说明如后。 本专利技术实施例提供一种数据存取方法及装置,其用于计算装置中实现对一些特定类型的数据结构进行查询、新增、删除、遍历等操作。上述的特定类型的数据结构例如是指状态机,但也可以为其他数据结构。上述的计算装置例如可包括服务器、个人计算机、移动电子终端等。状态机对应的是一个数据结构,其具有多个状态,而每一个状态的变化都是由于网络收发引起的,而在全异步的服务器模型中,为了实现1 (例如网络连接)复用,映射关系频繁被使用,并且服务器需要感知到状态机的超时。当然,状态机也并不限于仅在服务器中被使用,任意计算机或者其他计算装置中使用。图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为自然数)来表示,其内每个项目H (i为自然数且小于等于N)的成员包括序列号、节点地址以及有效数据,其中序列号是一个无符号的整形数值,节点地址是指链表302中对应的节点的地址,而有效数据是指实际此结构实际承载的数据,例如上述的状态机。链表302中的每个节点的成员包括:序列号以及过期时间。哈希桶301中的每个项目是与要存储的对象--对应的,链表302中的每个节点也是与要存储的对象一一对应的,而且哈希桶301与链表302中用于存储同一对象的项目或者节点也是相互关联的。具体地,对应于同一对象,若其在链表302内存储的节点的序列号为i,则根据序列号可直接获取一个索引值k,其在哈希桶301中对应的哈希桶项目即为H,由于哈希桶的特性,在访问链表302的节点时,通过序列号可以直接定位至哈希桶301中的项目。此外,在哈希桶301的项目中还存储有节点地址,其直接指向链表302中的一个节点,根据节点地址,也可以直接访问链表302中的当前第1页1 2 3 4 本文档来自技高网...
【技术保护点】
一种数据存取方法,其特征在于,包括:在存储器中构建哈希桶和链表;接收存储数据的指令并获取要存储的对象;新分配一个链表的节点,并在所述节点内写入所述对象的序列号以及过期时间;将所述节点插入到所述链表中对应的位置使所述链表中所有节点按照过期时间排序;根据所述序列号获取一个索引值;将所述对象以及所述节点的地址存储在所述哈希桶中下标为所述索引值的位置。
【技术特征摘要】
【专利技术属性】
技术研发人员:谢立强,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。