一种多维数据存储方法及装置与流程

文档序号:24640428发布日期:2021-04-09 20:53阅读:47来源:国知局
一种多维数据存储方法及装置与流程

本公开涉及数据存储技术领域,具体涉及到一种多维数据的存储方法及装置。



背景技术:

维,观察数据的特定角度,分析数据时一类属性,属性集合构成一个维,例如,如数据的时间维、数据的地理维等。

维的成员,维的一个取值,是数据项在某维中位置的描述。例如,某年某月某日是时间维上位置的描述。

存储多维度数据主要是通过对所有计算维度进行冗余,不断横向扩展关系型数据库中的字段来实现。采用这种方式会产生大量的冗余数据,每增加一个计算维度,数据量将程指数级上涨,并且需要额外的配置信息对目标数据所用到的维度进行存储。

还通过按顺序嵌套组合不同维度主键来定位多维数据。采用这种方式由于其按顺序对维度主键进行优化整合,读取数据的时候也必须按照主键顺序来进行,因此同样需要额外的配置信息对目标数据等用到的维度进行存储。



技术实现要素:

本公开的主要目的在于提供一种多维数据存储方法,以解决数据存储配置繁琐问题。

为了实现上述目的,根据本公开的第一方面,提供了一种多维数据存储方法,包括:将多维数据中所有第一维度的成员确定为行索引,得到数据表的行坐标,包括:定义所述第一维度所有成员对应的一个行索引键,以及定义所述第一维度所有成员的行索引值,其中,所述行索引值被定义为第一一维数组;将多维数据中剩余多个维度中每一个维度的成员确定为列索引,得到数据表的列坐标,包括:定义剩余n个维度中每一个维度下的所有成员对应的一个列索引键,得到n个列索引键的集合,以及定义剩余维度中每一个维度的每一个成员的列索引值,其中,剩余维度中每一个维度的每一个成员的列索引值被定义为第二一维数组;基于所述数据表中的行坐标和所述数据表的列坐标,将目标数据进行对应存储。

可选地,在将多维数据中所有第一维度成员确定为行索引,得到数据表的行坐标之前,所述方法还包括:比较多维数据中每个维度成员的数量的大小;将数量最多的成员所对应的维度确定为所述第一维度。

可选地,将多维数据中剩余多个维度中每一个维度的成员确定为列索引包括:定义第二维度的成员的列索引键,得到第二维度的所有成员对应的一个第一列索引键;定义第三维度的成员的列索引键,得到第三维度的所有成员对应的一个第二列索引键;定义第二维度的每一个成员的第一列索引值,其中,所述每一个成员的第一列索引值被定义为第三一维数组,所述第三一维数组中的元素为数据表中的列坐标;定义第二维度的每一个成员的第一列索引值,其中,所述第二维度的每一个成员的第一列索引值被定义为第三一维数组;定义第三维度的每一个成员的第二列索引值,其中,所述第三维度的每一个成员的第一列索引值被定义为第四一维数组。

可选地,基于所述数据表中的行坐标和所述数据表的列坐标,将目标数据进行对应存储包括:获取所述目标数据对应的第一维度成员信息和剩余维度成员信息;基于所述第一维度成员信息确定目标数据在数据表中的行坐标;基于所述剩余维度成员信息确定目标数据在数据表中的列坐标;基于所述数据表中的行坐标和所述数据表中的列坐标,将所述目标数据定义为二维数组。

根据本公开的第二方面,提供了一种多维数据存储装置,包括:第一确定单元,将多维数据中所有第一维度的成员确定为行索引,得到数据表的行坐标,包括:定义所述第一维度所有成员对应的一个行索引键,以及定义所述第一维度所有成员的行索引值,其中,所述行索引值被定义为第一一维数组;第二确定单元,将多维数据中剩余多个维度中每一个维度的成员确定为列索引,得到数据表的列坐标,包括:定义剩余n个维度中每一个维度下的所有成员对应的一个列索引键,得到n个列索引键的集合,以及定义剩余维度中每一个维度的每一个成员的列索引值,其中,剩余维度中每一个维度的每一个成员的列索引值被定义为第二一维数组;存储单元,基于所述数据表中的行坐标和所述数据表的列坐标,将目标数据进行对应存储。

