内存存储方法与装置、内存查询方法与装置与流程

文档序号:13876273阅读:157来源:国知局
内存存储方法与装置、内存查询方法与装置与流程

本发明实施例涉及计算机技术,尤其涉及一种内存存储方法与装置、内存查询方法与装置。



背景技术:

随着大数据的发展和信息的共享,dmp(data-managementplatform,数据管理平台)得到了广泛的应用。dmp包括十几亿到上百亿量级的数据,其实时查询通常由内存型数据库提供存储支持,如此巨大的量级对内存的消耗基本在几十t左右,成本巨大。这就需要一种既能提高实时查询的性能(一般需要在5ms以下)又能用较低内存支撑海量数据的存储数据库。

目前对于海量内存存储的一般解决方案是rediscluster(一种开源分布式内存key-value数据库)和memcached(一个高性能的分布式内存对象缓存系统),通过lru(leastrecentlyused,最近最久未使用)等策略将一部分热数据加载在内存中提供查询,而将冷数据放入较为缓慢廉价的存储设备中。其本质上是通过业务特点减少了需要缓存的数据的数量,做出了低频访问数据的实时性的牺牲,以达到节约存储成本的目的。

但是,对于无法预判热度的数据来说,现有技术无法实现减少内存的存储。



技术实现要素:

本发明实施例提供一种内存存储方法与装置、内存查询方法与装置,以解现有技术无法实现减少内存的存储的问题。

第一方面,本发明实施例提供一种内存存储方法,包括:

根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值,所述哈希桶函数为所述关键字与所述哈希桶值之间的函数关系式;

根据每个哈希桶值和哈希函数,确定每个哈希桶值对应的哈希桶在存储表中的位置;

根据所述哈希桶在存储表中的位置,将所述待存储数据存储在所述哈希桶中,所述存储表包括至少一个哈希桶和存储在所述哈希桶中的待存储数据。

可选的,所述哈希桶还包括所述待存储数据的关键字与所述待存储数据的映射关系。

可选的,所述存储表包括的哈希桶的数目为2m个,所述m为大于0的正整数。

在第一方面的一种可能的实现方式中,所述根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值,具体包括:

根据公式hash′(ki)=md5(ki)&((2128)<<(127-m)),获得每个待存储数据对应的哈希桶值hash′(ki);

其中,所述ki为待存储数据i的关键字,所述md5为单向散列算法,所述m为所述md5的前m位。

可选的,所述哈希桶中不同的待存储数据呈线性排列。

可选的,每个哈希桶中存储的待存储数据的数目符合多项式分布。

在第一方面的另一种可能的实现方式中,所述方法还包括:

获取每个哈希桶中失效的待存储数据,并删除所述失效的待存储数据。

在第一方面的另一种可能的实现方式中,所述获取每个哈希桶中失效的待存储数据,并删除所述失效的待存储数据,具体包括:

判断每个哈希桶中存储的待存储数据的条数是否大于或等于预设条数;

若是,则判断每个第一哈希桶中每个待存储数据的初始存储时刻是否大于或等于预设时刻,所述第一哈希桶为各哈希桶中待存储数据的条数大于或等于预设条数的哈希桶;

若所述第一哈希桶中所述待存储数据的初始存储时刻大于或等于预设时刻,则从所述第一哈希桶中删除所述待存储数据。

在第一方面的另一种可能的实现方式中,所述获取每个哈希桶中失效的待存储数据,并删除所述失效的待存储数据,具体包括:

判断每个哈希桶的容量使用率是否大于或等于预设容量使用率;

若是,则根据每个第二哈希桶中每个待存储数据的初始存储时刻,从每个第二哈希桶中删除目标数量的待存储数据,所述目标数量为所述第二哈希桶中超出所述预设容量使用率的待存储数据条数,所述第二哈希桶为各哈希桶中容量使用率大于或等于预设容量使用率的哈希桶。

第二方面,本发明实施例提供一种内存查询方法,包括:

根据待查询数据的关键字和哈希桶函数,获得所述待查询数据对应的哈希桶值,所述哈希桶函数为所述关键字与所述哈希桶值之间的函数关系式;

