CN101620618A - 内存存储数据的维护方法与装置 - Google Patents

内存存储数据的维护方法与装置 Download PDF

Info

Publication number
CN101620618A
CN101620618A CN200910089849A CN200910089849A CN101620618A CN 101620618 A CN101620618 A CN 101620618A CN 200910089849 A CN200910089849 A CN 200910089849A CN 200910089849 A CN200910089849 A CN 200910089849A CN 101620618 A CN101620618 A CN 101620618A
Authority
CN
China
Prior art keywords
data
controll block
memory
formation
hcq
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
CN200910089849A
Other languages
English (en)
Other versions
CN101620618B (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.)
JINJUAN MEDIA TECHNOLOGY CO., LTD.
Original Assignee
ZTE Corp
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 ZTE Corp filed Critical ZTE Corp
Priority to CN200910089849XA priority Critical patent/CN101620618B/zh
Publication of CN101620618A publication Critical patent/CN101620618A/zh
Application granted granted Critical
Publication of CN101620618B publication Critical patent/CN101620618B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Abstract

本发明公开了一种内存存储数据的维护方法,包括:将内存区设置为内存数据单元、控制块和哈希入口HE表的存储模式,并设置哈希冲突队列HCQ、空闲队列FQ和同步队列SQ;在将所述HCQ中数据删除时,将所删除的数据添入所述SQ中,并在HE表中保持所删除的数据的关键字的哈希运算值;新增数据时,从所述FQ中选择空内存数据单元存储所述新增数据,并将存储所述新增数据内存数据单元对应的控制块置入所述HE表中待添加数据的关键字的哈希运算值所对应的控制块列表中。本发明同时公开了一种内存存储数据的维护装置。本发明提高了数据在内存中的命中率,对数据的操作尽量在内存中完成,减少了不必要的输入输出操作,能大幅度提高系统处理数据的效率。

Description