可选地,装置还包括:比较单元,比较多维数据中每个维度成员的数量的大小;第三确定单元,将数量最多的成员所对应的维度确定为所述第一维度。

可选地,第二确定单元包括:第一定义模块,定义第二维度的成员的列索引键,得到第二维度的所有成员对应的一个第一列索引键;第二定义模块,定义第三维度的成员的列索引键,得到第三维度的所有成员对应的一个第二列索引键;第三定义模块,定义第二维度的每一个成员的第一列索引值,其中,所述每一个成员的第一列索引值被定义为第三一维数组,所述第三一维数组中的元素为数据表中的列坐标;第四定义模块,定义第二维度的每一个成员的第一列索引值,其中,所述第二维度的每一个成员的第一列索引值被定义为第三一维数组;第五定义模块定义第三维度的每一个成员的第二列索引值,其中,所述第三维度的每一个成员的第一列索引值被定义为第四一维数组。

可选地,存储单元进一步被配置成包括:获取模块,获取所述目标数据对应的第一维度成员信息和剩余维度成员信息;第一确定模块,基于所述第一维度成员信息确定目标数据在数据表中的行坐标;第二确定模块,基于所述剩余维度成员信息确定目标数据在数据表中的列坐标;第六定义模块,基于所述数据表中的行坐标和所述数据表中的列坐标,将所述目标数据定义为二维数组。

根据本公开的第三方面,提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行第一方面任意一项实施例所述的多维数据存储方法。

根据本公开的第四方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器执行第一方面任意一项实施例所述的多维数据存储方法。

本公开实施例多维数据存储方法,包括将多维数据中所有第一维度的成员确定为行索引,得到数据表的行坐标,包括定义所述第一维度所有成员对应的一个行索引键,以及定义所述第一维度所有成员的行索引值,将多维数据中剩余多个维度中每一个维度的成员确定为列索引,得到数据表的列坐标,包括定义剩余n个维度中每一个维度下的所有成员对应的一个列索引键,得到n个列索引键的集合,以及定义剩余维度中每一个维度的每一个成员的列索引值。将多维数据简化为二维存储结构,从而可灵活适应多维度组合,无需按照特定的主键顺序对数据进行排列;用一种与顺序无关的主键组合进行查询,无需额外的配置数据,进而解决了现有技术中配置过程繁琐的技术问题。

附图说明

为了更清楚地说明本公开具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本公开实施例的数据存储方法;

图2是根据本公开实施例的数据存储方法的应用场景图;

图3是根据本公开实施例的数据存储装置示意图;

图4是根据本公开实施例的电子设备的示意图。

具体实施方式

为了使本技术领域的人员更好地理解本公开方案,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分的实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本公开保护的范围。

需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。

根据本公开实施例,提供了一种多维数据存储方法,如图1所示,该方法包括如下的步骤101至步骤103:

步骤101:将多维数据中所有第一维度的成员确定为行索引,得到数据表的行坐标,包括:定义所述第一维度所有成员对应的一个行索引键,以及定义所述第一维度所有成员的行索引值,其中,所述行索引值被定义为第一一维数组,所述第一一维数组中的元素为数据表中的行坐标。

在本实施例中,可以将多维数据中的第一维度的成员确定为行索引,该实现过程可以包括,定义第一维度所有成员对应的一个行索引的主键,例如,stringfirstcolumnkey,行索引的主键用于标识第一维度的属性,采用该方式,能用一种与顺序无关的主键组合进行查询,而无需额外的配置数据。还包括定义所有成员的行索引值,行索引值可以定义为一维数组,以节省存储空间,例如,arraylist<string>firstcolumnvalues。当第一维度的属性包含的信息是无重复的数字时,一维数组中的元素可以是该无重复的数字,即行索引数据每行是唯一的,用于定位正文二维数据的行而存在。在确定行索引键和行索引值后,数据表的行坐标可唯一确定。

