[发明专利]一种用于大型数据库哈希表的优化方法及存储介质有效
申请号: | 202210812875.6 | 申请日: | 2022-07-12 |
公开(公告)号: | CN114896257B | 公开(公告)日: | 2022-09-23 |
发明(设计)人: | 江大白;孙礼锐;胡增;沈丁山 | 申请(专利权)人: | 中用科技有限公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/245;G06F16/2458 |
代理公司: | 合肥天明专利事务所(普通合伙) 34115 | 代理人: | 谢中用 |
地址: | 230601 安徽省合肥市经济技术*** | 国省代码: | 安徽;34 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 用于 大型 数据库 哈希表 优化 方法 存储 介质 | ||
本发明涉及数据库技术领域,公开了一种用于大型数据库哈希表的优化方法、存储介质,将当前哈希表中链表修改为哈希环,通过及时检测热点存储对象,移动链表指针,适应热点改变。
技术领域
本发明涉及数据库技术领域,具体涉及一种用于大型数据库哈希表的优化方法、存储介质。
背景技术
内存键值数据库,如Redis、Memcached、RamCloud以及他们的各种变种,是存储基础架构(例如数据库,文件系统)中的重要组件。他们将经常访问的数据储存在内存中以加快访问速度,提供低延迟和高性能的数据访问,并作为现代互联网服务的基础设施为众多服务商、在众多领域提供服务。
哈希索引是内存键值数据库中最流行的内存结构,尤其是在上层应用程序不需要范围查询时,能够对于单个数据的查询提供很高性能的查询。一般的哈希索引设计中不存在对于热点数据的处理,针对哈希冲突的情况一般使用拉链法解决,冲突的链表越长,需要访问的内存次数就越多。
一般通过数组实现哈希表的数据存储,对于一个键值对(Key-Value),哈希表(Hashtable)通过哈希函数将键Key转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将值Value存储在以该数字为下标的数组空间里。或者把任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值,这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出。
目前数据库内部热点问题存在愈发严重的趋势,现有数据库缺乏热点感知能力,同时哈希索引无法解决热点数据访问瓶颈问题,这使得在处理热点相关问题时数据库整体性能变得很差,在高度倾斜的工作负载下显得不可靠。
因此需要一种自动热点感知的哈希表,对热点数据进行高效访问。
发明内容
为解决上述技术问题,本发明提供一种用于大型数据库哈希表的优化方法。
为解决上述技术问题,本发明采用如下技术方案:
一种用于大型数据库哈希表的优化方法,包括以下步骤:
步骤一:数组a的每一项元素a[i]中存储有一个链表指针Headi,将链表指针Headi至多指向一个环形链表Ci;环形链表中每个存储对象itemk均指向下一个存储对象itemk+1且首尾相连,同一个环形链表中每个存储对象的键的哈希值相同,其中1≤i≤I,I为数组a中元素数量;
步骤二:对每一个环形链表中的存储对象按照键的大小进行排序,使得环形链表中下一个存储对象的键keyk+1不大于当前存储对象的键keyk,或者使得环形链表中下一个存储对象的键keyk+1不小于当前存储对象的键keyk;
步骤三:记录环形链表Ci所有存储对象的总操作次数,记录环形链表Ci中每个存储对象的操作次数;
步骤四:周期性检测环形链表Ci中请求访问的存储对象是否为链表指针Headi指向的存储对象;如否,通过步骤五计算环形链表Ci中每个存储对象的访问频率,将链表指针Headi指向环形链表Ci中访问频率最高的存储对象;
步骤五:环形链表Ci中第t个存储对象的访问频率
其中,N为 环形链表Ci中所有存储对象的总操作次数,K为环形链表Ci中的存储对象数量,为环形链表Ci中第k个存储对象的操作次数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中用科技有限公司,未经中用科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210812875.6/2.html,转载请声明来源钻瓜专利网。