内存存储数据的维护方法与装置
技术领域
本发明涉及利用内存存储数据的技术,尤其涉及一种能区分数据调用热度的内存存储数据的维护方法与装置。
背景技术
随着越来越多的移动增殖业务如短信、彩信等业务的开展及普及,移动增殖业务的业务量每年都在快速增长,为了提高系统的数据处理能力,通信系统中一般都采用内存数据库来存储数据。内存相对于普通存储区而言,系统对其的读写操作的处理速度将相当高,这就是目前内存数据库正被越来越多的业务系统所采用的主要原因。
在目前的内存数据库系统中,一般都是采用内存数据库和普通数据库合设的方式,因为内存的容量是有限制的,在数据量很大而内存空间不足的情况下,可以将数据存储在普通数据库中以保证数据的不丢失。在这种应用中,检索数据时如果在内存中不能找到相应的数据则需要到普通数据库中进行检索,这样,将导致数据处理性能下降。但数据在内存数据库中的生存周期是由业务层来决定的,而不是由内存数据库主动控制的,因此业务层在对数据进行操作后如果短时间不再操作或者不能预见什么时间会再次操作,通常就将内存中的数据同步到普通数据库中,以保证有足够的内存空间提供给新数据使用,这样很难保证需要检索的数据能在内存中命中。而且相同的数据在内存数据库与普通数据库间反复传输时,会增加不必要的物理磁盘操作。
数据操作的内存命中率是影响这种系统性能的关键。同时,如果业务控制出错或者缺少对内存数据库使用率实时的监控与管理,容易造成内存数据库被占满,最终导致业务中断。
发明内容
有鉴于此,本发明的主要目的在于提供一种内存存储数据的维护方法与装置,能使调用热度高的数据优选存储在内存数据库中,通过设置内存存储模式使内存维护更方便。
为达到上述目的,本发明的技术方案是这样实现的:
一种内存存储数据的维护方法,包括:
将内存区设置为内存数据单元、控制块和哈希入口HE表的存储模式,并设置哈希冲突队列HCQ、空闲队列FQ和同步队列SQ;以及
在将所述HCQ中数据删除时,将所删除的数据添入所述SQ中,并在HE表中保持所删除的数据的关键字的哈希运算值;新增数据时,从所述FQ中选择空内存数据单元存储所述新增数据,并将存储所述新增数据内存数据单元对应的控制块置入所述HE表中待添加数据的关键字的哈希运算值所对应的控制块列表中。
优选地,将内存区设置为内存数据单元、控制块和哈希入口HE表的存储模式,并设置哈希冲突队列HCQ、空闲队列FQ和同步队列SQ,包括:
将每个数据存储于一个内存数据单元中,为每个内存数据单元对应设置一个控制块,所述控制块记录有存储所述数据的所述内存数据单元的地址信息、所述数据的关键字以及所述数据所属队列的信息;所述HE表按所述数据的关键字信息的哈希运算值确定存储所述数据的控制块的首地址信息,哈希运算值相同的两个以上的数据的控制块通过指针关联,在所述HE表中的所述数据的关键字的哈希运算值对应的地址中存储关联控制块的首地址信息;所述FQ包括尚未存储数据的内存数据单元的信息;所述SQ包括从所述HCQ删除的数据队列的信息,所述SQ中的数据被同步到内存外部的存储区;所述HCQ包括哈希运算值相同的两个以上的数据以及当前被调用的数据;所述数据通过控制块中的所述数据所属队列的信息与所述HCQ及SQ关联。
优选地,所述SQ中的数据按调用热度由低到高的顺序进行排序,调用热度最高的数据位于所述SQ的最尾端;从所述HCQ中删除的数据,修改删除数据的控制块中的所属队列的信息,与所述SQ关联,且位于所述SQ的最尾端。
优选地,删除所述SQ的内存数据单元中数据时,由首地址处的数据开始删除。
优选地,所述方法还包括:
对当前的内存容量进行监控,当前内存容量低于设定阈值时,删除所述SQ的内存数据单元中的数据,修改所删除数据的内存数据单元的控制块中的所述数据所属队列的信息,与所述FQ关联。
优选地,所述方法还包括:
查找数据时,对所述数据的关键字进行哈希运算得到哈希运算值,根据所述哈希运算值在所述HE表中的对应地址处所存储的控制块的首地址信息,并进一步查找出首地址对应的控制块,若所查找出的首地址对应的控制块为一个,则该控制块即为所述数据的控制块,该控制块中所指示的内存数据单元中的数据即为所查找的所述数据;若所查找出的首地址对应的控制块为两个以上,则按控制块中指针信息遍历每个控制块,查找与所述数据的关键字匹配的控制块,该控制块中所指示的内存数据单元中的数据即为所查找的所述数据。
优选地,新增数据时,将所述数据存储于所述FQ中的一个内存数据单元中,并修改存储所述数据的内存数据单元的控制块:记载所述数据的关键字并修改所述数据所属队列的信息,与所述HCQ关联且位于所述HCQ的最尾端;对所述数据的关键字进行哈希运算得到哈希运算值,判断所述哈希运算值在所述HE表中的对应地址中是否已存储有控制块的首地址,若有,则不再存储该数据的控制块的首地址,否则存储该数据的控制块的首地址。
一种内存存储数据的维护装置,包括:
设置模块,用于将内存区设置为内存数据单元、控制块和HE表的存储模式,并设置HCQ、FQ和SQ;
HCQ管理模块,用于对HCQ中的队列进行维护,通过队列对应数据存储的内存数据单元对应的控制块链表实现队列的删除及增加,并通过队列对应数据的关键字的哈希值关联到HE上;
SQ管理模块,用于对SQ中的队列进行维护,在数据从HCQ中删除时,将被删除的内存数据单元挂接到SQ中队列尾部,通过数据在SQ中队列移出和加入操作按调用热度对数据进行排序;以及
FQ管理模块,用于对FQ中的队列进行维护,用于管理空闲内存数据单元的分配和回收,新增数据时,根据新增数据的关键字的哈希值确定存储新增数据的内存数据单元对应的控制块所应关联的HCQ中的控制块链表,并关联到所述HCQ中的控制块链表上。
优选地,所述装置还包括:
数据维护模块,用于对内存中的内存数据单元进行维护,实现对数据的插入、删除、修改操作;以及
内存表管理模块,用于管理所有内存表的信息,维护内存信息控制块中的数据。
优选地,所述设置单元将内存区设置为内存数据单元、控制块和HE表的存储模式,以及设置HCQ、FQ和SQ;其中,每个数据存储于一个内存数据单元中,每个内存数据单元对应于一个控制块,所述控制块记录有存储所述数据的所述内存数据单元的地址信息、所述数据的关键字以及所述数据所属队列的信息;所述HE表按所述数据的关键字信息的哈希运算值确定存储所述数据的控制块的首地址信息,哈希运算值相同的两个以上的数据的控制块通过指针关联,在所述HE表中的所述数据的关键字的哈希运算值对应的地址中存储关联控制块的首地址信息;所述FQ包括尚未存储数据的内存数据单元的信息;所述SQ包括从所述HCQ删除的数据队列的信息,所述SQ中的数据被同步到内存外部的存储区;所述HCQ包括哈希运算值相同的两个以上的数据以及当前被调用的数据;所述数据通过控制块中的所述数据所属队列的信息与所述HCQ及SQ关联。
优选地,所述装置还包括:
容量监控模块,用于对当前的内存容量进行监控,当前内存容量低于设定阈值时,触发所述数据维护模块删除所述SQ的内存数据单元中的数据,修改所删除数据的内存数据单元的控制块中的所述数据所属队列的信息,所述FQ管理模块将所删除数据的内存数据单元与所述FQ关联。
优选地,所述装置还包括:
查找模块,用于查找数据,对所述数据的关键字进行哈希运算得到哈希运算值,根据所述哈希运算值在所述HE表中的对应地址处所存储的控制块的首地址信息,并进一步查找出首地址对应的控制块,若所查找出的首地址对应的控制块为一个,则该控制块即为所述数据的控制块,该控制块中所指示的内存数据单元中的数据即为所查找的所述数据;若所查找出的首地址对应的控制块为两个以上,则按控制块中指针信息遍历每个控制块,查找与所述数据的关键字匹配的控制块,该控制块中所指示的内存数据单元中的数据即为所查找的所述数据。
优选地,所述数据维护模块新增数据时,将所述数据存储于所述FQ中的一个内存数据单元中,并修改存储所述数据的内存数据单元的控制块:记载所述数据的关键字并修改所述数据所属队列的信息,触发所述HCQ管理模块将存储新增数据的内存数据单元与所述HCQ关联且置于所述HCQ的最尾端;对所述数据的关键字进行哈希运算得到哈希运算值,判断所述哈希运算值在所述HE表中的对应地址中是否已存储有控制块的首地址,若有,则不再存储该数据的控制块的首地址,否则存储该数据的控制块的首地址。
本发明中,通过设置同步队列(SQ,Synchron Queue)队列,在内存数据库中的数据的调用热度降低时,将所述数据从哈希冲突队列(HCQ,HashConflict Queue)中删除,该删除并非是将内存数据单元中的实际数据删除了,而是删除了数据所属的队列,本发明将从HCQ中删除的数据关联到SQ中,并将该关联到SQ中的数据存储到普通数据库中;在内存低于设定阈值时,通过释放SQ中的数据来弥补内存空间的不足。由于设置了HE表,在查找数据时,根据数据的关键字的哈希运算值即可确定数据的内存表信息控制块,根据其中的内存数据单元的地址信息即查找出数据。本发明将被频繁访问的数据筛选出来并保留在内存中,提高了数据在内存中的命中率,对数据的操作尽量在内存中完成,减少了不必要的输入输出操作,能大幅度提高系统处理数据的效率。本发明实现简单且实用。
附图说明
图1为本发明内存初始化后的结构示意图;
图2为本发明内存表初始化的操作流程图;
图3为本发明向内存表增加数据的操作流程图;
图4为本发明从内存表查询数据的操作流程图;
图5为本发明从内存表删除数据的操作流程图;
图6为本发明容量监控的操作流程图;
图7本发明内存存储数据的维护装置的组成结构示意图。
具体实施方式
本发明的基本思想是:通过设置SQ队列,在内存数据库中的数据的调用热度降低时,将所述数据从HCQ中删除,该删除并非是将内存数据单元中的实际数据删除了,而是删除了数据所属的队列,本发明将从HCQ中删除的数据关联到SQ中,并将该关联到SQ中的数据存储到普通数据库中;在内存低于设定阈值时,通过释放SQ中的数据来弥补内存空间的不足。由于设置了HE表,在查找数据时,根据数据的关键字的哈希运算值即可确定数据的内存表信息控制块,根据其中的内存数据单元的地址信息即查找出数据。本发明将被频繁访问的数据筛选出来并保留在内存中,提高了数据在内存中的命中率,对数据的操作尽量在内存中完成,减少了不必要的输入输出操作,能大幅度提高系统处理数据的效率。本发明实现简单且实用。
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。
本发明按数据在内存表内的生存周期角度看,内存表的数据分别保存在三个不同的队列中:
HCQ队列,为当前哈希冲突队列,用于存放当前正在处理(被用户调用的)的数据。
SQ队列,为同步队列,用于存放当前已经同步到物理磁盘中的数据,也是热点(被多用户多次调用)数据存放的队列,在空闲内存不够时可以清除的数据队列。
空闲队列(FQ,Free Queue),用于保存未用内存数据单元。
图1为本发明内存初始化后的结构示意图,如图1所示,本发明内存的初始结构中包括三个链表,分别为:
Hash入口(HE,Hash Entry)链表101,用Entry登记链表的首地址,用于存放各数据Hash运算值冲突的队列首地址信息。本链表的节点总数为Hash模值(HashModule)。HE链表(或HE表)101中,是根据对数据的关键字的进行哈希运算的运算值来确定数据的控制块的首地址存储地址的,具体的,如图1所示,如果某数据的关键字的哈希运算值为k,则将该数据对应的内存数据单元的控制块的首地址信息存储于HE链表101中的k地址处,存储时判断k地址处是否已存储有其他数据的控制块的首地址,如果有,则将该数据对应的控制块置入已存储控制块首地址所指示的控制块链表的尾部,即此时为冲突队列,即该数据的关键字的哈希运算值k与其他数据的相同,此时,需在该数据对应的数据块中记录该数据的关键字,以方便查找出该数据;如果没有其他数据块的地址信息,则将该数据对应的数据块作为哈希运算值k对应数据的控制块的首地址,此时,该哈希运算值k对应的数据仅有一个。
内存表信息控制块链表102,用内存表信息控制块的索引登记首地址,用于登记控制块的指针信息,包括:HCQ队列或者FQ队列的后向指针Next、SQ队列的前向与后向指针;HCQ队列的后向指针Next指向同一Hash值的下一个HCQ队列的数据,HCQ队列的首地址登记在Hash入口表101中;SQ队列的前向与后向指针指向SQ队列的前一条和后一条记录。本链表的记录总数为内存表的总容量值,控制块与内存数据区一一对应。本链表的节点总数为HCQ队列和FQ队列两个队列的数据总和。
内存数据区链表103,用内存数据区的首地址登记为队首,用于存放实际的数据。本链表的记录总数为内存表的总容量值。
其中,HCQ队列、SQ队列和FQ队列构成了内存表的三个控制管理队列:所有的在用数据(HCQ队列和SQ队列中的数据)都挂接在Hash入口链表101中各个HCQ队列上;如果此记录属于SQ队列节点,则同时就会连接到SQ队列中,用前后向双向指针表明其位置,有利于链表节点的增删操作;对于未用的内存单元都挂接在FQ队列上。本发明将内存表由传统的HCQ和FQ两个队列管理,改为使用HCQ、FQ和SQ三个队列进行管理。在HCQ队列中可以清除的数据在被删除的时候被放入SQ队列中,同时完成向物理磁盘的同步。SQ队列中的数据按先进先出(FIFO,First In First Out)方式管理,SQ队列中的数据通过被再次检索(被多用户多次调用时,置入HCQ中)而移出队列,数据操作完毕后(调用量较小或不再被调用)通过从HCQ中删除被再次加入SQ队列,从而完成了热点数据的动态筛选工作,这样被再次检索的概率最低的数据排在SQ队列首部,而不断被检索的热点数据就会排在SQ队列尾部。而从HCQ中删除的数据,将置入SQ队列尾部。本发明中,通过链表结构中的指针来实现相同队列的数据的关联;不同的队列之间通过内存数据单元对应的控制块中的数据所属队列信息而确定,所属的队列相同时,控制块将以指针的形式形成控制块链表。空间被回收到FQ队列的时候,从SQ队列首部开始回收,这样就可以把热点数据保留在内存中。
在控制块中只登记相应的队列指针信息,而数据真正的值则是保存在已申请好的内存数据区链表103中,内存数据区链表103的首地址登记在内存信息控制块中,因为同一内存表的各数据大小一样,所以只需要登记好数据区首地址和各记录对应的偏移量,就可取出相应的记录数据,同时因为数据的值统一保存在一个地方,避免了同时保存在HCQ队列和SQ队列中时需要两个拷贝的冗余情况,节省了很大的内存空间。
本发明在内存表使用过程中,实时统计出FQ队列的空闲率为:(内存表总记录数-HCQ队列记录总数)/内存表总记录数),如果内存空闲率低于配置的低水平位容量时,则从SQ队列首部进行批量清理,将SQ队列中的内存单元回收到FQ队列中,此时,修改数据的控制块中的所属队列的信息即可将SQ队列中的内存数据单元添入FQ队列中,即将被删除数据的内存数据单元的控制块中的数据所属队列信息修改为所属FQ队列即可,同时,修改该控制块的指针指向,插入到FQ队列控制块链表的尾部即可。因为SQ队首是被访问概率很低的数据,热点数据在SQ队尾从而保证热点数据被保留在内存中。
如图1所示,在内存表的表节点的结构中,还包括:表名:保存本内存表的表名,用于唯一标识内存表;表总容量Vol:根据配置的内存表总记录数乘以一条数据大小得到本内存表所需的最大内存容量;Hash模值:哈希函数的模值;Hash入口表HE 101的入口指针Entry:用本记录的关键字与哈希模经过哈希函数计算后得到的哈希表的入口值;一条记录大小RecSize:以字节为单位;控制块数据区首地址链表102的指针Index:用以定位队列控制块;HCQ队列记录数:内存被占用的记录数;SQ队列记录数:用于管理SQ队列;FQ队列的队首:空闲队列的队首;FQ队列的队尾:空闲队列的队尾;SQ队列的队首:同步队列的队首;SQ队列的队尾:同步队列的队尾;内存数据区地址:记录内存数据区链表103的指针RecPtr:用于存放记录内容的数据;控制块还包括以下内容:
冲突队列或者空闲队列的下条记录指针Next:指向同一个哈希值的冲突队列的下一个节点;SQ队列的前向指针PreRec:同步队列节点的前向指针;SQ队列的后向指针NextRec:同步队列节点的后向指针。其中,PreRec和NextRec用于SQ队列方便向前和向后查找。
图2为本发明内存表初始化的操作流程图,用于为内存表的各队列及链表申请空间,如图2所示,本发明内存表初始化包括以下步骤:
步骤201:判断此内存表是否已存在,若存在,则不能再次初始化,错误并退出,否则生成新内存表,执行步骤202;
步骤202:为Hash入口表HE申请空间并初始化好初值。即按图1所示的结构设置内存表的结构,使内存表划分为多层次结构。
步骤203:队列控制块申请空间并初始化,并将所申请的内存区首地址填入步骤201创建的内存信息控制块中。即通过数据的内存数据单元对应的控制块中的所属队列信息的设定,使不同的内存数据单元(主要是空的内存数据单元和存储了数据的内存数据单元)划归到不同的队列中,通过控制块中的指针指向的修改或设置,使不同队列中的控制块形成相应的控制块链表。
步骤204:为内存数据区申请空间并初始化,并将所申请的内存区首地址填入步骤201创建的内存信息控制块中。即将内存数据单元的地址信息添加到控制块中,以通过控制块查找到对应的内存数据单元,从而获取对应的数据。
步骤205:初始化FQ队列,将所有队列控制块都挂接到FQ队列中,表示所有内存数据单元都是可用状态。初始创建内存表时,其中的内存数据区中未存储任何的数据,因此,内存数据区的所有的内存数据单元均属于FQ队列。通过内存数据单元对应的控制块中的所属队列信息的修改即可实现归属到FQ队列的操作。
步骤206:将内存表结构中的其他成员,如表空间的总容量、记录大小,SQ首尾指针等进行初始化。
图2所示的流程,即是实现内存表的结构化处理,为实现之后的数据存储及管理而设置的。
图3为本发明向内存表增加数据的操作流程图,如图3所示,本发明向内存表增加数据操作流程包括以下步骤:
步骤301:判断内存表是否存在,若不存在则返回相应的错误码退出,存在则执行302。
步骤302:判断FQ队列空闲率是否低于配置的低水平位容量,若是执行步骤303;若足够则转到步骤304;
步骤303:从SQ队列首回收一定数量的内存数据单元加入到FQ队尾。即从SQ队列的首个内存数据单元起,顺序的删除一定数量的数据,修改这些删除数据后的内存数据单元的控制块的相应信息,将其所属的队列修改为FQ。SQ队列中的数据虽然被删除,但在对应的物理存储区中,仍保存有完整的数据,只是被删除的数据不在内存区了而已。
步骤304:对需要插入的数据关键字进行Hash运算。这里,数据的关键字是指数据的标识信息如数据名称、所属的类型等属性信息,也可以是数据的摘要信息。
步骤305:判断HCQ队列中是否已存在相同的数据。根据运算结果在Hash入口表HE上找到对应位置的HCQ队列,如果队列已经存在则遍历队列查看是否已经存在要插入数据关键字一致的数据,如果存在则返回相应的错误码并退出,如果不存在则执行步骤306。
步骤306:从FQ头取一队列控制块加入HCQ队尾。即将该要插入的数据存储于FQ头部对应的内存数据单元中,然后将该内存数据单元的控制块添入到Hash运算结果对应的冲突数据的控制块链表中尾部,修改FQ头队列控制块的所属队列信息为属于HCQ。
根据数据的关键字的Hash运算结果,在HE表的对应地址上查找是否已存储其他数据的控制块的首地址信息,也即判断Hash运算结果对应的地址处是否存储有信息,如果有,则根据存储信息(其他冲突数据的控制块的首地址)的指示,查找出其他数据的控制块的首地址,遍历该控制块链表,查找是否有与该要插入数据关键字一致的数据,如果有,则说明要插入的数据已存在于HCQ队列中,无需再次存储,而如果没有,则将该需插入的数据的控制块置入其他数据的控制块链表中的尾部,即该要插入的数据与其他数据的Hash运算结果是相同的,是本发明中的冲突队列。而如果Hash运算结果对应的地址处无任何数据,说明要插入的数据当前无冲突数据,则将该要插入数据的数据块的地址写入HE表中Hash运算结果对应的地址处,作为未来与该数据冲突的所有数据的首地址。
图4为本发明从内存表查询数据的操作流程图,如图4所示,本发明从内存表查询数据操作流程包括以下步骤:
步骤401:判断内存表是否存在,若不存在则返回相应的错误码退出,存在则执行402。
步骤402:对需要查询的数据关键字进行Hash运算,根据运算结果在Hash入口表HE上找到对应位置的HCQ队列。该步骤的实现可参见前述图3中的相关描述。即利用待查询数据的关键字的Hash运算结果确定该Hash运算结果所对应的冲突队列中数据的控制块的首地址,在对应的控制块链表中查找是否存在与待查询数据的关键字匹配的控制块,如果查找到则存在对应的数据,否则HCQ队列中不存在待查询的数据,该数据在物理存储区中,执行步骤404。
步骤403:判断HCQ队列中是否已存在该数据,遍历该Hash运算结果所对应的队列,查看是否已经存在要查询数据关键字一致的数据,如果不存在转入步骤404,如果存在则转入步骤406。
步骤404:判断是否能从物理磁盘中查询到相应的数据。如果不能则返回相应的错误码并返回,否则执行步骤405。
步骤405:从磁盘中读取数据并调用所查询的内存数据,并执行步骤409:成功返回所查询数据的调用信息,如调用地址信息等。
步骤406:判断该查询数据是否已存在于SQ队列中,如果已经存在则执行步骤407,否则转入步骤408。对于内存管理功能的一部分,所查询的数据可能因为持续时段内没有被调用而置入了SQ队列中,对于这样的数据,由于被重新调用而需将该数据置入到HCQ队列中。需要说明的是,数据即使存在于SQ队列,其在HE表中仍存放有相应的地址指示信息,即仍能通过HE表查询到相应的数据。这里,也可以设定将SQ队列中数据置入HCQ队列的条件,如调用次数超过设定次数时才执行该操作,或被多少个用户调用时才执行该操作,不然,相应的数据仍存放在SQ队列中(不会影响被调用和查询)。
步骤407:从SQ队列中移出,放入HCQ中,并执行步骤408。
步骤408:根据队列控制块在队列区的索引到内存数据区中查询相应的数据,执行步骤409。
步骤409:成功返回所查询的数据的调用信息,如调用地址信息等。
修改内存数据的流程与查询数据的流程类似,只是找到数据后用新数据覆盖旧数据,这里不再赘述其实现流程。
图5为本发明从内存表删除数据的操作流程图,如图5所示,本发明从内存表删除数据的操作流程包括以下步骤:
步骤501:判断内存表是否存在,若不存在则返回相应的错误码退出,存在则执行步骤502。
步骤502:对需要查询的数据关键字进行Hash运算。
步骤503:HCQ队列中是否存在冲突数据。即根据待删除数据的关键字的Hash运算结果查找HCQ队列中是否存在相应的数据,即确定Hash运算结果的对应地址处是否存在相应数据的控制块的地址信息,如果有则说明可能存在相同数据;如果不存在则说明一定没有所删除数据,执行步骤507:返回删除成功并结束。如果队列已经存在则遍历队列查看是否已经存在要插入数据关键字一致的数据,如果不存在,执行步骤507:返回删除成功并结束,存在相应数据时执行步骤504。
步骤504:判断该数据是否已经在SQ队列中,如果已经存在则执行步骤507,返回删除成功并结束,否则执行步骤505。
步骤505:将该数据加入SQ队列中。
步骤506:向调用磁盘操作接口向磁盘操作模块发送数据同步消息,将该数据同步到物理磁盘上,执行步骤507。
步骤507:发送成功后则返回删除成功并结束。
图6为本发明容量监控的操作流程图,如图6所示,本发明容量监控的操作流程包括以下步骤:
步骤601:读取内存表信息控制块中的数据,获取相关内存表信息.
步骤602:计算内存表的FQ空闲率=(表容量-HCQ队列记录数)/表容量。
步骤603:判断当前内存容量是否低于配置的低水平位容量。如果该空闲率低于配置的低水平位容量,则执行604步骤;否则执行步骤605。
步骤604:调用FQ队列回收操作接口,从SQ队首开始回收内存空间,直到FQ空闲率满足高水平位容量位置或者SQ队列被清空为止,然后执行步骤605。
步骤605:从控制块区的首部开始循环扫描每一个控制块,如果控制块处于使用中并且不在SQ队列,则对该控制块计数累加(该计数在每次对应数据查询的时候被清零)。
步骤606:判断当前计数值是否超过某个预先设定的阈值,如果超过,则执行步骤607,否则返回步骤605。
步骤607:调用操作接口将过期数据从HCQ队列中回收到FQ队列。该数据很长时间都没有被操作完毕,确认由于某种异常导致出现了过期数据,调用操作接口将过期数据从HCQ队列中回收到FQ队列,然后执行步骤607。
步骤608:判断扫描是否结束,如果结束则执行步骤609返回成功退出,否则继续转到步骤605。
609:返回成功退出.
本发明查询内存数据和删除内存数据的方法,使得热点数据从SQ队列中删除和加入SQ队列尾部的操作,实现了热点数据的筛选并被保持在内存中。由此,本发明提供了一种具有动态筛选并保持热点数据功能的内存数据存储的实现方法,对内存空间受到限制或者不足够大的应用,尽可能将最经常被访问的热点数据筛选出来并将其保留在内存中,最大可能的利用了内存操作速度高于磁盘操作的特点,提高了系统的数据处理性能,并保证了内存数据存储装置的稳定可用性与健壮性。
图7本发明内存存储数据的维护装置的组成结构示意图,如图7所示,本发明内存存储数据的维护装置包括设置模块70、HCQ管理模块71、SQ管理模块72、FQ管理模块73、数据维护模块74和内存表管理模块75,其中,设置模块70用于将内存区设置为内存数据单元、控制块和HE表的存储模式,以及,设置HCQ、FQ和SQ;其中,每个数据存储于一个内存数据单元中,每个内存数据单元对应于一个控制块,所述控制块记录有存储所述数据的所述内存数据单元的地址信息、所述数据的关键字以及所述数据所属队列的信息;所述HE表按所述数据的关键字信息的哈希运算值确定存储所述数据的控制块的首地址信息,哈希运算值相同的两个以上的数据的控制块通过指针关联,在所述HE表中的所述数据的关键字的哈希运算值对应的地址中存储关联控制块的首地址信息;所述FQ包括尚未存储数据的内存数据单元的信息;所述SQ包括从所述HCQ删除的数据队列的信息,所述SQ中的数据被同步到内存外部的存储区;所述HCQ包括哈希运算值相同的两个以上的数据以及当前被调用的数据;所述数据通过控制块中的所述数据所属队列的信息与所述HCQ及SQ关联;HCQ管理模块71用于对HCQ中的队列进行维护,通过各HCQ队列的记录链分别存放同一哈希值的记录,并关联到HE上;SQ管理模块72用于对SQ中的队列进行维护,在数据从HCQ中删除时,将被删除的内存数据单元挂接到SQ中队列尾部,通过数据在SQ中队列移出和加入操作按调用热度对数据进行排序;FQ管理模块73用于对FQ中的队列进行维护,用于管理空闲内存数据单元的分配和回收;数据维护模块74用于对内存中的内存数据单元进行维护,实现对数据的插入、删除、修改操作;内存表管理模块75用于管理所有内存表的信息,维护内存信息控制块中的数据。
数据维护模块74新增数据时,将所述数据存储于所述FQ中的一个内存数据单元中,并修改存储所述数据的内存数据单元的控制块:记载所述数据的关键字并修改所述数据所属队列的信息,触发所述HCQ管理模块将存储新增数据的内存数据单元与所述HCQ关联且置于所述HCQ的最尾端;对所述数据的关键字进行哈希运算得到哈希运算值,判断所述哈希运算值在所述HE表中的对应地址中是否已存储有控制块的首地址,若有,则不再存储该数据的控制块的首地址,否则存储该数据的控制块的首地址。
如图7所示,本发明内存存储数据的维护装置还包括容量监控模块76,用于对当前的内存容量进行监控,当前内存容量低于设定阈值时,触发所述数据维护模块删除所述SQ的内存数据单元中的数据,修改所删除数据的内存数据单元的控制块中的所述数据所属队列的信息,所述FQ管理模块将所删除数据的内存数据单元与所述FQ关联。
如图7所示,本发明内存存储数据的维护装置还包括查找模块77,用于查找数据,对所述数据的关键字进行哈希运算得到哈希运算值,根据所述哈希运算值在所述HE表中的对应地址处所存储的控制块的首地址信息,并进一步查找出首地址对应的控制块,若所查找出的首地址对应的控制块为一个,则该控制块即为所述数据的控制块,该控制块中所指示的内存数据单元中的数据即为所查找的所述数据;若所查找出的首地址对应的控制块为两个以上,则按控制块中指针信息遍历每个控制块,查找与所述数据的关键字匹配的控制块,该控制块中所指示的内存数据单元中的数据即为所查找的所述数据。
本领域技术人员应当理解,本发明图7所示的内存存储数据的维护装置是为实现前述的内存存储数据的维护方法而设计的,图7所示装置中的各处理单元的实现功能可参照图1至图6所示的方法中的相关描述而理解,各单元的功能可通过运行于处理器上的程序而实现,也可通过相应的逻辑电路而实现。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