以存储保险费率数据为例,保险费率由保险人的“性别”维度、“年龄”维度和“存储年限”维度决定,“年龄”可以作为第一维度,将该维度的成员(例如,18岁、19岁,20岁......65岁)为确定为行索引,具体可以包括,定义“年龄”维度所有成员对应的一个行索引主键,例如,将主键定义为“proposer.age”,将行索引的值定义为一维数组,数组元素可以是行坐标,也可以是年龄包含的无重复的数字。可以采用json格式实现上述方法:

步骤102:将多维数据中剩余多个维度中每一个维度的成员确定为列索引,得到数据表的列坐标,包括:定义剩余n个维度中每一个维度下的所有成员对应的一个列索引键,得到n个列索引键的集合,以及定义剩余维度中每一个维度的每一个成员的列索引值,其中,剩余维度中每一个维度的每一个成员的列索引值被定义为第二一维数组。

将多维数据中剩余多个维度中每一个维度的成员确定为列索引,包括:定义剩余n个维度中每一个维度的所有成员对应的一个列索引键,得到n个列索引键的集合,例如,可以为多个维度定义一个key数组,linkedhashset<string>columnkeys;其中key数组为列索引所有键(key)的集合。而后可以定义剩余维度中每一个维度的每一个成员的列索引值,其中,剩余维度中每一个维度的每一个成员的列索引值被定义为第二一维数组,例如,linkedhashmap<string,set<integer>>columnindexset;在确定列索引键和每一个成员的列索引值后,数据表中的列坐标可唯一确定。不同维度中每一个的每一个成员的列索引值均对应不同列坐标。第二一维数组中的元素可以是数据表的列坐标,也可以根据实际需要将元素配置为无重复的数字。

可以理解,由于剩余维度任一维度(例如,第二维度)的每一个成员均可与剩余维度中其余任一维度(例如,第三维度或第四维度)的每一个成员存在重复的列坐标,比如性别“女”可对应的存储年限有“2年”“4年”“9年”、“14年”和“19年”,“2年”可对应的性别“女”和“男”,因此将每一个成员对应数据表中的列坐标,进而每一个成员的列索引值可以被定义为一维数组。

以存储保险费率为例,保险费率除“年龄”以外,剩余两个维度是“性别”和“存储年限”,可以分别定义“性别”维度下“男”成员和“女”成员对应的索引键“proposer.sex”;定义“存储年限”下的成员“2年”、“4年”、“9年”、“14年”和“19年”对应的索引键“humianplan.paydeadline”。而后定义每一个成员的列索引值。可以采用json实现上述步骤:

以proposer.sex=男为例,该成员的索引值为以列坐标为元素的数组[0,1,2,3,4],不同维度的成员的索引值存在交集,例如,proposer.sex=男成员的索引值均与“2年”、“4年”、“9年”、“14年”和“19年”存在交集。而此交集可以通过行坐标唯一确定唯一值。

步骤103:基于所述数据表中的行坐标和所述数据表的列坐标,将目标数据进行对应存储。

在本实施例中,在确定行坐标和列坐标之后,可以将目标数据作为二维数组存储,可以包括类成员定义arraylist<arraylist<bigdecimal>>data。

作为本实施一种可选的实现方式,在将多维数据中所有第一维度成员确定为行索引,得到数据表的行坐标之前,所述方法还包括:比较多维数据中每个维度成员的数量的大小;将数量最多的成员所对应的维度确定为所述第一维度。

在本实施例中,在将多维数据中所有第一维度成员确定为行索引,得到数据表的行坐标之前,所述方法还包括:比较多维数据中每个维度成员的数量的大小;将数量最多的成员所对应的维度确定为所述第一维度。

在本实施例中,多维数据中的任一维度成员均可以作为行索引,但如果作为确定列索引的其余维度的成员成员量过多,会导致在进行存储配置时,配置量增加,存储空间也变大。因此基于数量最多的成员对应的维度确定行索引。例如,在保险费率数据中“年龄维度”的成员量最多,因此基于该维度成员确定行索引。

