内存数据读写方法和装置与流程

文档序号:14940992发布日期:2018-07-13 20:46阅读:251来源:国知局

本发明涉及计算机数据存储技术领域,尤其涉及一种内存数据读写方法和装置。



背景技术:

计算机设备内设置的内存,用于存储数据,其相较于磁盘具有高速的数据读写能力。为了满足处理器实现高速数据访问和处理的需求,需要将部分数据存储在计算机设备的内存中。

相关技术中,内存中的数据存储采用最近最少使用缓存(lastrecentlyusedcache,lrucache)的存储方式对访问频率较高的数据进行存储,或者是依据索引顺序的有序表进行存储。lrucache对于频繁访问的热点数据命中率较高,但非热点数据访问速度较慢;有序表存储的方式尽管相较于lrucache提高了非热点数据的访问速度,但对于热点数据访问速度较慢。因此,内存访问效率较低。



技术实现要素:

本发明旨在至少在一定程度上解决相关技术中的技术问题之一。

为此,本发明提出一种内存数据写入方法,内存采用具有访问顺序的哈希表以及有序表两种方式进行存储,针对热点数据采用具有访问顺序的哈希表进行存储,针对非热点数据采用有序表进行存储。通过将需要写入的第一数据作为最后访问的数据存储在哈希表中,而将哈希表中删除的最先访问的第二数据顺序存储至有序表中,针对不同数据采用了不同存储方式,提高了数据访问效率。

本发明提出一种内存数据读取方法。

本发明提出一种内存数据写入装置。

本发明提出一种内存数据读取装置。

本发明提出一种计算机设备。

本发明提出一种计算机可读存储介质。

本发明第一方面实施例提出了一种内存数据写入方法,包括:

获取内存中需写入的第一数据;

将所述第一数据作为最后访问的数据,存储在哈希表中;其中,所述哈希表中的各条数据具有访问先后顺序;

若所述哈希表的存储空间不足,从所述哈希表中删除最先访问的第二数据;

将所述第二数据存储至有序表中。

本发明实施例的一种内存数据写入方法中,获取内存中需写入的第一数据,将第一数据作为最后访问的数据,存储在哈希表中,若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据,将第二数据存储至有序表中。通过将需要写入的第一数据作为最后访问的数据存储在哈希表中,而将哈希表中删除的最先访问的第二数据顺序存储至有序表中,针对不同数据采用了不同存储方式,提高了数据访问效率,解决了相关技术中,内存中数据的存储只支持建立最近最少使用缓存(lrucache)的方式对访问频率较高的数据进行存储,或者是采用依据索引顺序的有序表进行存储,但lrucache方式对访问频率较低的数据访问速度较慢,而有序表方式对访问频率较高的数据命中率较差,致使内存的数据访问效率较低的问题。

本发明第二方面实施例提出了一种内存数据读取方法,包括:

根据查询信息,在设置于内存的哈希表中,查询与所述查询信息匹配的匹配数据;其中,所述哈希表中的各条数据具有访问先后顺序;

若未在所述哈希表中查询到所述匹配数据,在设置于内存的有序表中继续查询所述匹配数据;

在所述有序表中查询到所述匹配数据时,对所述匹配数据进行读取;

将读取到的所述匹配数据作为最后访问的数据,存储在所述哈希表中。

本发明实施例的内存数据读取方法中,根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据,若哈希表中未查询到匹配数据,在设置于内存的有序表中继续查询匹配数据,在有序表中查询到匹配数据时,对匹配数据进行读取,并将读取到的匹配数据作为最后访问的数据,存储在哈希表中。通过在内存中设置哈希表存储访问频率较高的数据,并设置有序表顺序存储哈希表中删除的访问频率较低的数据,针对不同数据采用了不同的存储方式,提高了数据的查询效率。

本发明第三方面实施例提出了一种内存数据写入装置,该装置包括:

获取模块,用于获取内存中需写入的第一数据;

第一存储模块,用于将所述第一数据作为最后访问的数据,存储在哈希表中;其中,所述哈希表中的各条数据具有访问先后顺序;

删除模块,用于若所述哈希表的存储空间不足,从所述哈希表中删除最先访问的第二数据;

第二存储模块,用于将所述第二数据存储至有序表中。