根据所述哈希桶值和哈希函数,确定所述哈希桶值对应的哈希桶在存储表中的位置,所述存储表包括至少一个哈希桶和存储在所述哈希桶中的待查询数据;

根据所述哈希桶的位置,从所述哈希桶中读取所述待查询数据。

第三方面,本发明实施例提供一种内存存储装置,包括:

获取模块,用于根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值,所述哈希桶函数为所述关键字与所述哈希桶值之间的函数关系式;

确定模块,用于根据每个哈希桶值和哈希函数,确定每个哈希桶值对应的哈希桶在存储表中的位置;

存储模块,用于根据所述哈希桶在存储表中的位置,将所述待存储数据存储在所述哈希桶中,所述存储表包括至少一个哈希桶和存储在所述哈希桶中的待存储数据。

可选的,所述哈希桶还包括所述待存储数据的关键字与所述待存储数据的映射关系。

可选的,所述存储表包括的哈希桶的数目为2m个,所述m为大于0的正整数。

在第二方面的一种可能的实现方式中,所述根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值,具体包括:

所述获取模块,具体用于根据公式hash′(ki)=md5(ki)&((2128)<<(127-m)),获得每个待存储数据对应的哈希桶值hash′(ki);

其中,所述ki为待存储数据i的关键字,所述md5为单向散列算法,所述m为所述md5的前m位。

可选的,所述哈希桶中不同的待存储数据呈线性排列。

可选的,每个哈希桶中存储的待存储数据的数目符合多项式分布。

在第二方面的另一种可能的实现方式中,所述装置还包括删除模块:

所述获取模块,还用于获取每个哈希桶中失效的待存储数据,

所述删除模块,用于从所述哈希桶中删除所述失效的待存储数据。

在第二方面的另一种可能的实现方式中,所述装置还包括第一判断模块;

所述第一判断模块,用于判断每个哈希桶中存储的待存储数据的条数是否大于或等于预设条数;

所述第一判断模块,还用于判断每个第一哈希桶中每个待存储数据的初始存储时刻是否大于或等于预设时刻,所述第一哈希桶为各哈希桶中待存储数据的条数大于或等于预设条数的哈希桶;

所述删除模块,具体用于在所述第一判断模块确定所述第一哈希桶中所述待存储数据的初始存储时刻大于或等于预设时刻时,从所述第一哈希桶中删除所述待存储数据。

在第二方面的另一种可能的实现方式中,所述装置还包括第二判断模块;

所述第二判断模块,用于判断每个哈希桶的容量使用率是否大于或等于预设容量使用率;

所述删除模块,还具体用于根据每个第二哈希桶中每个待存储数据的初始存储时刻,从每个第二哈希桶中删除目标数量的待存储数据,所述目标数量为所述第二哈希桶中超出所述预设容量使用率的待存储数据条数,所述第二哈希桶为各哈希桶中容量使用率大于或等于预设容量使用率的哈希桶。

第四方面,本发明实施例提供一种内存查询装置,包括:

获取模块,用于根据待查询数据的关键字和哈希桶函数,获得所述待查询数据对应的哈希桶值,所述哈希桶函数为所述关键字与所述哈希桶值之间的函数关系式;

确定模块,用于根据所述哈希桶值和哈希函数,确定所述哈希桶值对应的哈希桶在存储表中的位置;其中,所述存储表包括至少一个哈希桶和存储在所述哈希桶中的待查询数据;

读取模块,用于根据所述哈希桶的位置,从所述哈希桶中读取所述待查询数据。

本发明实施例提供的内存存储方法与装置、内存查询方法与装置,通过根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值,根据每个哈希桶值和哈希函数,确定每个哈希桶值对应的哈希桶在内存的存储表中的位置;根据每个哈希桶在存储表中的位置,将所述待存储数据存储在所述哈希桶中。本实施例,通过将哈希桶值作为key值,在存储n条记录时,只需要哈希桶值空间大小个key值,进而节约了内存,实现了内存的实时查询。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例一提供的内存存储方法的流程图;

图2为现有的hash表示意图;