作为本实施一种可选的实现方式,将多维数据中剩余多个维度中每一个维度的成员确定为列索引包括:定义第二维度的成员的列索引键,得到第二维度的所有成员对应的一个第一列索引键;定义第三维度的成员的列索引键,得到第三维度的所有成员对应的一个第二列索引键;定义第二维度的每一个成员的第一列索引值,其中,所述每一个成员的第一列索引值被定义为第三一维数组,所述第三一维数组中的元素为数据表中的列坐标;定义第二维度的每一个成员的第一列索引值,其中,所述第二维度的每一个成员的第一列索引值被定义为第三一维数组;定义第三维度的每一个成员的第二列索引值,其中,所述第三维度的每一个成员的第一列索引值被定义为第四一维数组。

在本实施例中,上述存储方法可适用于多个维度的数据,当数据维度为三个维度时,可以将目标数据描述准确,且配置效率最高。在确定列索引时,可以首先定义第二维度的成员、第三维度成员的列索引键,而后定义第二维度每一个成员的第一列索引值,该列索引值被定义为第三一维数组,再定义第三维度每一个成员的第二列索引值,该列索引值被定义为第四一维数组。在该实施例下,优选第二维度的成员数量大于第三维度的成员数量,可以实现减少存储配置的工作量。减少存储空间的占用。

在实际运用中,随着维度的增加,同一个值会出现在多列中,因此,以存储某一行的列索引值=列索引数组

作为本实施例一种可选的实现方式,基于所述数据表中的行坐标和所述数据表的列坐标,将目标数据进行对应存储包括:获取所述目标数据对应的第一维度成员信息和剩余维度成员信息;基于所述第一维度成员信息确定目标数据在数据表中的行坐标;基于所述剩余维度成员信息确定目标数据在数据表中的列坐标;基于所述数据表中的行坐标和所述数据表中的列坐标,将所述目标数据定义为二维数组。

以存储保险费率为例,当获取到目标数据第一维度的成员信为30岁、剩余维度成员信息为“女”、“14年”,可以确定行索引数组proposer.age=30,在数据表中的行坐标=12,而后通过组合主键proposer.sex=女得到第一组列索引数组[5,6,7,8,9];通过组合主键huomianplan.paydeadline=14年的到第二组列索引数组[3,8];将所有索引数组取交集,得到唯一的列坐标8,data[12,8]即为目标数据的存储位置。

从以上的描述中,可以看出,本公开实现了如下技术效果:可灵活适应多维度组合,无需按照特定的主键顺序对数据进行排列;通过设置每个维度的主键,可以实现在查询时,用一种与顺序无关的主键组合进行查询,无需额外的配置数据;通过方便与各种类型的表格文档(例如:excel、pdf、html)进行相互转换;完整的表格数据占用存储空间非常小,方便用于各种缓存中。

参考图2,图2示出了多维数据存储方法的应用场景示意图,数据表中存储了保险费率数据。示意数据表可分为3个部分:以第一列作为行索引;示意表的右上方头部为列索引,可以是一行或多行,列索引部分可以灵活扩展,每一行指定一个数据维度,剩余的部分是一个数据正文二维数组。

行索引的头部即为主键,形式为:key=注释文字;行索引数据每行必须唯一,作为定位正文二维数据的行而存在;读取(查询)时,通过key=索引值即可立即定位至正文数据所属行坐标。

每一行的第一列,定义key=值,其余列只需定义值,无需重复定义key,将key=值->值=列索引数组这样的两层结构展开,简化为一层:(key=值)=列索引数组,得到一个更为直观的字典结构:linkedhashmap<string,set<integer>>columnindexset。