本发明实施例的一种内存数据写入装置中,获取模块用于获取内存中需写入的第一数据,第一存储模块用于将第一数据作为最后访问的数据,存储在哈希表中,删除模块用于若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据,第二存储模块用于将第二数据存储至有序表中,通过在内存中设置哈希表存储访问频率较高的数据,并设置有序表顺序存储哈希表中删除的访问频率较低的数据,针对不同数据采用了不同的存储方式,提高了数据的查询效率。

本发明第四方面实施例提出了一种内存数据读取装置,该装置包括:

查询模块,用于根据查询信息,在设置于内存的哈希表中,查询与所述查询信息匹配的匹配数据;其中,所述哈希表中的各条数据具有访问先后顺序;若未在所述哈希表中查询到所述匹配数据,在设置于内存的有序表中继续查询所述匹配数据;

读取模块,用于在所述有序表中查询到所述匹配数据时,对所述匹配数据进行读取;

存储模块,用于将读取到的所述匹配数据作为最后访问的数据,存储在所述哈希表中。

本发明实施例的内存数据读取装置中,查询模块用于根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据,若哈希表中未查询到匹配数据,在设置于内存的有序表中继续查询匹配数据,读取模块用于在有序表中查询到匹配数据时,对匹配数据进行读取,存储模块用于将读取到的匹配数据作为最后访问的数据,存储在哈希表中。通过在内存中设置哈希表存储访问频率较高的数据,并设置有序表顺序存储哈希表中删除的访问频率较低的数据,针对不同数据采用了不同的存储方式,提高了数据的查询效率。

本发明第五方面实施例提出了一种计算机设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现如第一方面实施例所述的内存数据写入方法,或者,实现如第二方面实施例所述的内存数据读取方法。

本发明第六方面实施例提出了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,实现如第一方面实施例所述的内存数据写入方法,或者,实现如第二方面实施例所述的内存数据读取方法。

本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:

图1为本发明实施例所提供的一种内存数据读写系统的结构示意图;

图2为本发明实施例所提供的一种内存数据写入方法的流程示意图;

图3为本发明实施例所提供的另一种内存数据写入方法的流程示意图;

图4为本发明实施例所提供的跳跃表中节点的结构示意图;

图5为本发明实施例所提供的跳跃表的示意图;

图6为本发明实施例所提供的一种内存数据读取方法的流程示意图;

图7为本发明实施例所提供的另一种内存中数据读取方法的流程示意图;

图8为本发明实施例所提供的一种内存数据写入装置的结构示意图;

图9为本发明实施例所提供的另一种内存数据写入装置的结构示意图;

图10为本发明实施例所提供的一种内存数据读取装置的结构示意图;以及

图11为本发明实施例所提供的另一种内存数据读取装置的结构示意图。

具体实施方式

下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。

相关技术中内存的数据存储方式,主要采用两种方式,方式一:仅采用顺序存储方式,当有数据需要追加写入时,在内存中是按照特定的顺序进行顺序存储,使得访问频率较高的数据无法优先访问到,导致访问频率较高的数据命中率低的问题;方式二:在内存中设置lru缓存存储,当缓存中存储空间不足时,删除的数据没有按照顺序存储的方式,导致删除的数据查询效率较低的问题。

为此,本发明实施例提出了一种内存数据写入方法,获取内存中需写入的第一数据,将第一数据作为最后访问的数据,存储在哈希表中,若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据,并将第二数据存储至有序表中。通过在内存中设置缓存区域放置访问频率较高的数据,当缓存区域的存储空间不足时,从哈希表中删除数据,并将删除的数据顺序存储至内存的有序表中,针对不同数据采用不同的存储方式,实现了访问频率较高的数据命中率的同时,提高了访问频率低的数据的查询效率。

下面参考附图描述本发明实施例的内存数据读写方法和装置。

在描述本发明实施例的内存数据读写方法之前,先对本发明实施例的内存数据读写方法,所基于的内存数据读写系统进行说明。

图1为本发明实施例所提供的一种内存数据读写系统的结构示意图,如图1所示,该系统包括:客户端10、内存20、磁盘30,其中内存20包括:哈希表201、双向循环列表202和有序表203。

客户端10,生成需要写入内存20中的数据。