Claims (10)

1、一种内存存储数据的维护方法,其特征在于,包括:
将内存区设置为内存数据单元、控制块和哈希入口HE表的存储模式,并设置哈希冲突队列HCQ、空闲队列FQ和同步队列SQ;以及
在将所述HCQ中数据删除时,将所删除的数据添入所述SQ中,并在HE表中保持所删除的数据的关键字的哈希运算值;新增数据时,从所述FQ中选择空内存数据单元存储所述新增数据,并将存储所述新增数据内存数据单元对应的控制块置入所述HE表中待添加数据的关键字的哈希运算值所对应的控制块列表中。
2、根据权利要求1所述的方法,其特征在于,将内存区设置为内存数据单元、控制块和哈希入口HE表的存储模式,并设置哈希冲突队列HCQ、空闲队列FQ和同步队列SQ,包括:
将每个数据存储于一个内存数据单元中,为每个内存数据单元对应设置一个控制块,所述控制块记录有存储所述数据的所述内存数据单元的地址信息、所述数据的关键字以及所述数据所属队列的信息;所述HE表按所述数据的关键字信息的哈希运算值确定存储所述数据的控制块的首地址信息,哈希运算值相同的两个以上的数据的控制块通过指针关联,在所述HE表中的所述数据的关键字的哈希运算值对应的地址中存储关联控制块的首地址信息;所述FQ包括尚未存储数据的内存数据单元的信息;所述SQ包括从所述HCQ删除的数据队列的信息,所述SQ中的数据被同步到内存外部的存储区;所述HCQ包括哈希运算值相同的两个以上的数据以及当前被调用的数据;所述数据通过控制块中的所述数据所属队列的信息与所述HCQ及SQ关联。
3、根据权利要求1或2所述的方法,其特征在于,所述SQ中的数据按调用热度由低到高的顺序进行排序,调用热度最高的数据位于所述SQ的最尾端;从所述HCQ中删除的数据,修改删除数据的控制块中的所属队列的信息,与所述SQ关联,且位于所述SQ的最尾端。
4、根据权利要求3所述的方法,其特征在于,删除所述SQ的内存数据单元中数据时,由首地址处的数据开始删除。
5、根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
对当前的内存容量进行监控,当前内存容量低于设定阈值时,删除所述SQ的内存数据单元中的数据,修改所删除数据的内存数据单元的控制块中的所述数据所属队列的信息,与所述FQ关联。
6、根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
查找数据时,对所述数据的关键字进行哈希运算得到哈希运算值,根据所述哈希运算值在所述HE表中的对应地址处所存储的控制块的首地址信息,并进一步查找出首地址对应的控制块,若所查找出的首地址对应的控制块为一个,则该控制块即为所述数据的控制块,该控制块中所指示的内存数据单元中的数据即为所查找的所述数据;若所查找出的首地址对应的控制块为两个以上,则按控制块中指针信息遍历每个控制块,查找与所述数据的关键字匹配的控制块,该控制块中所指示的内存数据单元中的数据即为所查找的所述数据。
7、根据权利要求1所述的方法,其特征在于,新增数据时,将所述数据存储于所述FQ中的一个内存数据单元中,并修改存储所述数据的内存数据单元的控制块:记载所述数据的关键字并修改所述数据所属队列的信息,与所述HCQ关联且位于所述HCQ的最尾端;对所述数据的关键字进行哈希运算得到哈希运算值,判断所述哈希运算值在所述HE表中的对应地址中是否已存储有控制块的首地址,若有,则不再存储该数据的控制块的首地址,否则存储该数据的控制块的首地址。
8、一种内存存储数据的维护装置,其特征在于,包括:
设置模块,用于将内存区设置为内存数据单元、控制块和HE表的存储模式,并设置HCQ、FQ和SQ;
HCQ管理模块,用于对HCQ中的队列进行维护,通过队列对应数据存储的内存数据单元对应的控制块链表实现队列的删除及增加,并通过队列对应数据的关键字的哈希值关联到HE上;
SQ管理模块,用于对SQ中的队列进行维护,在数据从HCQ中删除时,将被删除的内存数据单元挂接到SQ中队列尾部,通过数据在SQ中队列移出和加入操作按调用热度对数据进行排序;以及
FQ管理模块,用于对FQ中的队列进行维护,用于管理空闲内存数据单元的分配和回收,新增数据时,根据新增数据的关键字的哈希值确定存储新增数据的内存数据单元对应的控制块所应关联的HCQ中的控制块链表,并关联到所述HCQ中的控制块链表上。
9、根据权利要求8所述的装置,其特征在于,所述装置还包括:
数据维护模块,用于对内存中的内存数据单元进行维护,实现对数据的插入、删除、修改操作;以及
内存表管理模块,用于管理所有内存表的信息,维护内存信息控制块中的数据。
10、根据权利要求8或9所述的装置,其特征在于,所述设置单元将内存区设置为内存数据单元、控制块和HE表的存储模式,以及设置HCQ、FQ和SQ;其中,每个数据存储于一个内存数据单元中,每个内存数据单元对应于一个控制块,所述控制块记录有存储所述数据的所述内存数据单元的地址信息、所述数据的关键字以及所述数据所属队列的信息;所述HE表按所述数据的关键字信息的哈希运算值确定存储所述数据的控制块的首地址信息,哈希运算值相同的两个以上的数据的控制块通过指针关联,在所述HE表中的所述数据的关键字的哈希运算值对应的地址中存储关联控制块的首地址信息;所述FQ包括尚未存储数据的内存数据单元的信息;所述SQ包括从所述HCQ删除的数据队列的信息,所述SQ中的数据被同步到内存外部的存储区;所述HCQ包括哈希运算值相同的两个以上的数据以及当前被调用的数据;所述数据通过控制块中的所述数据所属队列的信息与所述HCQ及SQ关联。
CN200910089849XA 2009-07-24 2009-07-24 内存存储数据的维护方法与装置 Expired - Fee Related CN101620618B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN200910089849XA CN101620618B (zh) 2009-07-24 2009-07-24 内存存储数据的维护方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN200910089849XA CN101620618B (zh) 2009-07-24 2009-07-24 内存存储数据的维护方法与装置