在读取数据时查询时,取出每个维度所覆盖的列索引数组,然后通过取交集的方式,得到最终唯一的列坐标值。具体地,通过传入的投保参数,快速计算出行列坐标,即可在正文中读取到相应费率数据。例如,投保参数为【投保人年龄:30岁,投保人性别:女,缴费期间:14年】则从行索引数组中搜索proposer.age=30,得到行坐标=12。从列索引集合中,通过组合主键proposer.sex=女得到第一组列索引数组[5,6,7,8,9];通过组合主键huomianplan.paydeadline=14年的到第二组列索引数组[3,8];将所有索引数组取交集,得到唯一的列坐标8。从费率表数据二维数组中,读取data[12,8]的数据,得到费率:26.56。

需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

根据本公开实施例,还提供了一种用于实施上述多维数据存储方法的装置,如图3所示,该装置包括:

第一确定单元301,将多维数据中所有第一维度的成员确定为行索引,得到数据表的行坐标,包括:定义所述第一维度所有成员对应的一个行索引键,以及定义所述第一维度所有成员的行索引值,其中,所述行索引值被定义为第一一维数组;第二确定单元302,将多维数据中剩余多个维度中每一个维度的成员确定为列索引,得到数据表的列坐标,包括:定义剩余n个维度中每一个维度下的所有成员对应的一个列索引键,得到n个列索引键的集合,以及定义剩余维度中每一个维度的每一个成员的列索引值,其中,剩余维度中每一个维度的每一个成员的列索引值被定义为第二一维数组;存储单元303,基于所述数据表中的行坐标和所述数据表的列坐标,将目标数据进行对应存储。

可选地,装置还包括:比较单元,比较多维数据中每个维度成员的数量的大小;第三确定单元,将数量最多的成员所对应的维度确定为所述第一维度。

可选地,第二确定单元302包括:第一定义模块,定义第二维度的成员的列索引键,得到第二维度的所有成员对应的一个第一列索引键;第二定义模块,定义第三维度的成员的列索引键,得到第三维度的所有成员对应的一个第二列索引键;第三定义模块,定义第二维度的每一个成员的第一列索引值,其中,所述每一个成员的第一列索引值被定义为第三一维数组,所述第三一维数组中的元素为数据表中的列坐标;第四定义模块,定义第二维度的每一个成员的第一列索引值,其中,所述第二维度的每一个成员的第一列索引值被定义为第三一维数组;第五定义模块定义第三维度的每一个成员的第二列索引值,其中,所述第三维度的每一个成员的第一列索引值被定义为第四一维数组。

可选地,存储单元303进一步被配置成包括:获取模块,获取所述目标数据对应的第一维度成员信息和剩余维度成员信息;第一确定模块,基于所述第一维度成员信息确定目标数据在数据表中的行坐标;第二确定模块,基于所述剩余维度成员信息确定目标数据在数据表中的列坐标;第六定义模块,基于所述数据表中的行坐标和所述数据表中的列坐标,将所述目标数据定义为二维数组。

本公开实施例提供了一种电子设备,如图4所示,该电子设备包括一个或多个处理器41以及存储器42,图4中以一个处理器41为例。

该控制器还可以包括:输入装置43和输出装置44。

处理器41、存储器42、输入装置43和输出装置44可以通过总线或者其他方式连接,图4中以通过总线连接为例。

处理器41可以为中央处理器(centralprocessingunit,cpu)。处理器41还可以为其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器42作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本公开实施例中的控制方法对应的程序指令/模块。处理器41通过运行存储在存储器42中的非暂态软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例的数据存储方法。

存储器42可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据服务器操作的处理装置的使用所创建的数据等。此外,存储器42可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至网络连接装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置43可接收输入的数字或字符信息,以及产生与服务器的处理装置的用户设置以及功能控制有关的键信号输入。输出装置44可包括显示屏等显示设备。

一个或者多个模块存储在存储器42中,当被一个或者多个处理器41执行时,执行如图1所示的方法。

本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各电机控制方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)、随机存储记忆体(randomaccessmemory,ram)、快闪存储器(flashmemory)、硬盘(harddiskdrive,缩写:hdd)或固态硬盘(solid-statedrive,ssd)等;存储介质还可以包括上述种类的存储器的组合。

虽然结合附图描述了本公开的实施方式,但是本领域技术人员可以在不脱离本公开的精神和范围的情况下作出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。

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