内存20,用于从客户端10获取需写入内存20中的数据。

哈希表201,用于存储写入内存20中的数据。

双向循环列表202,用于在列表中存储对应哈希表201中的数据的节点,并用于指示哈希表201中各条数据的访问先后顺序。

有序表203,用于顺序存储哈希表201中删除的数据。

磁盘30,用于存储有序表203中删除的数据。

内存采用具有访问顺序的哈希表以及有序表两种方式进行存储,针对热点数据采用具有访问顺序的哈希表进行存储,针对非热点数据采用有序表进行存储。内存数据读写系统针对不同数据采用了不同存储方式,提高了数据访问效率。

基于图1所示的内存数据读写系统,分别提供了内存数据写入方法和内存数据读取方法,以便对内存数据进行访问。

图2为本发明实施例所提供的一种内存数据写入方法的流程示意图,该方法基于图1对应的系统实现。

如图2所示,该方法包括以下步骤:

步骤201,获取内存中需写入的第一数据。

具体地,从客户端获取需要写入内存中的数据,为了和内存中的其他数据区分,将该数据称为第一数据。

步骤202,将第一数据作为最后访问的数据,存储在哈希表中。

其中,哈希表中的各条数据具有访问先后顺序。

具体地,建立第一数据的索引,根据第一数据的索引,将第一数据采用哈希算法进行处理后,将第一数据对应的哈希值存储至内存中的哈希表中,并在内存中的双向循环链表lru链表的头部插入对应第一数据的节点。其中,lru链表用于指示哈希表中各条数据的访问先后顺序。

步骤203,若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据。

具体地,将第一数据存储入哈希表时,若哈希表的存储空间不足,则需要从哈希表中删除最先访问的数据,为了和第一数据区分,称为第二数据。

需要说明的是,哈希表中存储的数据是按照最后一次访问时间来排序的,最先访问的第二数据是指哈希表中访问时间距离当前时间最远的数据。

步骤204,将第二数据存储至有序表中。

其中,有序表包括跳跃表,用于存储从哈希表中删除的数据。

具体地,跳跃表包括第一链表,第一链表中各节点的顺序根据对应已存储数据的索引排序得到。在跳跃表的第一链表中各节点对应的已存储数据中,查询与第二数据的索引相同的目标数据,若在第一链表中未查询到目标数据,将对应第二数据的节点插入第一链表;若在第一链表中查询到目标数据,则在该目标数据在第一链表中节点的位置链接第二链表,在第二链表头部插入对应第二数据的节点。在第一链表中,没有增加和已存储的目标数据索引相同的第二数据的节点,减少了跳跃表中节点的数量,可以提高查询的速度。

需要说明的是,跳跃表中的数据是依据索引顺序存储的,该索引顺序的具体方式,本领域技术人员可以根据具体的应用场景的需要进行设定,本实施例中不做限定。

本发明实施例的一种内存数据写入方法中,获取内存中需写入的第一数据,将第一数据作为最后访问的数据,存储在哈希表中,若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据,将第二数据存储至有序表中。内存采用具有访问顺序的哈希表以及有序表两种方式进行存储,针对热点数据采用具有访问顺序的哈希表进行存储,针对非热点数据采用有序表进行存储。内存数据读写系统针对不同数据采用了不同存储方式,提高了数据访问效率。

为了清楚说明上一实施例,本实施例提供了另一种内存数据写入方法,图3为本发明实施例所提供的另一种内存数据写入方法的流程示意图,进一步清楚的说明了当哈希表中存储空间不足时,删除的数据如何顺序存储至有序表中。

如图3所示,该方法可以包括以下步骤:

步骤301,获取内存中需写入的第一数据。

具体地,内存中需要写入的第一数据,可以看作是访问频率较高的数据,将第一数据写入内存中的哈希表中。

步骤302,判断哈希表的存储空间是否充足,若充足,执行步骤303,否则,执行步骤304。

具体地,根据内存中分配给哈希表的存储容量的大小,判断当前哈希表的存储空间是否充足,若充足,则将第一数据作为最后访问的数据存储在哈希表中;若不充足,则需要从哈希表中删除数据,将哈希表中最先访问的第二数据删除,来确保哈希表中存储空间充足。

