[发明专利]基于Linux的key-value形数据存储和使用方法有效
| 申请号: | 202310121877.5 | 申请日: | 2023-02-16 |
| 公开(公告)号: | CN115827573B | 公开(公告)日: | 2023-06-02 |
| 发明(设计)人: | 纪笑旭;翟康宁;张超;史晶;郭俊余;魏立峰;张鹏飞;张子豪;何文飞;白俊杰;程启 | 申请(专利权)人: | 麒麟软件有限公司 |
| 主分类号: | G06F16/16 | 分类号: | G06F16/16;G06F16/172 |
| 代理公司: | 北京汇智英财专利代理有限公司 11301 | 代理人: | 杨国栋 |
| 地址: | 300450 天津市滨海新区*** | 国省代码: | 天津;12 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 基于 linux key value 形数 存储 使用方法 | ||
基于Linux的key‑value形数据存储和使用方法,包括如下步骤:基于key‑value形数据源文件构建.dat数据文件;获取key‑value形数据源文件的md5值;将.dat数据文件映射到内存上并返回内存地址;使用映射后的内存地址得到存储的value数据的首地址以及双数组trie树的数据首地址,基于两个首地址完成由key数据到value数据的查找使用流程,完成key‑value形数据的存储和使用。本发明能够实现在Linux操作系统下以极低的内存资源占用和远超常用红黑树数据结构、接近哈希表/散列表数据结构的查找性能来实现key‑value形数据的存储与查找。
技术领域
本发明涉及数据存储优化技术领域,具体涉及基于Linux的key-value形数据存储和使用方法。
背景技术
计算机软件使用的数据类型多种多样,例如c++编程语言中常见的整型数据int在32位计算机中代表了32个bit位组成的数据,每个bit位有0和1两种状态,最高bit位代表正负,因此整型数据int可存储的数据范围为-2147483648~2147483647[-2^31~2^31-1]。除此之外,计算机软件中还存在一种常用的key-value形数据。通俗的来讲,例如每个人的身份证号是唯一的,每个身份证号对应着唯一的人名,这种身份证号码和唯一的姓名之间的关系就是一种key-value形数据。我们可以通过唯一的key(身份证号码)来找到唯一的value(姓名)。
计算机软件经常需要加载到内存一些静态key-value形数据,这些数据一般存储在计算机硬盘中例如字典、配置文件等。计算机在内存中加载这些静态key-value形数据时有很多选择,例如c++标准库中的std::map、std::unordered_map,QT库中的QMap、QHash等。随着计算机软件需要存储的数据量的增大,软件占用的内存资源也越来越高。而计算机软件存储key-value形数据绝大部分是为了更加高效的通过key来查找value数据,因此如何保持高效的查找效率并且降低软件程序的内存资源占用成为了很多软件开发者难以兼顾的难题。
目前计算机软件常用的存储key-value形数据的容器主要分为两类。
一种是类似c++标准库STL中的std::map结构。这种结构通常的底层原理为自平衡的二叉查找树,又称红黑树,这种结构可以在插入和删除操作时通过特定操作保持二叉查找树的平衡,在获得较高的查找性能的同时保持数据存储的顺序性。 它可以在O(log n)时间内做查找,插入和删除,这里的n是指树中元素的数目。
另一种是类似c++标准库STL中的std::unordered_map结构。这种结构的底层原理为哈希表,又称散列表。哈希表构造完成后查找、插入等操作只需要接近常量的时间即O(1)的时间级。
这两种方法存在共同的缺点:数据均存储在内存中,数据量的增大将会导致程序占用内存资源过高,并且每次程序重新运行时需要重新构造对应的数据结构。随着数据量的增大,这两种方法的构造时间也会逐渐增加。
第二种方法哈希表虽然拥有最快的查找速度,但无法保持存储数据的顺序性,并且构造哈希表需要占用更多的内存空间。数据量较大时也可能出现key值冲突的情况,因此限制了这种方法的使用场景。
专利申请号CN109446198A公开一种基于双数组的trie树节点压缩方法及装置,其技术的核心内容基本集中在双数组树本身的构造优化和对应的检索使用方法上,通过预加载全部key值计算出双数组trie树中的叶子结点,然后将叶子结点后的数据单独存储到一个连续数组中,从而降低双数组trie树的存储空间占用。此方法在key值的长度存在明显差异时可在一定程度上降低双数组trie树的空间占用,不过处理流程中引入了预处理获取叶子节点的操作会导致构造双数组trie树的耗时增加,另外此方法额外加入了存放叶子结点之后数据的连续数组进而导致查询流程中会额外引入跳转连续数组并对比数据内容的操作会导致双数组trie树的接口性能降低。
发明内容
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于麒麟软件有限公司,未经麒麟软件有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310121877.5/2.html,转载请声明来源钻瓜专利网。