图3为本实施例hash桶存储结构示意图;

图4为本发明实施例二提供的内存存储方法中时间优先的失效策略的流程图;

图4a为本发明实施例二提供的内存存储方法中容量优先的失效策略的流程图;

图5为本发明实施例一提供的内存查询储方法的流程图;

图6为本发明实施例一提供的内存存储装置的结构图;

图7为本发明实施例二提供的内存存储装置的结构图;

图8为本发明实施例三提供的内存存储装置的结构图;

图9为本发明实施例四提供的内存存储装置的结构图;

图10为本发明实施例提供的内存查询装置的结构图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

目前内存型数据库比较主流的有rediscluster、memcached(一个高性能的分布式内存对象缓存系统)。由于rediscluster(redis集群)支持分布式扩展,在当下得到了广泛的应用。本发明实施例基于当下主流的内存key-value数据库rediscluster和memcached,在其数据结构之上做了优化,可有效的节约内存。

下面以具体地实施例对本发明的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。

图1为本发明实施例一提供的内存存储方法的流程图。本实施例的执行主体为内存存储装置。本实施例涉及的是内存存储装置在内存中存储待存储数据的具体过程。如图1所示,本实施例的方法可以包括:

s101、根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值。

在key-value数据库中由于需要在o(1)时间内定位数据,则需要hash(哈希)表来实现底层数据结构。hash表采用一个映射函数f:key-&gt;address将关键字映射到该记录在表中的存储位置,从而在想要查找该记录时,可以根据关键字和映射关系计算出该记录在表中的存储位置。该映射关系称为hash函数,而通过hash函数和关键字计算出来的存储位置(该存储位置为表中的存储位置)称为hash地址。

举例说明,对于存储k1=&gt;v1、k2=&gt;v2…kn=&gt;vn等记录时,现有的hash表存储方式如图2所示,kn作为hash表中的key,vn作为hash表中的value,根据key和hash函数可以获得vn的存储位置,将vn存储在该存储位置对应的value中。但是对于不同的key,hash函数可能计算出相同的address,这样就发生了冲突。hash表为了降低冲突率就必须开辟大量的hash空间。同时,为了解决hash冲突也需要大量的指针来实现跳跃表的查询,由此可知hash表本身的存储会消耗大量的内存,甚至比具体需要存储的数据还要大。

本实施例的方法,在存储相同数量数据的前提下,使用更少的key的个数来节约内存的消耗。具体是,提出了哈希桶的概念,本实施例的内存存储方法可以成为哈希桶存储,一个哈希桶对应一个key,对于存储相同数量的数据,本申请使用的key的个数较少,进而节约了内存。本实施例的方法,当存储的数据越大,则节约的内存越多。

具体的,在存储数据时,首先需要计算每个待存储数据对应的哈希桶值,具体是,根据每个待存储数据的关键字和哈希桶函数,计算每个待存储数据的哈希桶值。其中哈希桶函数是关键字与哈希桶值之间的函数关系式,哈希桶函数可以根据实际需要进行设定,本实施例对此不做限制。

例如,有四条待存储数据分别为:“张三15612234570”、“李四17812234002”、“王五18100042301”和“赵六13969004576”,其中各自对应的关键字分别为“张三”、“李四”、“王五”和“赵六”,将上述各关键字带入哈希桶函数计算出各自对应的哈希桶值,假设分别为10、39、10、40。

s102、根据每个哈希桶值和哈希函数,确定每个哈希桶值对应的哈希桶在存储表中的位置。

图3为本实施例hash桶存储结构示意图,如图3所示,本实施例的内存以存储表的形式来存储数据,其中存储表包括至少一个哈希桶。这样在根据上述步骤计算出每个待存储数据对应的哈希桶值后,还需要确定每个哈希桶值所对应的哈希桶在存储表中的位置。

具体的,本实施例将上述计算获得的哈希桶值作为hash表中的key值,根据系统中原有的哈希函数,计算各哈希桶值对应的哈希桶在存储表中的位置。