步骤303,将第一数据作为最后访问的数据存储在哈希表中,并在lru链表头部插入对应第一数据的节点。

具体地,可参照上一实施例中的步骤202,此处不再赘述。

需要说明的是,哈希表和lru链表组成了内存中的缓存,来存储内存中访问频率较高的数据,提高了访问频率较高的数据的访问速度和命中率。

步骤304,从哈希表中删除最先访问的第二数据。

具体地,步骤304可参照上一实施例中的步骤203,此处不再赘述。步骤304执行完后,需要返回执行步骤303,步骤303执行完成后,执行步骤305。

步骤305,判断有序表中存储空间是否充足,若充足,则执行步骤306,否则,执行步骤307

步骤306,将第二数据存储至有序表中。

其中,有序表包含跳跃表,跳跃表中的数据是有序存储的,而跳跃表包含第一链表,第一链表中各节点的顺序根据对应已存储数据的索引排序得到。

其中,跳跃表中的索引包括作为一级索引的主键(mainkey)和/或作为二级索引的行主键(rowkey)。具体地,主键是各条数据单一的一列,主键无法唯一确定一条数据;而行主键,由一列或多列联合组成,每一列即为一个主键,当行主键中包含至少两个主键时,行主键中至少两个主键的取值串联为一个字符串,用于唯一确定一条数据。例如,一级索引包括的一个主键,可以为姓名,二级索引包括的至少两个主键,可以为:姓名、年龄、职业、爱好和手机号等,将“姓名、年龄、职业、爱好和手机号等”串联为一个字符串作为行主键可以用来唯一确定一条数据。该索引方式通过跳跃表中行主键的存储,增加了关键字的信息,有利于内存中数据的多条件查询和读取,其中,内存数据读取方法后续实施例中会具体说明。

需要说明的是,主键的取值,在跳跃表中实际存储时,作为一种可能的实现方式,可以采用哈希算法哈希成哈希值进行存储,也可以采用其他算法转变为处理器可识别的字符进行存储,对此,本领域技术人员可根据实际情况进行变换,本实施例中不作限定。

图4为本发明实施例所提供的跳跃表中节点的结构示意图,使得跳跃表中不仅可以存储单一的主键,还实现了行主键的存储,如图4所示,跳跃表扩充了节点的字段,数据按照行主键包括的三个主键:主键1、主键2和主键3,进行了顺序存储,例如进行升序排列或者降序排序,实现了节点中行主键的存储。本实施例中,行主键中可以包含至少2个主键,使得信息更丰富,可以更加快速准确的查询到一条数据,提高了数据存储的灵活性和可应用的场景。

具体地,在跳跃表的第一链表中各节点对应的已存储数据中,查询与第二数据的索引相同的目标数据,若在第一链表中未查询到目标数据,将对应第二数据的节点插入第一链表。其中,第一链表中数据的是有序存储的,作为一种可能的实现方式,是按照节点对应的数据的大小顺序存储的,当在第一链表中为查询到目标数据时,在第一链表中查找到大于第二数据的数据对应的节点,在该节点之前插入对应第二数据的节点,实现顺序存储。

若在第一链表中查询到目标数据,则在该目标数据在第一链表中节点的位置链接第二链表,在第二链表头部插入对应第二数据的节点。图5为本发明实施例所提供的跳跃表的示意图,如图5所示,0级-1级用于指示跳跃表的第一链表,值1-值3指示第一链表中节点值为7的节点位置链接的第二链表。其中,该第二链表链接在第一链表对应取值为7的节点,用来表示第二链表存储的值1-值3是对取值为7的历次修改,其中第二链表头部节点对应值1为最新数据。在第一链表中,以第二链表的方式插入第二数据对应的节点,没有增加和已存储的目标数据索引相同,也就是节点值相同的第二数据的节点,减少了跳跃表中节点的数量,从而提高数据查询的效率。

例如,第一链表中,一个节点对应的节点值为:小明男20岁教师139138*****,也就是说该节点值指示了小明的个人信息,而小明的信息有可能发生变化,例如,电话号码变更,年龄修改或者是职业修改等,虽然小明的个人信息发生了变化,但是该信息仍然指示的是小明的个人信息,所以,当小明的信息修改后,修改后生成的小明的信息的索引和第一链表中存储的小明的信息的索引相同,都用于指示小明的个人信息,所以,每一次信息修改后,在指示小明信息的节点位置链接第二链表,并在第二链表中插入对应修改后的小明的信息的节点和信息数据。减少了跳跃表中同一数据对应节点的数量,提高了数据查询的效率,同时,保留了同一条数据的历史修改记录。

