基于Linux的key-value形数据存储和使用方法技术

技术编号:36935123 阅读:15 留言:0更新日期:2023-03-22 18:57
基于Linux的key

【技术实现步骤摘要】
基于Linux的key

value形数据存储和使用方法


[0001]本专利技术涉及数据存储优化
,具体涉及基于Linux的key

value形数据存储和使用方法。

技术介绍

[0002]计算机软件使用的数据类型多种多样,例如c++编程语言中常见的整型数据int在32位计算机中代表了32个bit位组成的数据,每个bit位有0和1两种状态,最高bit位代表正负,因此整型数据int可存储的数据范围为

2147483648~2147483647[

2^31~2^31

1]。除此之外,计算机软件中还存在一种常用的key

value形数据。通俗的来讲,例如每个人的身份证号是唯一的,每个身份证号对应着唯一的人名,这种身份证号码和唯一的姓名之间的关系就是一种key

value形数据。我们可以通过唯一的key(身份证号码)来找到唯一的value(姓名)。
[0003]计算机软件经常需要加载到内存一些静态key

value形数据,这些数据一般存储在计算机硬盘中例如字典、配置文件等。计算机在内存中加载这些静态key

value形数据时有很多选择,例如c++标准库中的std::map、std::unordered_map,QT库中的QMap、QHash等。随着计算机软件需要存储的数据量的增大,软件占用的内存资源也越来越高。而计算机软件存储key/>‑
value形数据绝大部分是为了更加高效的通过key来查找value数据,因此如何保持高效的查找效率并且降低软件程序的内存资源占用成为了很多软件开发者难以兼顾的难题。
[0004]目前计算机软件常用的存储key

value形数据的容器主要分为两类。
[0005]一种是类似c++标准库STL中的std::map结构。这种结构通常的底层原理为自平衡的二叉查找树,又称红黑树,这种结构可以在插入和删除操作时通过特定操作保持二叉查找树的平衡,在获得较高的查找性能的同时保持数据存储的顺序性。 它可以在O(log n)时间内做查找,插入和删除,这里的n是指树中元素的数目。
[0006]另一种是类似c++标准库STL中的std::unordered_map结构。这种结构的底层原理为哈希表,又称散列表。哈希表构造完成后查找、插入等操作只需要接近常量的时间即O(1)的时间级。
[0007]这两种方法存在共同的缺点:数据均存储在内存中,数据量的增大将会导致程序占用内存资源过高,并且每次程序重新运行时需要重新构造对应的数据结构。随着数据量的增大,这两种方法的构造时间也会逐渐增加。
[0008]第二种方法哈希表虽然拥有最快的查找速度,但无法保持存储数据的顺序性,并且构造哈希表需要占用更多的内存空间。数据量较大时也可能出现key值冲突的情况,因此限制了这种方法的使用场景。
[0009]专利申请号CN109446198A公开一种基于双数组的trie树节点压缩方法及装置,其技术的核心内容基本集中在双数组树本身的构造优化和对应的检索使用方法上,通过预加载全部key值计算出双数组trie树中的叶子结点,然后将叶子结点后的数据单独存储到一
个连续数组中,从而降低双数组trie树的存储空间占用。此方法在key值的长度存在明显差异时可在一定程度上降低双数组trie树的空间占用,不过处理流程中引入了预处理获取叶子节点的操作会导致构造双数组trie树的耗时增加,另外此方法额外加入了存放叶子结点之后数据的连续数组进而导致查询流程中会额外引入跳转连续数组并对比数据内容的操作会导致双数组trie树的接口性能降低。

技术实现思路

[0010]为解决已有技术存在的不足,本专利技术提供了一种基于Linux的key

value形数据存储和使用方法,包括如下步骤:步骤S1:基于key

value形数据源文件构建双数组tire树,并基于双数组tire树构建.dat数据文件;步骤S2:获取key

value形数据源文件的md5值;步骤S3:使用mmap机制将.dat数据文件映射到内存上并返回映射后的内存地址addr;步骤S4:使用映射后的内存地址addr获取到.dat数据文件中的md5值,并与步骤S2中的md5值进行比对,相同的话执行步骤S5至步骤S7;不同的话,跳转到步骤S1,重新构建.dat数据文件,并重新执行步骤S2至步骤S4;步骤S5:使用映射后的内存地址addr得到存储的value数据的首地址elements_addr以及双数组tire树的数据首地址tire_addr;步骤S6:基于value数据的首地址elements_addr以及双数组tire树的数据首地址tire_addr完成由key数据到value数据的查找使用流程,完成key

