应用于海量value键值对的高性能KV缓存方法及装置制造方法及图纸

技术编号:38613620 阅读:9 留言:0更新日期:2023-08-26 23:41
本发明专利技术公开了应用于海量value键值对的高性能KV缓存方法,包括:在写入KV数据时,根据key值确定KV数据存储的存储桶bucket;每个所述的存储桶bucket包括:内存表层,包括跳跃表,包括至少一个只读跳跃表和一个读写跳跃表,当读写跳跃表中写入的KV数据达到预设值时,则转换为只读跳跃表,并新生成一个读写跳跃表;数据组层,使用定长空间的数组存储所述只读跳跃表中的KV数据,包括索引区和数据区,所述数据区连续存储各个item数据,每个item数据包括写入key值大小的keySize、key值和value值,所述的索引区存储对应数据区的item起始地址offset,所述的key值大小keySize和起始地址offset均为定长存储。本发明专利技术提出内存表层+数据组层的双层架构,保证了读写的高性能,极大降低了内存消耗。降低了内存消耗。降低了内存消耗。

【技术实现步骤摘要】
应用于海量value键值对的高性能KV缓存方法及装置


[0001]本专利技术涉及数据存储
,具体的涉及应用于海量value键值对的高性能KV缓存方法及装置。

技术介绍

[0002]KV缓存为了读写的高性能,将数据存储在内存,由于内存资源有限,就需要思考如何用有限的内存存储更多的数据。
[0003]而当前业界KV缓存,使用高级数据结构存储数据,其内部结构的内存消耗占比较高,比如跳跃表(skiplist),在高度为20层的情况下,单node消耗的内存达到184B。比如redis存储10GB的数据,就需要消耗18GB的内存空间。
[0004]那么用原生语言go的map存储如何?map中数据都由buckets存储,每个bucket自身内存结构就需要消耗280B。在存储的value到GB级别时,消耗的内存能达到数据量的10倍以上。
[0005]因此,现有实现KV缓存的数据结构存在数据结构本身消耗较多内存的技术问题,有鉴于此,特提出本专利技术专利。

技术实现思路