例如,将“张三”对应的哈希桶值10、“李四”对应的哈希桶值39、“王五”对应的哈希桶值10和“赵六”对应的哈希桶值40,分别带入哈希函数,获得各自对应的哈希桶在存储表中的位置,假设分别为2、4、2、5。

s103、根据所述哈希桶在存储表中的位置,将所述待存储数据存储在所述哈希桶中。

具体的,根据上述方法获得各哈希桶值对应的哈希桶在存储表中的位置,这样可以将每个哈希桶值定位到对应的哈希桶上,接着将哈希桶值对应的待存储数据保存到对应的哈希桶中。

本实施例中,当根据哈希桶函数计算关键字的哈希桶值相同时,相同的哈希桶值对应的哈希桶在存储表中的位置也相同。此时,如图3所示,可以将哈希桶值相同的待存储数据保存在同一个哈希桶中,例如,关键字k3的哈希桶值hash’(k3)与关键字k1的哈希桶值hash’(k1)相同,此时可以将hash’(k3)对应的待存储数据v3,以及hash’(k1)对应的待存储数据v1保存在同一个哈希桶1中,即一个哈希桶中可以存储多个待存储数据。

举例说明,继续参照上述例子,假设将关键字“张三”、“李四”、“王五”和“赵六”各自对应的哈希桶值分别为:10、39、10、40,而哈希桶值10、39、10、40各自对应的哈希桶在存储表中的位置分别为:2、4、2、5。此时哈希桶值为10的“张三”和“王五”对应的待存储数据“张三15612234570”和“王五18100042301”存储在存储表中位置为2的同一个哈希桶中。同时,将待存储数据“李四17812234002”单独存储在存储表中位置为4的一个哈希桶中,将待存储数据“赵六13969004576”单独存储在存储表中位置为5的一个哈希桶中。

本实施例对存储表中包括的哈希桶的个数不做限制,具体根据实际需要进行调整。

本实施例的方法,当数据库存储n条记录(即待存储数据)时,常规的hash表存储需要容纳n个key值,而本实施例通过计算每条记录的哈希桶值,将哈希桶值作为hash表存储中的key值,因此,本实施例的方法在存储n条记录时,只需要哈希桶值空间大小个key值,进而节约了内存,实现了内存的实时查询。

本发明实施例提供的内存存储方法,通过根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值,根据每个哈希桶值和哈希函数,确定每个哈希桶值对应的哈希桶在内存的存储表中的位置;根据每个哈希桶在存储表中的位置,将所述待存储数据存储在所述哈希桶中。本实施例,通过将哈希桶值作为key值,在存储n条记录时,只需要哈希桶值空间大小个key值,进而节约了内存,实现了内存的实时查询。

在本实施例的一种可能的实现方式中,所述存储表包括的哈希桶的数目可以为2m个,所述m为大于0的正整数。

举例说明,将哈希桶值hash’的编码空间限制在2^10,那么存储足够多的记录后,redis中也仅有2^10个哈希桶值,对应的哈希桶最多为2^10,这样哈希桶的数量就被限定在一个常量之下,n越大,节约的哈希桶的量越多,对应的节约的内存也越多。对于同一个存储系统来说哈希桶的个数是一定的,为2^m,其中m为大于0的正整数。

在本实施例的另一种可能的实现方式中,上述s101根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值,具体包括:

根据公式hash′(ki)=md5(ki)&((2128)<<(127-m)),获得每个待存储数据对应的哈希桶值hash′(ki);

其中,所述ki为待存储数据i的关键字,所述md5为单向散列算法,所述m为所述md5的前m位。

在本发明实施例的一种可能的实现方式中,当一个哈希桶中可以保存多个待存储数据时,为了方便后期查询,则哈希桶中保存有所述待存储数据的关键字与所述待存储数据的映射关系。

例如,如图3所示,存储表中位置为1的哈希桶中存储有k1=&gt;v1的映射关系以及k3=&gt;v3的映射关系。这样当需要查询k1对应的v1时,则送查k1,先利用哈希桶函数计算出实际存储的key1=hash’(k1),然后通过系统内置的hash函数定位到存储表中的位置,从而找到key1所指向的位置,即位置为1的哈希桶。接着,遍历位置1所指向的哈希桶,从而在该哈希桶中找到k1=&gt;vn这条记录,进而完成准确查询。