Publications (2)

Publication Number Publication Date
CN101620618A true CN101620618A (zh) 2010-01-06
CN101620618B CN101620618B (zh) 2011-11-30

Family

ID=41513857

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910089849XA Expired - Fee Related CN101620618B (zh) 2009-07-24 2009-07-24 内存存储数据的维护方法与装置

Country Status (1)

Country Link
CN (1) CN101620618B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073690A (zh) * 2010-12-16 2011-05-25 四川川大智胜软件股份有限公司 一种支持历史Key信息的内存数据库
CN104160397A (zh) * 2012-01-17 2014-11-19 苹果公司 位置独立文件
WO2016078388A1 (zh) * 2014-11-21 2016-05-26 中兴通讯股份有限公司 一种数据老化方法及装置
CN106484714A (zh) * 2015-08-27 2017-03-08 阿里巴巴集团控股有限公司 一种行为记录的存储方法和设备
CN107077419A (zh) * 2014-11-04 2017-08-18 华为技术有限公司 使用无冲突散列表层级的缓冲器的存储器寻址机构
CN107818056A (zh) * 2016-09-14 2018-03-20 杭州华为数字技术有限公司 一种队列管理方法及装置
CN110032528A (zh) * 2019-04-19 2019-07-19 苏州浪潮智能科技有限公司 存储系统的内存数据查找方法、装置、设备及存储介质
CN110109785A (zh) * 2019-04-16 2019-08-09 晶晨半导体(上海)股份有限公司 内存容量获取方法、装置、计算机设备及可读存储介质
CN111858549A (zh) * 2020-07-07 2020-10-30 北京工业大学 一种数据对象特征数据库的构建及更新方法
CN114328545A (zh) * 2022-03-03 2022-04-12 北京蚂蚁云金融信息服务有限公司 数据存储及查询方法、装置及数据库系统
CN117131036A (zh) * 2023-10-26 2023-11-28 环球数科集团有限公司 一种基于大数据和人工智能的数据维护系统
CN117349483A (zh) * 2023-12-05 2024-01-05 杭州行芯科技有限公司 一种寄生参数的查找方法、装置、电子设备及存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000315167A (ja) * 1999-04-30 2000-11-14 Toshiba Corp データ管理装置、計算機システムおよびプログラムを記憶した記憶媒体
CN1307584C (zh) * 2003-11-17 2007-03-28 中兴通讯股份有限公司 一种用二维表实现的树的存储、访问的方法
CN1848111A (zh) * 2005-04-15 2006-10-18 中兴通讯股份有限公司 用于内存数据库的一种数据操作接口的实现方法

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102073690A (zh) * 2010-12-16 2011-05-25 四川川大智胜软件股份有限公司 一种支持历史Key信息的内存数据库
CN102073690B (zh) * 2010-12-16 2012-09-05 四川川大智胜软件股份有限公司 一种支持历史Key信息的内存数据库的构建方法
CN104160397A (zh) * 2012-01-17 2014-11-19 苹果公司 位置独立文件
CN107077419A (zh) * 2014-11-04 2017-08-18 华为技术有限公司 使用无冲突散列表层级的缓冲器的存储器寻址机构
CN107077419B (zh) * 2014-11-04 2020-02-14 华为技术有限公司 用于存储与数据元素相关联的地址的方法、设备和系统
WO2016078388A1 (zh) * 2014-11-21 2016-05-26 中兴通讯股份有限公司 一种数据老化方法及装置
CN105653556A (zh) * 2014-11-21 2016-06-08 中兴通讯股份有限公司 一种数据老化方法及装置
CN106484714A (zh) * 2015-08-27 2017-03-08 阿里巴巴集团控股有限公司 一种行为记录的存储方法和设备
CN106484714B (zh) * 2015-08-27 2019-06-21 阿里巴巴集团控股有限公司 一种行为记录的存储方法和设备
CN107818056A (zh) * 2016-09-14 2018-03-20 杭州华为数字技术有限公司 一种队列管理方法及装置
CN110109785A (zh) * 2019-04-16 2019-08-09 晶晨半导体(上海)股份有限公司 内存容量获取方法、装置、计算机设备及可读存储介质
CN110109785B (zh) * 2019-04-16 2023-03-31 晶晨半导体(上海)股份有限公司 内存容量获取方法、装置、计算机设备及可读存储介质
CN110032528A (zh) * 2019-04-19 2019-07-19 苏州浪潮智能科技有限公司 存储系统的内存数据查找方法、装置、设备及存储介质
CN111858549A (zh) * 2020-07-07 2020-10-30 北京工业大学 一种数据对象特征数据库的构建及更新方法
CN111858549B (zh) * 2020-07-07 2022-05-24 北京工业大学 一种数据对象特征数据库的构建及更新方法
CN114328545A (zh) * 2022-03-03 2022-04-12 北京蚂蚁云金融信息服务有限公司 数据存储及查询方法、装置及数据库系统
CN114328545B (zh) * 2022-03-03 2022-07-08 北京蚂蚁云金融信息服务有限公司 数据存储及查询方法、装置及数据库系统
CN117131036A (zh) * 2023-10-26 2023-11-28 环球数科集团有限公司 一种基于大数据和人工智能的数据维护系统
CN117131036B (zh) * 2023-10-26 2023-12-22 环球数科集团有限公司 一种基于大数据和人工智能的数据维护系统
CN117349483A (zh) * 2023-12-05 2024-01-05 杭州行芯科技有限公司 一种寄生参数的查找方法、装置、电子设备及存储介质
CN117349483B (zh) * 2023-12-05 2024-04-09 杭州行芯科技有限公司 一种寄生参数的查找方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN101620618B (zh) 2011-11-30