需要说明的是,有序表中存储的访问频率较低的数据,是相对于哈希表中存储的访问频率较高的数据而言的,因哈希表中的存储容量有限,仅能存储移动数量的访问频率较高的数据,而对于访问频率相对低的数据,则存储于有序表中,依据索引顺序存储的方式,提高了非热点数据查询的速度。

步骤307,将有序表中已存储数据转存至磁盘中。

具体地,若有序表中存储空间不足,则将有序表中已存储的数据,转移一部分数据至磁盘中存储,从而使得有序表中有足够的存储空间来存储第二数据。因从有序表中转移出的数据,在有序表中是顺序存储的,故转移到磁盘中也按照在有序表中的存储顺序进行存储,从而可提高数据查找时的查找速度。

本发明实施例的一种内存数据写入方法中,获取内存中需写入的第一数据,将第一数据作为最后访问的数据,存储在哈希表中,若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据,将第二数据存储至有序表中。通过将需要写入的第一数据作为最后访问的数据存储在哈希表中,保证了访问频率较高的数据访问的命中率,而将哈希表中删除的最先访问的第二数据顺序存储至有序表中,对删除数据实现了顺序存储,提高了数据查询的效率。

上述实施例中说明了内存数据的写入方法,下面通过实施例说明内存数据读取的方法,该方法基于图1对应的系统实施例实现。

基于上述实施例,图6为本发明实施例所提供的一种内存数据读取方法的流程示意图,如图6所示,该方法包括如下步骤:

步骤601,根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据。

其中,哈希表中的各条数据具有访问先后顺序,哈希表中用于存储访问频率较高的数据。

具体地,lru链表用于指示哈希表中各条数据的访问先后顺序,根据查询信息,在lru链表指示的哈希表中各条数据的访问顺序,遍历哈希表中的数据,查找与查询信息匹配的匹配数据。

步骤602,若未在哈希表中查询到匹配数据,在设置于内存的有序表中继续查询匹配数据。

具体地,有序表中存储有从哈希表中删除的最先访问的数据,当在哈希表中查询不到匹配数据时,可在有序表中继续查找,可以提高数据的查询速度。

步骤603,在有序表中查询到匹配数据时,对匹配数据进行读取。

步骤604,将读取到的匹配数据作为最后访问的数据,存储在哈希表中。

具体地,将匹配数据作为最后访问的数据,建立匹配数据的索引,根据匹配数据的索引,对匹配数据采用哈希算法进行哈希后,作为最后访问的数据存储至哈希表中,并在双向循环链表的头部插入对应匹配数据的节点,从而提高后续数据查询的命中率。

本发明实施例的内存数据读取方法中,根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据,若哈希表中未查询到匹配数据,在设置于内存的有序表中继续查询匹配数据,在有序表中查询到匹配数据时,对匹配数据进行读取,并将读取到的匹配数据作为最后访问的数据,存储在哈希表中。通过在内存中设置哈希表存储访问频率较高的数据,并设置有序表顺序存储哈希表中删除的访问频率低的数据,针对不同数据采用不同的存储方式,提高了数据的查询效率。

为了进一步清楚的说明内存中数据读取的方法,在上述实施例的基础上,本发明实施例还提出了一种内存中数据读取的方法的可能的实现方式,图7为本发明实施例所提供的另一种内存中数据读取方法的流程示意图,如图7所示,该方法还可以包括如下步骤:

步骤701,根据查询信息,查询与查询信息匹配的数据。

具体地,根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据,其中,哈希表中的各条数据具有访问先后顺序。

步骤702,从哈希表中查询,判断哈希表中是否查询到匹配数据,若是,执行步骤703,否则,执行步骤704。

步骤703,从哈希表中进行读取,并在双向循环列表中,将匹配数据对应的lru节点移动至lru链表头部。