可选的,在本实施例中当哈希桶中存储有多个待存储数据时,哈希桶中不同的待存储数据呈线性排列,例如,如图3所示,k1=&gt;v1和k3=&gt;v3呈线性排列。即本实施例的哈希桶值连接的哈希桶采用redis内置的hashmap实现,hashmap可以通过配置,设置成线性存储。也就是说,哈希桶值相同的待存储数据(比如k1、k3)放在同一个hashmap中呈线性排布,这样不会增加额外的指针和hash空间的开销,进而减少了内存。进一步的,当待存储数据越多,那么相比常规存储节约的内存也越大。

可选的,本实施例存储表中各哈希桶中保存的待存储数据的的数目符合多项式分布。

由于hash桶存储实现了定制的哈希桶函数,所以需要保证所有哈希桶桶存储的数据是均衡的,否则整个系统的内存碎片率会变高。因为待存储数据进入每个哈希桶的概率相等,所以哈希桶内部记录的分布符合多项式分布:

公式中p(xk=nk)代表了哈希桶里面存储nk条待存储数据的概率,k代表了哈希桶的个数。当哈希桶的数量比较大,从公式可以看出,每个哈希桶的相差量很小。

由上述可知,本存储表中各哈希桶中存储的待存储数据的数目分布较均匀,进而可以避免存储碎片的产生,使得内存存储交平衡,进而在节约内存的同时,提高了内存存储的可靠性。

图4为本发明实施例二提供的内存存储方法中时间优先的失效策略的流程图,图4a为本发明实施例二提供的内存存储方法中容量优先的失效策略的流程图。在上述实施例的基础上,本实施例还包括s200:获取每个哈希桶中失效的待存储数据,并删除所述失效的待存储数据,以节约内存空间,上述s200具体可以包括两种策略:第一种是时间优先的失效策略、第二种是容量优先的失效策略。

如图4所示,时间优先的失效策略具体可以包括:

s201、判断每个哈希桶中存储的待存储数据的条数是否大于或等于预设条数。

s202、若是,则判断每个第一哈希桶中每个待存储数据的初始存储时刻是否大于或等于预设时刻,所述第一哈希桶为各哈希桶中待存储数据的条数大于或等于预设条数的哈希桶。

s203、若所述第一哈希桶中所述待存储数据的初始存储时刻大于或等于预设时刻,则从所述第一哈希桶中删除所述待存储数据。

具体的,在写入redis的过程中利用一定比例的写操作(可以配置的比例)去检查每个哈希桶内存储的待存储数据的条数,判断每个哈希桶中存储的待存储数据的条数是否大于或等于预设条数。如果哈希桶中存储的待存储数据的条数大于或等于预设条数,则针对该哈希桶发起淘汰策略。为了便于描述,本实施例将待存储数据的条数大于或等于预设条数的哈希桶称为第一哈希桶。

本实施例在redis的hashmap的value中的第一个字节写入了过期时间戳(即预设时刻),系统可以在扫描第一哈希桶内部待存储数据,读取每条待存储数据的时间戳(即每条待存储数据的初始存储时刻)。接着,判断第一哈希桶中每条待存储数据的初始存储时刻是否大于或等于预设时刻,若是,则可确定该条待存储数据过期,从第一哈希桶中删除该过期的待存储数据,具体可以直接调用redis中的hdel命令删除该过期的待存储数据。

如图4a所示,容量优先的失效策略具体可以包括:

s204、判断每个哈希桶的容量使用率是否大于或等于预设容量使用率。

s205、若是,则根据每个第二哈希桶中每个待存储数据的初始存储时刻,从每个第二哈希桶中删除目标数量的待存储数据,所述目标数量为所述第二哈希桶中超出所述预设容量使用率的待存储数据条数,所述第二哈希桶为各哈希桶中容量使用率大于或等于预设容量使用率的哈希桶。