value形数据的存储和使用;步骤S7:取消.dat数据文件的mmap挂载。
[0011]其中,所述步骤S5中,value数据的首地址elements_addr的获取方法如下:步骤S51:根据.dat数据文件的构造顺序从.dat数据文件中获取到key

value形数据总数elements_num、全部value数据字节数与value数据个数之和elements_size以及双数组tire树占用的字节数量tire_size;步骤S52:使用内存地址addr加上步骤S51中得到的三项字节数之和的偏移量,得到存储的value数据的首地址elements_addr;双数组tire树的数据首地址tire_addr的获取方法如下:将value数据的首地址elements_addr加上全部value数据字节数与value数据个数之和elements_size得到双数组tire树的数据首地址tire_addr。
[0012]其中,所述步骤S6中,基于value数据的首地址elements_addr以及双数组tire树的数据首地址tire_addr完成由key数据到value数据的查找使用流程的方法如下:步骤S61:针对特定的key数据,根据双数组tire树的数据首地址tire_addr,通过双数组tire树查找到该key数据对应的数据偏移值offset;步骤S62:使用value数据的首地址elements_addr加上步骤S61中所获取的数据偏移值offset,得到key数据对应的value数据存储在.dat文件中的首地址;步骤S63:将数据以字节的方式依次读取到计算机软件程序中直到获取到字节内
容为“/0”时中止读取,至此完成key数据到value数据的查找使用流程。
[0013]其中,所述步骤S1中,基于key

value形数据源文件构建双数组tire树,并基于双数组tire树构建.dat数据文件的方法如下:步骤S11:将本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.基于Linux的key

value形数据存储和使用方法,其特征在于,包括如下步骤:步骤S1:基于key

value形数据源文件构建双数组tire树,并基于双数组tire树构建.dat数据文件;步骤S2:获取key

value形数据源文件的md5值;步骤S3:使用mmap机制将.dat数据文件映射到内存上并返回映射后的内存地址addr;步骤S4:使用映射后的内存地址addr获取到.dat数据文件中的md5值,并与步骤S2中的md5值进行比对,相同的话执行步骤S5至步骤S7;不同的话,跳转到步骤S1,重新构建.dat数据文件,并重新执行步骤S2至步骤S4;步骤S5:使用映射后的内存地址addr得到存储的value数据的首地址elements_addr以及双数组tire树的数据首地址tire_addr;步骤S6:基于value数据的首地址elements_addr以及双数组tire树的数据首地址tire_addr完成由key数据到value数据的查找使用流程,完成key

value形数据的存储和使用;步骤S7:取消.dat数据文件的mmap挂载。2.如权利要求1所述的基于Linux的key

value形数据存储和使用方法,其特征在于,所述步骤S5中,value数据的首地址elements_addr的获取方法如下:步骤S51:根据.dat数据文件的构造顺序从.dat数据文件中获取到key

value形数据总数elements_num、全部value数据字节数与value数据个数之和elements_size以及双数组tire树占用的字节数量tire_size;步骤S52:使用内存地址addr加上步骤S51中得到的三项字节数之和的偏移量,得到存储的value数据的首地址elements_addr;双数组tire树的数据首地址tire_addr的获取方法如下:将value数据的首地址elements_addr加上全部value数据字节数与value数据个数之和elements_size得到双数组tire树的数据首地址tire_addr。3.如权利要求1所述的基于Linux的key

value形数据存储和使用方法,其特征在于,所述步骤S6中,基于value数据的首地址elements_addr以及双数组tire树的数据首地址tire_addr完成由key数据到value数据的查找使用流程的方法如下:步骤S61:针对特定的key数据,根据双数组tire树的数据首地址tire_addr,通过双数组tire树查找到该key数据对应的数据偏移值offset;步骤S62:使用value数据的首地址elements_addr加上步骤S61中所获取的数据偏移值offset,得到key数据对应的value数据存储在.dat文件中的首地址;步骤S63:将数据以字节的方式依次读取到计算机软件程序中直到获取到字节内容为“/0”时中止读取,至此完成key数据到value数据的查找使用流程。4.如权利要求1所述的基于Linux的key

value形数据存储和使用方法,其特征在于,所述步骤S1中,基于key

value形数据源文件构建双数组tire树,并基于双数组tire树构建...

【专利技术属性】
技术研发人员:纪笑旭翟康宁张超史晶郭俊余魏立峰张鹏飞张子豪何文飞白俊杰程启
申请(专利权)人:麒麟软件有限公司
类型:发明
国别省市:

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

1