[发明专利]一种基于哈希算法的数据存储方法及装置有效
申请号: | 201010281747.0 | 申请日: | 2010-09-13 |
公开(公告)号: | CN102402394A | 公开(公告)日: | 2012-04-04 |
发明(设计)人: | 袁清;章建桂 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F3/06 | 分类号: | G06F3/06 |
代理公司: | 北京德琦知识产权代理有限公司 11018 | 代理人: | 王一斌;王琦 |
地址: | 518044 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 算法 数据 存储 方法 装置 | ||
技术领域
本发明涉及计算机数据存储技术,特别涉及一种基于哈希算法的数据存储方法及装置。
背景技术
即时通讯(IM,Instant Messaging)工具由于具有准入技术低,可以即时通过较少的语句来表达自己情感,与关注自己的用户分享,因而,信息传递的效率较高,其应用也越来越广泛。
现有的即时通讯用户收听人列表在理论上没有任何限制,用户通过各类客户端就可以实时接收到自己关注的收听人发表或者转播的消息,因此,对应接收到的消息数据数量将十分庞大,如何对接收的消息等数据进行有效地存储以及对存储的数据进行快速地查询,是即时通讯技术发展亟需解决的技术问题。
现有技术中,即时通讯客户端常采用哈希(Hash)算法,利用Hash表来实现对数据的快速存储,Hash算法一般包括:循环冗余校验码(CRC,Cyclic Redundancy Check)算法32、信息-摘要算法(Message-Digest Algorithm)5以及安全哈希算法(SHA,Secure Hash Algorithm),采用Hash算法对数据串进行数字化后生成一个主键(Key)值,再用Key值对一个较大的质数M取余,这样,可以使数据均匀地分布在大小为M的Hash表上。
图1为现有技术基于哈希算法的数据存储结构示意图。参见图1,利用Hash算法,例如,Md5对数据进行数字化后取前8字节生成一个Key值,将该Key值对预先设定的一个较大的质数M取余,然后将该数据及其对应的Key值存储至取余映射的Hash表中,M可根据实际需要以及对数据进行Hash后得到的Key值确定。
当对数据进行Hash后得到的Key值相同时,即主键值发生冲突,则在Hash表中采用链表的方式将Key值相同的所有的数据组织起来,如图1中data100~data102,其Key值对M取余后为10,data110~data113,其Key值对M取余后为11,则分别以链表的方式依次存储。
当用户需要查询数据时,首先对需要查询的数据利用Hash算法进行处理,得到Key值,接着对存储的Hash表采用的质数M进行取余定位该数据在Hash表中的位置,然后在定位的位置查询获取Key值对应的数据并向用户返回相应信息。
由上述可见,由于将所有数据存储在一张Hash表中,所需存储空间大,对存储设备要求高;同时,对于存储时发生冲突的主键值对应的数据,Hash表采用链表的方式进行存储,每个数据具有相同的主键值,造成后续查询和读取的困难,而对于未发生冲突的主键值对应的数据,还需要为Hash表预留与发生冲突的主键值时对应的存储空间,以及,需要在采用质数M的Hash表中进行遍历,以确定没有相同的数据时才能进行存储,使得存储效率较低;进一步地,对于Hash表中存储的未发生冲突的数据,其查询的复杂度(效率)与Hash表采用的质数M相关,而对于Hash表中存储的发生冲突的数据,查询数据的复杂度是O(n),其中n是冲突链表上存储的数据个数,例如,以查询图1中数据data111为例,首先获取data111的Key值,接着,计算Key%M,获取其取余位置,即索引位置,也就是图1中的11位置处,然后在索引位置的链表上进行遍历,直到查询的数据与Hash表中存储的data111匹配为止。这样,数据访问速度慢、访问复杂度高、查询效率低。
发明内容
有鉴于此,本发明的主要目的在于提出一种基于哈希算法的数据存储方法,降低存储设备要求、提高存储效率。
本发明的另一目的在于提出一种基于哈希算法的数据存储装置,降低存储设备要求、提高存储效率。
为达到上述目的,本发明提供了一种基于哈希算法的数据存储方法,该方法包括:
预先设置L个后端存储模块以及后端存储模块标识与模L运算的映射关系,L为大于1的自然数;
根据Hash算法计算待存储数据的主键值;
对获取的主键值以后端存储模块数量为模执行模运算,根据后端存储模块标识与模L运算的映射关系,将执行模L运算的主键值及对应的数据输出至相应标识的后端存储模块;
确定后端存储模块预先设置的Hash表中没有存储待存储数据,存储待存储数据及对应的主键值。
所述确定后端存储模块预先设置的Hash表中没有存储待存储数据,存储待存储数据及对应的主键值具体包括:
依序判断后端存储模块预先设置的Hash表中是否存储有待存储数据对应的主键值,如果没有,在该Hash表中存储该主键值以及该主键值对应的数据;否则,将Hash表中存储的数据与该主键值对应的数据进行匹配;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010281747.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:降价标签
- 下一篇:一种用于展览场所的动感升降沙盘
- 数据显示系统、数据中继设备、数据中继方法、数据系统、接收设备和数据读取方法
- 数据记录方法、数据记录装置、数据记录媒体、数据重播方法和数据重播装置
- 数据发送方法、数据发送系统、数据发送装置以及数据结构
- 数据显示系统、数据中继设备、数据中继方法及数据系统
- 数据嵌入装置、数据嵌入方法、数据提取装置及数据提取方法
- 数据管理装置、数据编辑装置、数据阅览装置、数据管理方法、数据编辑方法以及数据阅览方法
- 数据发送和数据接收设备、数据发送和数据接收方法
- 数据发送装置、数据接收装置、数据收发系统、数据发送方法、数据接收方法和数据收发方法
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置
- 数据发送方法、数据再现方法、数据发送装置及数据再现装置