一种应用驱动的数据存储与索引方法与流程

文档序号:18409697发布日期:2019-08-10 00:52阅读:162来源:国知局
一种应用驱动的数据存储与索引方法与流程

本发明涉及一种应用驱动的数据存储与索引方法,属于数据处理技术领域。



背景技术:

随着互联网信息的增长,大量的数据需要被存储,也就需要更多的硬盘设备。数据量不断增长,数据的类型也在不断的增加。话单作为众多数据中的一种,其数据量在增加的同时,话单格式中的字段也在不断的扩展。

不同的应用类型对数据的存储和分析需求是各不相同的,为根据不同的数据类型定制不同的方案,无疑要比统一的储存平台更能有效率。应用驱动就是指的为不同应用的需求定制差异化的存储方案。

多维度,指的是多个角度。使用者通过特定的方法,能够快速的、有效率的得到自己需要的特定角度的数据,这对后续的工作是大有裨益的。后续的分析不需要再对数据进行二次加工,就可以得到进行分析特定的基础数据。

话单数据目前面临两种情况:一是储存在传统关系数据库中,传统数据库在处理短期数据时相对灵活、有绝对的优势。但是面临海量数据的时候,其储存方式对后续的数据分析无法提供有效的帮助;二是采用了分布式处理的方案,直接采用某些通用的分布式技术,在数据规模和查询速率有所保证,但是成本较高,没有充分挖掘出话单数据应有的价值。

为了提高话单数据的应用价值、应对话单字段的扩展,找到合适的储存和索引方法变得尤为重要。



技术实现要素:

有鉴于此,本发明提供了一种应用驱动的数据存储与索引方法,随着信息的增长,使用者对数据的使用频率越来越高,提供一种有效的在存储的基础上进行灵活的索引的方法。该方法能提高存储空间的使用效率,也能提供较高的索引速率。

本发明通过以下技术手段解决上述技术问题:

本发明的一种应用驱动的数据存储方法,数据按列存储,每一列之间不完全独立,单个文件存储内容只包含一个字段,每一个字段前有一个标志位,表示该字段位于该文件的第几个存储内容,相应的其他字段也有相应的标志位,同一条记录的不同字段在不同的文件中拥有相同的行数标志;

文件名称包含三个字段:字段标志、存储该文件的起始时间、该字段在该文件中的范围,存储该文件的起始时间字段保证该文件的唯一性,字段标志和该字段在该文件中的范围字段确保后续索引的建立。

一种应用驱动的数据索引方法,索引方法采用b+树的形式,其包括:

将文件名称包含的三个字段作为建立b+树的数据,取该文件的字段范围的最大值为key,起始时间的前五位为value建立一颗b+树,同样的,取该文件的字段范围的最小值为key,起始时间的后五位为value建立一颗b+树;

查询该字段的时间同时查询两颗b+树,将查询结果组合成范围,加上字段标志定位到文件,最后在文件中去查询具体内容。

一种应用驱动的数据存储方法,三个字段内容前放置标志位,每获取一条信息,就将经过编码的字段内容与相应内存中的数据进行比对,如果已经存在相同的内容,就将新获取的字段内容相对应的经过编码后的标志位添加到已经存在的字段前面,如果不存在内容,就将新的字段和标志位编码后添加到相应内存中。

一种应用驱动的数据索引方法,基于内存中的数据已经写入文件,获取b+树的叶子结点有两种方式,一是从内存变量中获取,随时监控内存动态,当执行写入文件操作时获取到起始时间和字段范围,二是直接从文件名称获取;

获取文件名中的时间和字段范围,标准时间长度位10,划分位两个字段各五位,同时取出字段范围的最大值和最小值,最大值和时间的前五位组成一个字典,最大值位key,时间的前五位为value,最小值和时间的后五位组成一个字典,最小值为key,时间的后五位为value;

将获取的key-value键值对作为b+树的叶子结点,建立两颗b+树。查询的时候同时在两颗b+树中查询,将查询到的结果组成字段范围,加上字段标志,在文件列表中查找相应的文件。

b+树的建立和更新流程如下:

步骤1:判断该key-value是否是叶子结点,若是则转向步骤3,不是则转向步骤2;