[0006]为了解决上述内存消耗问题,本专利技术提出一种应用于海量value键值对的高性能KV缓存方法及装置,本专利技术的技术方案在存储海量小value键值对的场景下,消耗的内存更低,同时能保持高性能。具体地,采用了如下技术方案:
[0007]应用于海量value键值对的高性能KV缓存方法,包括:
[0008]在写入KV数据时,根据key值确定KV数据存储的存储桶bucket;
[0009]每个所述的存储桶bucket包括:
[0010]内存表层,包括跳跃表,所述的跳跃表包括至少一个只读跳跃表和一个读写跳跃表,当读写跳跃表中写入的KV数据达到预设值时,则转换为只读跳跃表,并新生成一个读写跳跃表;
[0011]数据组层,使用定长空间的数组存储所述只读跳跃表中的KV数据,包括索引区和数据区,所述数据区连续存储各个item数据,每个item数据包括写入key值大小的keySize、key值和value值,所述的索引区存储对应数据区的item起始地址offset,所述的key值大小keySize和起始地址offset均为定长存储。
[0012]作为本专利技术的可选实施方式,本专利技术的应用于海量value键值对的高性能KV缓存方法,包括KV数据写入流程,所述的KV数据写入流程包括:
[0013]数据组层中数据区从尾到头写入数据;
[0014]依次将只读跳跃表中KV数据的key值和value值写入数据区,根据写入的key值确定key值大小keySize并写入,将所述key值大小keySize、key值和value值按照相同key值作为一个item数据。
[0015]作为本专利技术的可选实施方式,本专利技术的应用于海量value键值对的高性能KV缓存方法,所述的KV数据写入流程包括:
[0016]获取每个写入的item数据中key值大小keySize的存储地址;
[0017]将所述存储地址作为item数据存储的起始地址offset按照从头到尾写入索引区;
[0018]可选地,所述的key值大小keySize采用定长的uintB1存储,所述的起始地址offset采用定长的uintB2存储,所述的uintB2>uintB1。
[0019]作为本专利技术的可选实施方式,本专利技术的应用于海量value键值对的高性能KV缓存方法,包括KV数据读取流程,所述KV数据读取流程包括读取数据组层中的数组数据:
[0020]采用二分法查找索引区,得到索引区中间起始地址offset[i]为当前索引;
[0021]通过当前索引的起始地址offset[i]与下一索引的起始地址offset[i+1]之间的差值,计算得到当前索引对应item数据的总大小itemSize=offset[i+1]‑
offset[i];
[0022]通过当前索引的起始地址offset[i]、item数据的总大小itemSize和key值大小keySize的存储长度uintB1得到key值+value值区域的起始地址kvOffset;
[0023]通过当前索引的起始地址offset[i]读取数据区item数据的key值大小keySize,根据key值+value值区域的起始地址kvOffset和key值大小keySize读取得到key值和value值。
[0024]作为本专利技术的可选实施方式,本专利技术的应用于海量value键值对的高性能KV缓存方法,包括KV数据查询流程,所述的KV数据查询流程包括:
[0025]接收输入的查询key值;
[0026]在所述内存表层中读取读写跳跃表的数据,判断是否存在与查询key值相同的KV数据;
[0027]若在所述读写跳跃表中未读取到与查询key值相同的KV数据,则在所述内存表层中读取只读跳跃表的数据,判断是否存在与查询key值相同的KV数据;
[0028]若在所述只读跳跃表中未读取到与查询key值相同的KV数据,则在所述数据组层中读取数组数据;
[0029]读取得到当前key值,比较当前key值与查询key值之间的关系,若当前key值=查询key值,则返回当前key值对应的value值为查询结果,若当前key值≠查询key值,则根据当前key值与查询key值确定数据组层中索引区的查询区间,继续执行数组读取流程,直至查询到查询key值或者查询完数据组层中的全部数据。
[0030]作为本专利技术的可选实施方式,本专利技术的应用于海量value键值对的高性能KV缓存方法中,所述的KV数据写入流程包括:
[0031]判断内存是否达到额定限制;
[0032]若判断结果为否,则写入KV数据,若判断结果为是,则读取所要写入KV数据的key值判断当前内存是否存在,存在则继续写入,不存在,则拒绝写入当前内存。
[0033]作为本专利技术的可选实施方式,本专利技术的应用于海量value键值对的高性能KV缓存方法,包括KV数据合并流程,所述的KV数据合并流程包括:
[0034]通过常驻协程每间隔预设时间间隔T针对各个存储桶bucket顺序进行内存清除;
[0035]将只读跳跃表和数据组层进行数据合并,生成新的数据组层,然后删除只读跳跃表和旧的数据组层。
[0036]作为本专利技术的可选实施方式,本专利技术的应用于海量value键值对的高性能KV缓存方法中,所述在写入KV数据时,根据key值确定KV数据存储的存储桶bucket包括:
[0037]预设N个存储桶bucket;
[0038]在写入KV数据时,针对key值进行哈希计算得到哈希key值;
[0039]将哈希key值对N取模,确定KV数据所写入的存储桶bucket。
[0040]本专利技术同时提供应用于海量value键值对的高性能KV缓存装置,包括:
[0041]存储桶bucket模块,在写入KV数据时,根据key值确定KV数据存储的存本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.应用于海量value键值对的高性能KV缓存方法,其特征在于,包括:在写入KV数据时,根据key值确定KV数据存储的存储桶bucket;每个所述的存储桶bucket包括:内存表层,包括跳跃表,所述的跳跃表包括至少一个只读跳跃表和一个读写跳跃表,当读写跳跃表中写入的KV数据达到预设值时,则转换为只读跳跃表,并新生成一个读写跳跃表;数据组层,使用定长空间的数组存储所述只读跳跃表中的KV数据,包括索引区和数据区,所述数据区连续存储各个item数据,每个item数据包括写入key值大小的keySize、key值和value值,所述的索引区存储对应数据区的item起始地址offset,所述的key值大小keySize和起始地址offset均为定长存储。2.根据权利要求1所述的应用于海量value键值对的高性能KV缓存方法,其特征在于,包括KV数据写入流程,所述的KV数据写入流程包括:数据组层中数据区从尾到头写入数据;依次将只读跳跃表中KV数据的key值和value值写入数据区,根据写入的key值确定key值大小keySize并写入,将所述key值大小keySize、key值和value值按照相同key值作为一个item数据。3.根据权利要求2所述的应用于海量value键值对的高性能KV缓存方法,其特征在于,所述的KV数据写入流程包括:获取每个写入的item数据中key值大小keySize的存储地址;将所述存储地址作为item数据存储的起始地址offset按照从头到尾写入索引区;可选地,所述的key值大小keySize采用定长的uintB1存储,所述的起始地址offset采用定长的uintB2存储,所述的uintB2>uintB1。4.根据权利要求3所述的应用于海量value键值对的高性能KV缓存方法,其特征在于,包括KV数据读取流程,所述KV数据读取流程包括读取数据组层中的数组数据:采用二分法查找索引区,得到索引区中间起始地址offset[i]为当前索引;通过当前索引的起始地址offset[i]与下一索引的起始地址offset[i+1]之间的差值,计算得到当前索引对应item数据的总大小itemSize=offset[i+1]

offset[i];通过当前索引的起始地址offset[i]、item数据的总大小itemSize和key值大小keySize的存储长度uintB1得到key值+value值区域的起始地址kvOffset;通过当前索引的起始地址offset[i]读取数据区item数据的key值大小keySize,根据key值+value值区域的起始地址kvOffset和key值大小keySize读取得到key值和value值。5.根据权利要求4所述的应用于海量value键值对的高性能KV缓存方法,其特征在于,包括KV数据查询流程,所述的KV数据查询流程包括:接收输入的查询k...

【专利技术属性】
技术研发人员:洪定乾徐锐波幸福卢文伟刘方
申请(专利权)人:北京云思智学科技有限公司
类型:发明
国别省市:

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

1