具体地,若在哈希表中查询到匹配数据,则从哈希表中读取匹配数据,并在双向循环列表中,将匹配数据对应的双向循环列表的节点移动至链表的头部,提高该匹配数据的访问优先度。

步骤704,从有序表中查询,判断有序表中是否查询到匹配数据。

具体地,根据匹配信息,查询跳跃表节点的索引,其中,索引包括行主键,行主键中包括至少两个主键时,行主键中至少两个主键的取值串联为一个字符串,当匹配信息与字符串的前缀或者与字符串整体相匹配时,查询到匹配数据。

步骤705,从有序表中读取匹配数据。

步骤706,将读取到的匹配数据作为最后访问的数据,存储在哈希表中,并在lru链表头部插入对应匹配数据的节点。

步骤707,从磁盘中查询,判断磁盘中是否查询到匹配数据,若是,则执行步骤706,否则,执行步骤708。

具体地,若在磁盘中查询到匹配数据,则从磁盘中读取到匹配数据,建立匹配数据的索引,根据匹配数据的索引,将哈希后的匹配数据作为最后访问的数据存储至哈希表中,并在双向循环链表lru链表的头部插入对应匹配数据的节点。

步骤708,查询失败。

具体地,若在磁盘中未查询到和查询信息匹配的数据,则是查询失败。

本发明实施例的内存数据读取方法中,根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据,若哈希表中未查询到匹配数据,在设置于内存的有序表中继续查询匹配数据,在有序表中查询到匹配数据时,对匹配数据进行读取,并将读取到的匹配数据作为最后访问的数据,存储在哈希表中。通过在内存中设置哈希表存储访问频率较高的数据,并设置有序表顺序存储哈希表中删除的访问频率低的数据,针对不同数据采用不同的存储方式,提高了数据的查询速度。

为了实现上述实施例,本发明还提出一种内存数据写入装置。

图8为本发明实施例所提供的一种内存数据写入装置的结构示意图。

如图8所示,该装置包括:获取模块81、第一存储模块82、删除模块83和第二存储模块84。

获取模块81,用于获取内存中需写入的第一数据。

第一存储模块82,用于将第一数据作为最后访问的数据,存储在哈希表中,其中,哈希表中的各条数据具有访问先后顺序。

删除模块83,用于若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据。

第二存储模块84,用于将第二数据存储至有序表中。

需要说明的是,前述对内存数据写入方法实施例的解释说明也适用于该实施例的装置,此处不再赘述。

本发明实施例的一种内存数据写入装置中,获取模块用于获取内存中需写入的第一数据,第一存储模块用于将第一数据作为最后访问的数据,存储在哈希表中,删除模块用于若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据,第二存储模块用于将第二数据存储至有序表中。通过将需要写入的第一数据作为最后访问的数据存储在哈希表中,而将哈希表中删除的最先访问的第二数据顺序存储至有序表中,针对不同数据采用了不同存储方式,提高了数据访问效率,解决了相关技术中,内存中数据的存储只支持建立最近最少使用缓存(lrucache)的方式对访问频率较高的数据进行存储,或者是采用依据索引顺序的有序表进行存储,但lrucache方式对访问频率较低的数据访问速度较慢,而有序表方式对访问频率较高的数据命中率较差,致使内存的数据访问效率较低的问题。

基于上述实施例,本发明实施例还提供了一种内存数据写入装置的可能的实现方式,图9为本发明实施例所提供的另一种内存数据写入装置的结构示意图,如图9所示,在上一实施例的基础上,该装置还包括:第三存储模块85。

第三存储模块85,用于若有序表的存储空间不足,将有序表中的已存储数据转存至磁盘中。

作为一种可能的实现方式,第一存储模块82,具体用于:

建立第一数据的索引,根据第一数据的索引,将哈希后的第一数据存储至哈希表,在双向循环链表lru链表的头部插入对应第一数据的节点,其中,lru链表用于指示哈希表中各条数据的访问先后顺序。

作为一种可能的实现方式,第二存储模块84,具体用于:

在跳跃表的各节点对应的已存储数据中,查询与第二数据的索引相同的目标数据,其中,跳跃表包括第一链表,第一链表中各节点的顺序根据对应已存储数据的索引排序得到。若查询到目标数据,在第二链表头部插入对应第二数据的节点,其中,第二链表链接对应目标数据的第一链表节点位置;若未查询到目标数据,将对应第二数据的节点插入所述第一链表。