步骤2:判断叶子节点个数、子节点类型,如果节点个数大于1,则采用二分法查找插入位置,如果节点数目为1,则比较key的大小,然后判断节点类型;如果节点类型为叶子结点,则转向步骤3,如果节点类型为非叶子结点,则继续步骤2;

步骤3:判断叶子节点的状态,如果节点状态为空,则插入数据,不为空,则判断叶子结点的个数,当叶子结点个数大于1,则采用二分法查找插入位置,然后转向步骤4,当叶子结点个数等于1,则直接转向步骤4;

步骤4:比较叶子结点和数据的大小,判断叶子结点是否满,如果叶子结点未满,则插入数据,如果叶子结点满,则进行b+树的分裂,转向步骤5;

步骤5:创建父节点,如果是,则插入数据,如果不是则判断节点个数、节点类型,节点未满,则插入数据,节点满则继续步骤5。

本发明将数据划分为指定大小的文件储存,并将时间字段、数据相关信息存储到文件名,可保证文件的唯一性和一定的信息量;

使用二进制表示标志位,减少文件名的长度;

当同一个字段的内容差别不是很大,使用前向差值法可有效节省硬盘空间;

使用b+树建立索引,即使数据量增大,查询效率也不会明显的降低;

采用列存储的方式,可以灵活选取需要的字段查询以及提取。

本发明的有益效果:随着信息的增长,使用者对数据的使用频率越来越高,提供一种有效的在存储的基础上进行灵活的索引的方法,该方法能提高存储空间的使用效率,也能提供较高的索引速率。

附图说明

下面结合附图和实施例对本发明作进一步描述。

图1是本发明实施例1提供的一种存储数据的方法流程图;

图2是本发明实施例2提供的一种建立索引的方法流程图;

图3是b+树的建立和更新流程图。

具体实施方式

以下将结合附图对本发明进行详细说明,如图1、2和3所示:本实施例的为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步的详细描述。

一种应用驱动的数据存储方法,数据按列存储,每一列之间不完全独立,单个文件存储内容只包含一个字段,每一个字段前有一个标志位,表示该字段位于该文件的第几个存储内容,相应的其他字段也有相应的标志位,同一条记录的不同字段在不同的文件中拥有相同的行数标志;

文件名称包含三个字段:字段标志、存储该文件的起始时间、该字段在该文件中的范围,存储该文件的起始时间字段保证该文件的唯一性,字段标志和该字段在该文件中的范围字段确保后续索引的建立。

一种应用驱动的数据索引方法,索引方法采用b+树的形式,其包括:

将文件名称包含的三个字段作为建立b+树的数据,取该文件的字段范围的最大值为key,起始时间的前五位为value建立一颗b+树,同样的,取该文件的字段范围的最小值为key,起始时间的后五位为value建立一颗b+树;

查询该字段的时间同时查询两颗b+树,将查询结果组合成范围,加上字段标志定位到文件,最后在文件中去查询具体内容。

一种应用驱动的数据存储方法,三个字段内容前放置标志位,每获取一条信息,就将经过编码的字段内容与相应内存中的数据进行比对,如果已经存在相同的内容,就将新获取的字段内容相对应的经过编码后的标志位添加到已经存在的字段前面,如果不存在内容,就将新的字段和标志位编码后添加到相应内存中。

一种应用驱动的数据索引方法,基于内存中的数据已经写入文件,获取b+树的叶子结点有两种方式,一是从内存变量中获取,随时监控内存动态,当执行写入文件操作时获取到起始时间和字段范围,二是直接从文件名称获取;

获取文件名中的时间和字段范围,标准时间长度位10,划分位两个字段各五位,同时取出字段范围的最大值和最小值,最大值和时间的前五位组成一个字典,最大值位key,时间的前五位为value,最小值和时间的后五位组成一个字典,最小值为key,时间的后五位为value;

将获取的key-value键值对作为b+树的叶子结点,建立两颗b+树。查询的时候同时在两颗b+树中查询,将查询到的结果组成字段范围,加上字段标志,在文件列表中查找相应的文件。

实施例1

一种存储数据的方法,以话单数据为例。参见图1,其中,该方法包括:

获取话单存入内存,设定文件大小阈值,当内存中话单大小达到阈值,便生成一个文件,文件命名方式为字段标识+时间+该字段在该文件中的范围值(十六进制)。字段标识从0开始,0表示第一个字段,1表示第二个字段等。鉴于话单字段类型只有整形和字符串两种形式,文件内容统一转换为二进制保存。

101:从外部获取话单内容,每一条话单指定一个标志位,表示该条话单是该块内存中的第几条数据,然后按列存储。

该标志位的编码方式为:将标志为转换为二进制,从低位开始按六位为一段组成一个八位的第六位,位数不足填充0,其最高位始终为1,次低位表示该标志位字节长度,0表示长度位1,1表示长度位2,包含本字节。如标志位为156,二进制表示为0b10011100,长度超过6但小于12,表示该标志位长度位2,转换之后为0b110000100b10011100。

话单字段类型分为整形和字符串。将整形和字符串都转换为二进制表示。然后通过指定的编码方式:

一种情况是字段变化不大,可人为设置一个最小的值,通过前向差值法计算出后面新的字段内容的对于最小值的差值。如国际移动用户识别码(imsi),最小可设置位460000000000000,然后计算出新的字段内容和该值的差值,进行后续的编码;

另外一种情况是字段变化比较明显,可不设置最小值,或者默认最小值位0,然后进行后续编码,

具体编码方式位:将字段内容转换为二进制之后,从低位开始,每七位为一段组成一个八位的第七位,最高位始终位0。

标志位和字段内容的组合:字段内容前放置标志位,每获取一条话单信息,就将经过编码的字段内容与相应内存中的数据进行比对,如果已经存在相同的内容,就将新获取的字段内容相对应的经过编码后的标志位添加到已经存在的字段前面,如果不存在内容,就将新的字段和标志位编码后添加到相应内存中。

在进行字段内容比对的同时,内存中设定两个变量,表示该块内存中存储的该字段的最大值和最小值,起始值都为0。获取到新的字段内容时会经过比对,:首先是和具体内容的比对,如果该字段内容已经存在,则不进行最大值最小值的比对,如果该字段内容在内存中不存在,则将该值与最值比较并进行替换。

102:获取当前时间的时间戳(1970纪元后经过的浮点秒数),共十位。根据话单字段数目,从0开始给每一个话单字段相应的标志,字段1对应标志0,字段2对应标志1等。时刻更新字段的范围大小。

103:设定一个内存块的阈值,当内存块达到该阈值,则将当前的字段标志、起始时间、字段范围设定为文件名,将该块内存中的数据写入该文件。

实施例2

本发明实施例提供了一种建立索引的方法。参见图2,该方法包括:

该方法是基于内存中的数据已经写入文件,获取b+树的叶子结点有两种方式,一是从内存变量中获取,随时监控内存动态,当执行写入文件操作时获取到起始时间和字段范围,二是直接从文件名称获取。

201:获取文件名中的时间和字段范围。标准时间长度位10,划分位两个字段各五位,同时取出字段范围的最大值和最小值,最大值和时间的前五位组成一个字典,最大值位key,时间的前五位为value,最小值和时间的后五位组成一个字典,最小值为key,时间的后五位为value。

202:将上一步获取的key-value键值对作为b+树的叶子结点,建立两颗b+树。查询的时候同时在两颗b+树中查询,将查询到的结果组成字段范围,加上字段标志,在文件列表中查找相应的文件。

b+树的建立和更新过程如图3,具体流程如下:

s1:判断该key-value是否是叶子结点,若是则转向s3,不是则转向s2;

s2:判断叶子节点个数、子节点类型,如果节点个数大于1,则采用二分法查找插入位置,如果节点数目为1,则比较key的大小,然后判断节点类型;如果节点类型为叶子结点,则转向s3,如果节点类型为非叶子结点,则继续s2;

s3:判断叶子节点的状态,如果节点状态为空,则插入数据,不为空,则判断叶子结点的个数,当叶子结点个数大于1,则采用二分法查找插入位置,然后转向s4,当叶子结点个数等于1,则直接转向s4;

s4:比较叶子结点和数据的大小,判断叶子结点是否满,如果叶子结点未满,则插入数据,如果叶子结点满,则进行b+树的分裂,转向s5;

s5:创建父节点,如果是,则插入数据,如果不是则判断节点个数、节点类型,节点未满,则插入数据,节点满则继续s5。

最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1