具体的,利用写操作检查每个哈希桶内记录的待存储数据,判断每个哈希桶的容量使用率是否大于或等于预设容量使用率,若是,则针对该哈希桶启动删除策略。为了便于阐述,本实施例将哈希桶中容量使用率大于或等于预设容量使用率的哈希桶称为第二哈希桶。接着,根据每个第二哈希桶中每个待存储数据的初始存储时刻,将每个第二哈希桶内的各待存储数据按照初始存储时刻做最小堆(minheap)处理,这样可以找到最接近过期的目标数量的待存储数据,并从每个第二哈希桶中删除目标数量的待存储数据。其中,目标数目等于第二哈希桶中超出预设容量使用率的待存储数据条数。

需要说明的是,上述两种实效策略可以根据实际需要选择其一作为待存储数据的失效策略,可选的,也可以同时选择上述两种作为待存储数据的失效策略,本实施例对此不做限制。

本发明实施例的内存存储方法,通过时间优先的失效策略和容量优先的失效策略两种方法来确定每个哈希桶中待存储数据是否实效,并从哈希桶中删除失效的待存储数据,避免失效的数据占用内存,进而提高了内存的有效使用率。

图5为本发明实施例一提供的内存查询储方法的流程图。本实施例的执行主体是具有内存查询功能的装置,以下简称内存查询装置。本实施例涉及的是内存查询装置从内存中查询数据的具体的过程。如图5所示,本实施例可以包括:

s301、根据待查询数据的关键字和哈希桶函数,获得所述待查询数据对应的哈希桶值。

其中,所述哈希桶函数为所述关键字与所述哈希桶值之间的函数关系式。

需要说明的是,本实施例中的待查询数据为上述实施例中存储在存储表中的待存储数据。

s302、根据所述哈希桶值和哈希函数,确定所述哈希桶值对应的哈希桶在存储表中的位置。

其中,所述存储表包括至少一个哈希桶和存储在所述哈希桶中的待查询数据。

s303、根据所述哈希桶的位置,从所述哈希桶中读取所述待查询数据。

举例说明,参照上述实施例所述,假设存储表中位置为2的哈希桶中存储有待查询数据“张三15612234570”,位置为4的哈希桶中存储有待查询数据“李四17812234002”,位置为5的哈希桶中存储有待查询数据“赵六13969004576”。当需要查询张三的电话号码时,则根据关键字“张三”和哈希桶函数确定待测查询数据对应的哈希桶值,假设确定关键字“张三”对应的哈希桶值为10。接着,根据哈希桶值和哈希函数,确定哈希桶值对应的哈希桶在存储表中的位置,假设哈希桶值10对应的哈希桶在存储表中的位置为2。此时,从存储表中位置为2的哈希桶中读取待查询数据“15612234570”,进而实现查询。

在本实施例的一种可能的实现方式中,哈希桶可以包括所述待查询数据的关键字与所述待查询数据的映射关系,上述s303,具体可以包括:

根据所述哈希桶的位置,以及所述关键字与所述待查询数据的映射关系,从所述哈希桶中读取所述关键字对应的所述待查询数据。

举例说明,参照例子所述,假设存储表位置为2的哈希桶中存储有待查询数据“张三15612234570”和“王五18100042301”。当需要查询张三的电话号码时,根据上述方法获得“张三”对应的哈希桶值,假设为10,并获得哈希桶值10对应的哈希桶在存储表中的位置,假设为2。此时,存储表位置为2的哈希桶中存储有两条记录,因此,遍历该哈希桶的两条记录,获得关键字“张三”对应的电话号码为“15612234570”,进而实现查询。

本实施例的方法,由于待存储数据对应的哈希桶值较少,进而使得存储表中哈希桶值、以及哈希桶减少,这样在查询的过程中扫描的数据量少,进而提高了查询效率。

本发明实施例提供的内存查询方法,通过根据待查询数据的关键字和哈希桶函数,获得所述待查询数据对应的哈希桶值,并根据所述哈希桶值和哈希函数,确定所述哈希桶值对应的哈希桶在存储表中的位置,根据所述哈希桶的位置,从所述哈希桶中读取所述待查询数据,进而实现对待测数据的快速查询。