作为一种可能的实现方式,索引包括作为一级索引的主键和/或作为二级索引的行主键,其中,行主键中包括至少两个主键时,行主键中至少两个主键的取值串联为一个字符串。

需要说明的是,前述对内存数据写入方法实施例的解释说明也适用于该实施例的装置,此处不再赘述。

本发明实施例的一种内存数据写入装置中,获取模块用于获取内存中需写入的第一数据,第一存储模块用于将第一数据作为最后访问的数据,存储在哈希表中,删除模块用于若哈希表的存储空间不足,从哈希表中删除最先访问的第二数据,第二存储模块用于将第二数据存储至有序表中。通过将需要写入的第一数据作为最后访问的数据存储在哈希表中,而将哈希表中删除的最先访问的第二数据顺序存储至有序表中,而当有序表的存储空间不足时,将有序表中的已存储数据顺序转存至磁盘中,对删除数据和转存至磁盘中的数据采用了顺序存储的方式,提高了数据查询的效率。

为了实现上述实施例,本发明还提出一种内存数据读取装置。

图10为本发明实施例所提供的一种内存数据读取装置的结构示意图,如图10所示,该装置包括:查询模块91、读取模块92和存储模块93。

查询模块91,用于根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据,其中,哈希表中的各条数据具有访问先后顺序,若未在哈希表中查询到所述匹配数据,在设置于内存的有序表中继续查询匹配数据。

读取模块92,用于在有序表中查询到匹配数据时,对匹配数据进行读取。

存储模块93,用于将读取到的匹配数据作为最后访问的数据,存储在哈希表中。

需要说明的是,前述对内存数据读取方法实施例的解释说明也适用于该实施例的装置,此处不再赘述。

本发明实施例的内存数据读取装置中,根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据,若哈希表中未查询到匹配数据,在设置于内存的有序表中继续查询匹配数据,在有序表中查询到匹配数据时,对匹配数据进行读取,并将读取到的匹配数据作为最后访问的数据,存储在哈希表中。通过在内存中设置顺序存储的有序表,提高了数据查询的效率。

基于上述实施例,本发明实施例还提供了一种内存数据读取装置的可能的实现方式,图11为本发明实施例所提供的另一种内存数据读取装置的结构示意图,如图11所示,在上一实施例的基础上,该装置还包括:移动模块94。

作为一种可能的实现方式,读取模块92,用于若在哈希表中查询到匹配数据,对匹配数据进行读取。

移动模块94,用于在双向循环链表lru链表中,将匹配数据对应的lru节点移动至lru链表头部,其中,lru链表用于指示哈希表中各条数据的访问先后顺序。

作为一种可能的实现方式,查询模块91,具体用于:

根据匹配信息,查询跳跃表节点的索引,其中,索引包括行主键,行主键中包括至少两个主键时,行主键中至少两个主键的取值串联为一个字符串,当匹配信息与字符串的前缀或者与字符串整体相匹配时,查询到匹配数据。

作为一种可能的实现方式,读取模块92,还可以用于:

若在有序表中未查询到匹配数据,从磁盘中查询匹配数据,在磁盘中查询到匹配数据时,对匹配数据进行读取。

需要说明的是,前述对内存数据读取方法实施例的解释说明也适用于该实施例的装置,此处不再赘述。

本发明实施例的内存数据读取装置中,根据查询信息,在设置于内存的哈希表中,查询与查询信息匹配的匹配数据,若哈希表中未查询到匹配数据,在设置于内存的有序表中继续查询匹配数据,在有序表中查询到匹配数据时,对匹配数据进行读取,并将读取到的匹配数据作为最后访问的数据,存储在哈希表中。通过在内存中设置顺序存储的有序表,提高了数据查询的效率。

为了实现上述实施例,本发明实施例还提出了一种计算机设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现前述内存数据写入方法实施例所述的内存数据写入方法,或者,实现前述内存数据读取方法实施例所述的内存数据读取方法。

为了实现上述实施例,本发明实施例还提出了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,实现前述内存数据写入方法实施例所述的内存数据写入方法,或者,实现前述内存数据读取方法实施例所述的内存数据读取方法。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1