[发明专利]一种实现数据加锁的方法及装置在审
申请号: | 201811360325.5 | 申请日: | 2018-11-15 |
公开(公告)号: | CN109446203A | 公开(公告)日: | 2019-03-08 |
发明(设计)人: | 程雨佳 | 申请(专利权)人: | 郑州云海信息技术有限公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/23 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 王宝筠 |
地址: | 450018 河南省郑州市*** | 国省代码: | 河南;41 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 哈希表 访问目标数据 目标数据块 数据加锁 数据锁 等待状态 分布存储 使用效率 数据块 线程 申请 | ||
本申请实施例公开了一种实现数据加锁的方法及装置,用于提高哈希表的使用效率,该方法包括:将哈希表划分为多个部分哈希表,每个部分哈希表设置有数据锁;将各个数据块分布存储在各个部分哈希表中;当线程访问目标数据块时,确定目标数据块所在的部分哈希表;判断目标数据块所在的部分哈希表的数据锁是否被占用,如果被占用,则进入等待状态,如果未被占用,则访问目标数据块。
技术领域
本申请涉及数据处理技术领域,具体涉及一种实现数据加锁的方法及装置。
背景技术
哈希表是存储系统在存储数据时所使用的主要数据结构之一,它会根据关键字(key)直接访问与关键字相关联的值(value),以加快查找速度。在存储系统中,数据块与数据块标识一一对应,关键字即为数据块标识,值为数据块,通过给定的哈希函数计算出数据块标识的哈希值,将对应的数据块映射到一段有限地址空间的某个位置。
当前的存储系统基本上均在多线程环境下运行。对于存储系统,在对哈希表结构进行查找、插入、删除等操作时,其在多线程环境下产生的数据一致性问题通常受到高度关注。数据一致性问题是指,当多个进程同时操作同一个数据块,会产生操作前后数据不一致的问题。例如,线程1在修改某个数据块之前,线程2抢占了CPU执行权,将数据读出,然后线程1恢复执行并修改了数据块,此时线程2读出的数据即为原来的数据,而不是修改后的数据,造成了数据不一致。
为了解决多线程环境下的数据一致性问题,现有技术是对哈希表的读写操作做同步处理,所有的操作共享同一个哈希表的对象锁。对于同一个哈希表,某一线程执行某一操作时会获取该哈希表的对象锁,其他线程在无锁状态下,均处于阻塞状态,等待持有锁的线程执行完操作并释放锁。这种方式可以保证数据的一致性,但由于同一时刻只能有一个线程对哈希表进行操作,其余线程如果想对哈希表中的其他数据块进行操作,在没有锁的情况下也只能处于等待状态,从效率上来讲过于低下。
发明内容
有鉴于此,本申请实施例提供一种实现数据加锁的方法及装置,以提高哈希表的使用效率。
为解决上述问题,本申请实施例提供的技术方案如下:
一种实现数据加锁的方法,将哈希表划分为多个部分哈希表,每个所述部分哈希表设置有数据锁;所述方法包括:
将各个数据块分布存储在各个部分哈希表中;
当线程访问目标数据块时,确定所述目标数据块所在的部分哈希表;
判断所述目标数据块所在的部分哈希表的数据锁是否被占用,如果被占用,则进入等待状态,如果未被占用,则访问所述目标数据块。
一种可能的实现方式中,所述将各个数据块分布存储在各个部分哈希表中,包括:
利用哈希函数计算待存储数据块的标识的第一哈希值;
将所述第一哈希值对所述部分哈希表的总数量取模,得到所述待存储数据块对应的第一部分哈希表序号;
将所述待存储数据块存储到所述第一部分哈希表序号对应的部分哈希表中。
一种可能的实现方式中,所述将各个数据块分布存储在各个部分哈希表中,包括:
利用哈希函数计算待存储数据块的标识的第一哈希值,利用所述哈希函数计算所述第一哈希值的第二哈希值;
将所述第二哈希值对所述部分哈希表的总数量取模,得到所述待存储数据块对应的第二部分哈希表序号;
将所述待存储数据块存储到所述第二部分哈希表序号对应的部分哈希表中。
一种可能的实现方式中,所述确定所述目标数据块所在的部分哈希表,包括:
利用所述哈希函数计算所述目标数据块的标识的第三哈希值;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于郑州云海信息技术有限公司,未经郑州云海信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811360325.5/2.html,转载请声明来源钻瓜专利网。