图6为本发明实施例一提供的内存存储装置的结构图。本实施例的内存存储装置100可以是软件、硬件或者软硬结合。如图6所示,本实施例的内存存储装置100,可以包括:

获取模块110,用于根据每个待存储数据的关键字和哈希桶函数,获得每个待存储数据对应的哈希桶值,所述哈希桶函数为所述关键字与所述哈希桶值之间的函数关系式。

确定模块120,用于根据每个哈希桶值和哈希函数,确定每个哈希桶值对应的哈希桶在存储表中的位置。

存储模块130,用于根据所述哈希桶在存储表中的位置,将所述待存储数据存储在所述哈希桶中,所述存储表包括至少一个哈希桶和存储在所述哈希桶中的待存储数据。

本发明实施例所示的内存存储装置,可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。

在本实施例的一种可能的实现方式中,所述哈希桶还包括所述待存储数据的关键字与所述待存储数据的映射关系。

可选的,所述存储表包括的哈希桶的数目为2m个,所述m为大于0的正整数。

在本实施例的另一种可能的实现方式中,所述获取模块110,具体用于根据公式hash′(ki)=md5(ki)&((2128)<<(127-m)),获得每个待存储数据对应的哈希桶值hash′(ki);

其中,所述ki为待存储数据i的关键字,所述md5为单向散列算法,所述m为所述md5的前m位。

可选的,所述哈希桶中不同的待存储数据呈线性排列。

可选的,每个哈希桶中存储的待存储数据的数目符合多项式分布。

图7为本发明实施例二提供的内存存储装置的结构图。在上述实施例的基础上,本实施例的内存存储装置100还包括可以删除模块140:

所述获取模块110,还用于获取每个哈希桶中失效的待存储数据。

所述删除模块140,用于从所述哈希桶中删除所述失效的待存储数据。

本发明实施例所示的内存存储装置,可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。

图8为本发明实施例三提供的内存存储装置的结构图。在上述实施例的基础上,本实施例的内存存储装置100还包括可以第一判断模块150;

所述第一判断模块150,用于判断每个哈希桶中存储的待存储数据的条数是否大于或等于预设条数;

所述第一判断模块150,还用于判断每个第一哈希桶中每个待存储数据的初始存储时刻是否大于或等于预设时刻,所述第一哈希桶为各哈希桶中待存储数据的条数大于或等于预设条数的哈希桶;

所述删除模块140,具体用于在所述第一判断模块150确定所述第一哈希桶中所述待存储数据的初始存储时刻大于或等于预设时刻时,从所述第一哈希桶中删除所述待存储数据。

本发明实施例所示的内存存储装置,可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。

图9为本发明实施例四提供的内存存储装置的结构图。在上述实施例的基础上,本实施例的内存存储装置100还包括第二判断模块160;

所述第二判断模块160,用于判断每个哈希桶的容量使用率是否大于或等于预设容量使用率;

所述删除模块140,还具体用于根据每个第二哈希桶中每个待存储数据的初始存储时刻,从每个第二哈希桶中删除目标数量的待存储数据,所述目标数量为所述第二哈希桶中超出所述预设容量使用率的待存储数据条数,所述第二哈希桶为各哈希桶中容量使用率大于或等于预设容量使用率的哈希桶。

本发明实施例所示的内存存储装置,可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。

图10为本发明实施例提供的内存查询装置的结构图。本实施例的内存查询装置200可以是软件、硬件或者软硬结合。如图10所示,本实施例的内存查询装置200,可以包括:

获取模块210,用于根据待查询数据的关键字和哈希桶函数,获得所述待查询数据对应的哈希桶值,所述哈希桶函数为所述关键字与所述哈希桶值之间的函数关系式;

确定模块220,用于根据所述哈希桶值和哈希函数,确定所述哈希桶值对应的哈希桶在存储表中的位置;其中,所述存储表包括至少一个哈希桶和存储在所述哈希桶中的待查询数据;

读取模块230,用于根据所述哈希桶的位置,从所述哈希桶中读取所述待查询数据。

本发明实施例所示的内存存储装置,可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

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