一种提高搜索信息速度的方法及系统技术方案

技术编号:2919733 阅读:354 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种提高搜索信息速度的方法,该方法将用于搜索信息的关键词生成哈希值;利用所述哈希值查询哈希表判断是否已缓存有对应的搜索结果;若缓存有,从所述哈希表中获得所述对应、并用于标识数组内存池中的存储单元的数组元素下标值;从数组元素在所述数组内存池中所标识的存储单元内读取搜索结果信息返回给请求方;若未缓存,由搜索引擎利用所述关键词进行搜索并获得搜索结果,在型哈希表中建立所述哈希值与下标值间的映射关系,将所述搜索结果信息存储到该下标值确定的数组元素在所述数组内存池中标识的存储单元内并将搜索结果信息返回给请求方。本发明专利技术还同时公开了一种提高搜索信息速度的方法及系统。

【技术实现步骤摘要】

本专利技术涉及计算机及通信
,尤其涉及一种提高搜索信息速度的方法及系统
技术介绍
目前对象缓存架构大都使用Java实现,开源的项目主要有Jive、OSCache、Java Caching System、EHCache、ShiftOne、SwarmCache、TreeCache/JBossCache、WhirlyCache。Jive是一个开放的Java源代码项目。Jive缓存信息为把所要缓存的对象加到哈希映射表HashMap中,用两个双向链表分别维持着缓存对象和每个缓存对象的生命周期。如果一个缓存对象被访问到,那么就把它放到链表的最前面,然后不定时地把要缓存的对象加入链表中,把过期对象删除,如此反复。由于Java是使用虚拟机动态分配和回收内存,执行效率不高,而且大都为网站系统而设计,不太适用于对性能要求很高的搜索系统。
技术实现思路
本专利技术提供一种提高搜索信息速度的方法及系统,以解决现有技术在搜索信息时存在效率低的问题。本专利技术提供以下技术方案一种存储信息的方法,包括如下步骤将与信息相关的关键词生成哈希值;从预先设定的数组中分配一个空闲的下标值,该数组中的各元素用于标识数组内存池中的一个存储单元;在哈希表中建立所述哈希值与下标值间的映射关系,并将与所述关键词相关的信息存储到所述下标值确定的数组元素在所述数组内存池中标识的存储单元内,使通过所述哈希值能够索引到存储单元中的信息。其中根据所有已存储信息的存储单元对应的数组元素的下标值形成最近最少使用链表,链表头对应最近最常使用的存储单元的下标值,链表尾对应最近最少使用的存储单元的下标值。分配空闲存储单元存储信息时,或使用所述最近最少使用链表中的节点所对应的存储单元内的信息时,将该存储单元对应的节点添加或移动到链表头。当需要释放存储单元时,从所述最近最少使用链表的尾部取出节点值并重置对应的存储单元,以及从所述密集哈希表中删除对应的哈希值和下标值的对应关系。根据所有空闲的存储单元对应的数组元素的下标值形成空闲链表;当分配存储单元时从该空闲链表中取出头节点,当最近最少使用链表中释放存储单元的下标值时,在该空闲链表的尾部添加该下标值。所述哈希表为密集型哈希表。一种提高搜索信息速度的方法,包括如下步骤A、根据搜索请求,将用于搜索信息的关键词生成哈希值;B、利用所述哈希值查询用于索引缓存的搜索结果信息的哈希表,判断是否缓存有该关键词的搜索结果信息;若是,则进行步骤C、D,否则,进行步骤E、F;C、从所述哈希表中获得所述哈希值所对应的数值,并将该数值作为用于标识数组内存池中的存储单元的数组的下标值;D、从所述下标值确定的数组元素在所述数组内存池中所标识的存储单元内读取搜索结果信息,将该信息返回给请求方;E、由搜索引擎利用所述关键词进行搜索,获得的搜索结果信息;F、分配一个空闲的数组下标值,在型哈希表中建立所述哈希值与下标值间的映射关系,将所述搜索结果信息存储到该下标值确定的数组元素在所述数组内存池中标识的存储单元内,并将搜索结果信息返回给请求方。其中根据所有已存储搜索结果信息的存储单元形成最近最少使用链表,链表中的每个节点关联一个已缓存搜索结果信息的存储单元,其中,链表头对应最近最常使用的存储单元的下标值,链表尾对应最近最少使用的存储单元的下标值。分配存储单元存储搜索结果信息时,或所述最近最少使用链表中的节点所对应的存储单元内的搜索结果信息被使用时,将该存储单元对应的节点添加或移动到链表头。当需要释放存储单元时,从所述最近最少使用链表的尾部取出节点并重置对应的存储单元,以及从所述哈希表中删除对应的哈希值和下标值的对应关系。根据所有空闲的存储单元形成空闲链表,该链表中的每个节点对应数组内存池中的一个存储单元;当分配存储单元存储搜索结果信息时从该空闲链表中取出头节点,当最近最少使用链表中释放存储单元的下标值时,在该空闲链表的尾部添加该下标值。从存储单元读取搜索结果信息时,还对该搜索结果信息进行有效性检查,并根据检查结果按下述情况分别处理若确定所述搜索结果信息的已保存时间在配置的信息有效时间内,则将搜索结果信息返回给请求方;若确定所述搜索结果信息的已保存时间大于配置的信息有效时间并且小于最大生命周期时间,则在读取该搜索结果信息后释放该存储单元,并利用所述关键词重搜索信息并缓存;若确定所述搜索结果信息的已保存时间不小于配置的最大生命周期时间,则释放存储单元,利用所述关键词重搜索信息,并将搜索结果提供给请求方并缓存。所述哈希表为密集型哈希表。一种缓存系统,包括数组内存池,包含多个存储单元,用于缓存信息;哈希值生成模块,用于将与信息相关的关键词生成哈希值;哈希表,用于保存哈希值与数组中元素的下标识值之间的映射关系;管理模块,用于管理所述数组内存池中的已存储信息的存储单元和空闲的存储单元;保存信息模块,将信息存储到所述存储单元,并在所述哈希表中建立关键词的哈希值与该存储单元对应的数组元素下标值之间的映射关系。一种搜索系统,包括数组内存池,包含多个存储单元,用于缓存信息;哈希值生成模块,用于将搜索关键词生成哈希值;哈希表,用于保存哈希值与数组中元素的下标识值之间的映射关系,以及根据所述哈希值进行查询并提供查询结果;管理模块,用于管理所述数组内存池中的存储单元,将哈希值提供给所述哈希表和根据哈希表的查询结果判断是否缓存有所述关键词的搜索结果信息,以及将搜索结果信息返回给请求方;搜索引擎,用于在所述管理模块确定未缓存有搜索结果信息时,利用所述关键词搜索信息,并返回给管理模块;信息存取模块,用于在所述查询模块确定缓存有搜索结果信息时,从所述下标值确定的数组元素在数组内存池中所标识的存储单元内读取搜索结果信息;或者,将搜索引擎搜索的结果信息存储到所述存储单元,以及在所述哈希表中建立关键词的哈希值与该存储单元对应的数组元素下标值的映射关系。本专利技术具有以下有益效果1、本专利技术在哈希表中使用需要查询的关键词的散列值作为关键(key)值,存储单元所在的内存池数组下标值作为哈希表key值的对应值(value),能够实现从查询关键字到数组内存池索引值的快速定位和降低系统的负载,同时还能提高对查询和存储请求的并发处理能力。2、由于密集型哈希表是一个使用C数组作为内部存储结构的哈希表,这样的存储结构与标准哈希表相比可以带来近50%的速度提升,因此,本专利技术采用密集型哈希表索引缓存信息,能够大幅度提高系统搜索的响应速度。3、本专利技术中数组和对应存储单元采用静态配置,因此,还可降低动态分配所带来的损耗。附图说明图1为本专利技术中存储信息的关系示意图;图2为本专利技术中存储信息的流程图;图3为本专利技术搜索信息的流程;图4为本专利技术中缓存系统的结构示意图;图5为本专利技术中搜索系统的结构示意图。具体实施例方式为了提高搜索信息的效率,本专利技术利用数组内存池缓存搜索结果信息,利用哈希表作索引。当需要搜索时先通过哈希表查询是否缓存有相应的搜索结果信息,若有则直接读取,若无则进行搜索,并将搜索后的搜索结果信息返回给请求方和缓存该搜索结果信息。本专利技术中的存储关系如图1所示。数组内存池是由缓存对象构成的数组,数组内存池包括多个用于存储信息的存储单元(或称元素),数组中的每个数组元素标识一个存储单元。每个存储单元还包含有用于辅助管理的信息,本文档来自技高网...

【技术保护点】
一种存储信息的方法,其特征在于,包括如下步骤:将与信息相关的关键词生成哈希值;从预先设定的数组中分配一个空闲的下标值,该数组中的各元素用于标识数组内存池中的一个存储单元;在哈希表中建立所述哈希值与下标值间的映射关系, 并将与所述关键词相关的信息存储到所述下标值确定的数组元素在所述数组内存池中标识的存储单元内,使通过所述哈希值能够索引到存储单元中的信息。

【技术特征摘要】

【专利技术属性】
技术研发人员:林海荣
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1