System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及数据存储,具体提供一种多种类索引的数据存储方法及数据存储装置。
技术介绍
1、顺序文件存储结构,在经典的lsm树下sstable(static sorted table)是一种按块存储有序kv数据的文件结构。sstable保存了排序后的数据(实际上是按照key排序的key-value对)。每个sstable可以包含多个存储数据的文件,称为segment,每个segment内部的数据都是按照key排序的。
2、但是问题在于现有sstable文件结构对于kv数据,不同key分布、不同value分布及运行适用资源时,无法有更好的动态匹配。
3、因此,针对不同资源和不同kv数据分布,如何使用更匹配的存储方案是本专利技术专利所要解决的技术问题。
技术实现思路
1、为了解决上述技术问题,本专利技术提出一种多种类索引的数据存储方法及数据存储装置,具体地,采用了如下技术方案:
2、在第一方面,本专利技术提供一种多种类索引的数据存储方法,包括第一数据存储结构,所述第一数据存储结构包括:
3、头部标识区段header,用于写入代表文件编码方式的类型数据;
4、kv数据区段kvs,用于依序写入前缀压缩的kv键值对数据;
5、kv索引区段array-index,记录各kv键值对在文件的起始位置offset,某一kv键值对的总长度通过该kv键值对的起始位置offset和后一个kv键值对的起始位置offset差值确定;
>6、key索引区段hash-index,用于记录key与kv键值对在整体文件中序号的对应索引关系。
7、作为本专利技术的可选实施方式,本专利技术的一种多种类索引的数据存储方法中,所述kv数据区段kvs对于具有公共前缀数据的kv键值对的编码结构包括:
8、keysize区,用于存储key中后缀数据suffix的长度;
9、sharedheader区,用于设置当前kv键值对不包含公共前缀数据或者包含公共前缀数据且是第一个的情况;
10、sharedlen区,用于保存公共前缀数据的长度;
11、suffix区,用于保存后缀数据,则该suffix区保存完整的key;
12、value区,用于保存kv键值对的value。
13、作为本专利技术的可选实施方式,本专利技术的一种多种类索引的数据存储方法中,所述kv数据区段kvs对于仅保存后缀数据的kv键值对的编码结构包括:
14、keysize区,用于存储key中后缀数据suffix的长度;
15、sharedheader区,用于设置当前kv键值对包含公共前缀数据且不是第一个的情况;
16、sharedpost区,用于保存与具有公共前缀数据的key之间的距离;
17、suffix区,用于保存key中除去公共前缀数据的后缀数据;
18、value区,用于保存kv键值对的value。
19、作为本专利技术的可选实施方式,本专利技术的一种多种类索引的数据存储方法中,所述的key索引区段hash-index包括:
20、对key取哈希得到无符号整数,将无符号整数的高位记录下来得到key分片shard,将item记录在对应key分片shard中的第0位,同一个key分片shard有多个元素,依次记录在后续位置即可;所述item的内容是该kv键值对在整体文件中的序号。
21、作为本专利技术的可选实施方式,本专利技术的一种多种类索引的数据存储方法,包括基于第一数据存储结构的数据查找过程:
22、根据查询key查找key索引区段hash-index,若key索引区段hash-index存在查询key的key分片shard,则获取key分片shard内的item;
23、根据所述item查找kv索引区段array-index,定位kv键值对在kv索引区段array-index的起始位置offset,通过当前偏移量和其后一个位置存储的起始位置offset的差值,得到kv数据区段kvs;
24、解码kv数据区段kvs得到keysize区和shareheader区,根据sharedheader区的值判断当前key是否完整;
25、若判断结果为是,则将当前key和查询key比较,如一致则返回value,如不一致则回退到根据查询key查找key索引区段hash-index,继续查找,直到当前key分片shard的元素不存在该查询key则返回;
26、若判断结果为否,则查找当前key的公共前缀数据,将当前key的公共前缀数据和当前key的后缀数据拼接起来得到完整的key,将当前完整的key和查询key比较,如一致则返回value,如不一致则回退到根据查询key查找key索引区段hash-index,继续查找,直到当前key分片shard的元素不存在该查询key则返回。
27、作为本专利技术的可选实施方式,本专利技术的一种多种类索引的数据存储方法中,所述解码kv数据区段kvs得到keysize区和shareheader区,根据sharedheader区的值判断当前key是否完整包括:
28、根据sharedheader区的值判断当前key为不包含公共前缀数据或者包含公共前缀数据且是第一个的情况时,则当前key为完整key;
29、根据sharedheader区的值判断当前key为包含公共前缀数据且不是第一个的情况时,则进一步查找公共前缀数据;
30、根据当前key的sharedpost区的值,得到其公共前缀数据所在的位置,然后得到公共前缀数据对应的kv键值对,通过具有公共前缀数据的kv键值对的sharedlen区得到公共前缀数据,和当前key的suffix区的后缀数据拼接起来得到完整的key。
31、作为本专利技术的可选实施方式,本专利技术的一种多种类索引的数据存储方法,包括第二数据存储结构,所述第二数据存储结构包括:
32、头部标识区段header,用于写入代表文件编码方式的类型数据;
33、kv数据块区段block,用于存储经过压缩后的多个kv键值对数据;
34、kv数据块索引区段array-index(block),用于记录各个kv数据块区段block的起始位置信息。
35、作为本专利技术的可选实施方式,本专利技术的一种多种类索引的数据存储方法中,所述kv数据块区段block包括:
36、max-key区,写入该kv数据块区段block中的最大key(max-key);
37、header区,写入最大key(max-key)的长度;
38、kv数据区段kvs,用于依序写入前缀压缩的kv键值对数据;
39、kv索引区段array-index,记录各kv键值对在文件的起始位置offset,某一kv键值本文档来自技高网...
【技术保护点】
1.一种多种类索引的数据存储方法,其特征在于,包括第一数据存储结构,所述第一数据存储结构包括:
2.根据权利要求1所述的一种多种类索引的数据存储方法,其特征在于,所述KV数据区段KVS对于具有公共前缀数据的KV键值对的编码结构包括:
3.根据权利要求2所述的一种多种类索引的数据存储方法,其特征在于,所述KV数据区段KVS对于仅保存后缀数据的KV键值对的编码结构包括:
4.根据权利要求1-3任意一项所述的一种多种类索引的数据存储方法,其特征在于,所述的key索引区段hash-index包括:
5.根据权利要求1-4任意一项所述的一种多种类索引的数据存储方法,其特征在于,包括基于第一数据存储结构的数据查找过程:
6.根据权利要求5所述的一种多种类索引的数据存储方法,其特征在于,所述解码KV数据区段KVS得到keySize区和shareHeader区,根据sharedHeader区的值判断当前key是否完整包括:
7.根据权利要求1-6任意一项所述的一种多种类索引的数据存储方法,其特征在于,包括第二数据存储结构,所
8.根据权利要求7所述的一种多种类索引的数据存储方法,其特征在于,所述KV数据块区段block包括:
9.根据权利要求8所述的一种多种类索引的数据存储方法,其特征在于,包括基于第二数据存储结构的数据查找过程:
10.一种多种类索引的数据存储装置,其特征在于,包括第一数据存储模块,所述第一数据存储模块包括:
...【技术特征摘要】
1.一种多种类索引的数据存储方法,其特征在于,包括第一数据存储结构,所述第一数据存储结构包括:
2.根据权利要求1所述的一种多种类索引的数据存储方法,其特征在于,所述kv数据区段kvs对于具有公共前缀数据的kv键值对的编码结构包括:
3.根据权利要求2所述的一种多种类索引的数据存储方法,其特征在于,所述kv数据区段kvs对于仅保存后缀数据的kv键值对的编码结构包括:
4.根据权利要求1-3任意一项所述的一种多种类索引的数据存储方法,其特征在于,所述的key索引区段hash-index包括:
5.根据权利要求1-4任意一项所述的一种多种类索引的数据存储方法,其特征在于,包括基于第一数据存储结构的数据查找过程:
6.根...
【专利技术属性】
技术研发人员:徐锐波,卢文伟,幸福,刘方,
申请(专利权)人:北京百舸飞驰科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。