Similar Documents

Publication Publication Date Title
CN101620618B (zh) 内存存储数据的维护方法与装置
TWI719281B (zh) 用於串流選擇之系統、機器可讀媒體、及機器實施之方法
CN104346357B (zh) 一种嵌入式终端的文件存取方法及系统
CN102663086B (zh) 一种数据块索引的检索方法
CN100550847C (zh) 一种解决Hash冲突的方法及装置
CN110808910B (zh) 一种支持QoS的OpenFlow流表节能存储架构及其方法
CN102521406A (zh) 海量结构化数据复杂查询任务的分布式查询方法和系统
CN103294710A (zh) 一种数据存取方法和装置
CN102867071A (zh) 一种网管海量历史数据管理方法
CN107015763A (zh) 混合存储系统中ssd管理方法及装置
CN102332004B (zh) 用于海量数据管理的数据处理方法和系统
CN100424699C (zh) 一种属性可扩展的对象文件系统
CN101655861A (zh) 基于双计数布鲁姆过滤器的哈希方法和哈希装置
CN103544261A (zh) 一种海量结构化日志数据全局索引管理方法及装置
CN102508872A (zh) 一种基于内存的联机处理系统的数据处理方法及系统
CN106933836A (zh) 一种基于分表的数据存储方法和系统
CN102779138A (zh) 实时数据的硬盘存取方法
CN104346458A (zh) 数据存储方法和存储设备
CN104077385A (zh) 一种文件的分类及检索方法
CN114780530A (zh) 基于lsm树键值分离的时序数据存储方法及系统
CN104166661A (zh) 数据存储系统和数据存储方法
CN103425435A (zh) 磁盘存储方法及磁盘存储系统
CN100524312C (zh) 一种智能卡的海量数据存储与管理方法
CN102073690B (zh) 一种支持历史Key信息的内存数据库的构建方法
CN101610197A (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
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
CB03 Change of inventor or designer information

Inventor after: Lu Fan

Inventor after: Huang Mu

Inventor after: Li Chaoran

Inventor before: Hou Chunhua

Inventor before: Tao Changbiao

Inventor before: Xing Gang

Inventor before: Nie Rongchu

COR Change of bibliographic data
TR01 Transfer of patent right

Effective date of registration: 20170215

Address after: High tech Zone Wangjiang Road Hefei city Anhui province 230000 Building No. 766, building 1, the production of scientific research

Patentee after: JINJUAN MEDIA TECHNOLOGY CO., LTD.

Address before: 518057 Nanshan District Guangdong high tech Industrial Park, South Road, science and technology, ZTE building, Ministry of Justice

Patentee before: ZTE Corporation

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20111130

Termination date: 20180724