[发明专利]一种跨平台高效键值存储方法在审
申请号: | 202010407639.7 | 申请日: | 2020-05-14 |
公开(公告)号: | CN111639076A | 公开(公告)日: | 2020-09-08 |
发明(设计)人: | 张向胜;陆黎川;张力;徐瑞超;张冠军;范冲冲 | 申请(专利权)人: | 民生科技有限责任公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/24;G06F9/52 |
代理公司: | 北京金智普华知识产权代理有限公司 11401 | 代理人: | 巴晓艳 |
地址: | 101300 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 平台 高效 键值 存储 方法 | ||
本发明提供了一种跨平台高效键值存储方法,涉及键值存储技术领域,能够既保证数据准确性,又对内存、空间占用以及读取效率方面进行优化,具有更好的性能;该方法所述方法采用紧凑型数据结构对数据进行存储,以避免数据冗余;存储数据时直接以二进制形式写入数据库文件中,以减少文件占用空间;内存对数据进行读取时采用键值哈希索引+偏移量的方式进行缓存,实现对内存的节省;采用文件锁的方式解决多进程数据并发安全问题。本发明提供的技术方案适用于键值存储和增删改查的过程中。
【技术领域】
本发明涉及键值存储技术领域,尤其涉及一种跨平台高效键值存储方法。
【背景技术】
在程序的开发过程中,无论什么平台,比较常见的一种需求就是持久化的存储键值对。以Android端为例,持久化存储时存在几个问题:
1.初始化消耗问题:SharedPreferences在初始化时会将文件中的所有数据都遍历一遍,并加载到hashmap中,当数据量较大时,这对性能的消耗和内存的占用都是非常巨大的;
2.增删改查效率问题:以Android端为例,可以使用SharedPreferences来进行键值对的存储;但SharedPreferences是以标准的XML格式来存储key-value的,为了文件的可读性,增加了一些冗余的字符。因此,其增删改查的效率相对较低;
3.并发操作数据一致性问题:在SharedPreferences非单例的情况下,其存储数据的时候并不是线程安全的,需要在调用函数时进行一些线程安全的操作,较为繁琐;
4.进程间同步问题(Android独有):当Android应用内开启了多个进程时,存储key-value的数据同步问题更为突出,原生并没有提供任何类似问题的完整解决方案。
因此,有必要研究一种跨平台高效键值存储方法来应对现有技术的不足,以解决或减轻上述一个或多个问题。
【发明内容】
有鉴于此,本发明提供了一种跨平台高效键值存储方法,既保证了数据准确性,又在空间和时间方面进行了优化,具有更好的性能。
一方面,本发明提供一种跨平台高效键值存储方法,其特征在于,所述方法采用紧凑型数据结构对数据进行存储,以避免数据冗余;存储数据时直接以二进制形式写入数据库文件中,以减少文件占用空间;内存对数据进行读取时采用键值哈希索引+偏移量的方式进行缓存,实现对内存的节省。
如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,紧凑型数据结构的格式具体为:
|value|key|valueLen|keyLen|keyHash|valueHash|valueType|,
其中,valueType代表数据类型和是否为有效数据,占用8bit,keyHash表示键值哈希值,占用32bit,也用作该数据在索引中的哈希值,valueHash表示value的哈希值,占用8bit,用于保证数据的完整性,keyLen表示键值长度,占用10bit,valueLen表示值的长度,另外keyLen和valueLen表示偏移量;
每条数据之间头尾相连,没有分隔符。
如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,keyLen代表的长度范围为0-1023。
如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,对数据库文件中的数据进行插入和更新操作时,在索引列表中遍历待操作数据的键值哈希值;
如果存在相同的键值哈希值,则判定为更新逻辑,将原有数据的数据类型标记为已删除,并在数据库文件的末尾增加新的数据,生成新的内存索引;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于民生科技有限责任公司,未经民生科技有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010407639.7/2.html,转载请声明来源钻瓜专利网。