一种数据的存放方法
技术领域
本发明涉及数据存储技术领域,尤其涉及一种数据的存放方法。
背景技术
目前,电表、水表、热量表及燃气表等智能设备的累计增量数据一般采用关系型数据库(如MySQL、Oracle、SQL Server)进行存放。关系型数据库采取的数据存放方式类似于EXCEL表格,如表1所示:将智能设备的累计增量数据分为三列:智能设备ID、数据记录时间及智能设备读数。
表1智能设备数据常用存放方式
ID |
时间 |
表值 |
1 |
2018-01-07 01:00:00 |
1 |
2 |
2018-01-07 02:00:00 |
2 |
3 |
2018-01-07 03:00:00 |
3 |
…… |
…… |
…… |
10000 |
2018-12-31 23:00:00 |
10000 |
以电表为例,若按照如表1所示的数据存放方式,一个小时存一条数据,1天需存储24条,一年(按照365天计算)的数据则需在数据库中存24*365=8760条数据,存储115个电表的数据就要100万行数据。然而MySQL、Oracle、SQL Server等关系型数据库在单表100万行数据以上时,查询性能会随之下降,数据的查询速度较慢。
因此,有人提出了分库分表的数据存储方式。分库分表就是按照一定的规则,对原有的数据库和表进行拆分,把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。例如,将数据按时间维度分表,一月的数据存放一张表。但在查询数据时,由单表查询变成多表查询,造成了查询时的逻辑复杂度。
中国专利201310305852.7公开了一种智能电表的数据存储和查询方法及其***,本专利通过将存储页面划分为复数个存储页面,将时间划分为复数个时间段,根据需要查询的数据的时间,按照比例关系计算该需要查询的数据所处的存储页面,很好地达到了查询速度和空间利用之间的平衡。但是,若查询的数据较多,每次均需计算比例关系,查询效率较低。
发明内容
为解决现有技术中存在的上述问题,本发明提供一种数据的存放方法,降低了数据查询时的逻辑复杂度,提高了查询效率。
本发明提供的一种数据的存放方法,主要包括以下步骤:
步骤1、按照设定的统计维度n定义元数据,所述元数据包括n级数据Tn,n=1,2,…,N,N为正整数;
步骤2、为每个维度的所述元数据分配一个对应的一级列存储空间,其中:
所述一级数据T1的一级列存储空间用于存储条第一数据;所述二级数据T2的一级列存储空间用于存储条第二数据,所述第二数据由将第一数据以M1行为单位分为组后的每一组的任一位置数据组成;以此类推,所述m级数据Tm的一级列存储空间用于存储条第m数据,所述第m数据由将第(m-1)数据以Mm-1行为单位分为组后的每一组的任一位置数据组成;所述N级数据TN的一级列存储空间用于存储MN-1条第N数据,所述第N数据为第(N-1)数据中指定位置的数据;其中,m=3,4,…,N-1;M1、M2、…、MN-1均为正整数;
步骤3、将数据按照统计维度存储在对应的所述一级列存储空间。
进一步地,所述步骤2还包括:
按照统计维度将前N-1级数据分别分为MN-1个对应的子数据;
将所述前N-1级数据的一级列存储空间分别分为MN-1个与所述子数据对应的二级列存储空间;
相应地,每个一级子数据的二级列存储空间均用于存储条第一数据;每个二级子数据的二级列存储空间均用于存储条第二数据;以此类推,每个l级子数据的二级列存储空间均用于存储条数据第l数据,每个N-1级子数据的二级列存储空间分别存储1条数据,l=3,4,……,N-2;
相应地,所述步骤3为:将数据对应存储在对应的所述一级列存储空间和所述二级列存储空间。
进一步地,所述第一数据的统计维度单位采用M1进制,所述第二数据的统计维度单位采用M2进制,以此类推,所述第m数据的统计维度单位采用Mm进制。
本发明的有益效果:
本发明提供的一种数据的存放方法,首先通过按照设定的统计维度定义若干个元数据,每个元数据之间在统计维度上相互关联;然后为每个元数据分配列存储空间,将需要进行数据统计的设备的数据按照不同的统计维度存储到对应的列存储空间,从而最终将设备不同维度的累计增量数据存放到一个数据库中的一张表格中。如此,工作人员在需要查询数据时,无需读取不同数据库中的多张表格,只需浏览一张表格即可获取相关信息,降低了数据查询时的逻辑复杂度,提高了查询效率。
附图说明
图1为本发明实施例提供的一种数据的存放方法的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的数据主要为随设定的统计维度进行累计的累计增量型数据。
图1为本发明实施例提供的一种数据的存放方法的流程示意图。如图1所示,该方法包括以下步骤:
S101、按照设定的统计维度n定义元数据,所述元数据包括n级数据Tn,n=1,2,…,N,N为正整数;
S102、为每个维度的所述元数据分配一个对应的一级列存储空间,其中:
所述一级数据T1的一级列存储空间用于存储条第一数据;所述二级数据T2的一级列存储空间用于存储条第二数据,所述第二数据由将第一数据以M1行为单位分为组后的每一组的任一位置数据组成;以此类推,所述m级数据Tm的一级列存储空间用于存储条第m数据,所述第m数据由将第(m-1)数据以Mm-1行为单位分为组后的每一组的任一位置数据组成;所述N级数据TN的一级列存储空间用于存储MN-1条第N数据,所述第N数据为第(N-1)数据中指定位置的数据;其中,m=3,4,…,N-1;M1、M2、…、MN-1均为正整数;
具体地,所述第一数据的统计维度单位采用M1进制,所述第二数据的统计维度单位采用M2进制,以此类推,所述第m数据的统计维度单位采用Mm进制。
S103、将数据按照统计维度存储在对应的所述一级列存储空间。
本发明提供的一种数据的存放方法,首先通过按照设定的统计维度定义若干个元数据,每个元数据之间在统计维度上相互关联;然后为每个元数据分配列存储空间,将需要进行数据统计的设备的数据按照不同的统计维度存储到对应的列存储空间,从而最终将设备不同维度的累计增量数据存放到一个数据库中的一张表格中。如此,工作人员在需要查询数据时,无需读取不同数据库中的多张表格,只需浏览一张表格即可获取相关信息,降低了数据查询时的逻辑复杂度,提高了查询效率。
在上述实施例的基础上,作为一种可实施方式,步骤S102还包括:按照统计维度将前N-1级数据分别分为MN-1个对应的子数据;将所述前N-1级数据的一级列存储空间分别分为MN-1个与所述子数据对应的二级列存储空间;
相应地,每个一级子数据的二级列存储空间均用于存储条第一数据;每个二级子数据的二级列存储空间均用于存储条第二数据;以此类推,每个l级子数据的二级列存储空间均用于存储条数据第l数据,每个N-1级子数据的二级列存储空间分别存储1条数据,l=3,4,……,N-2;
相应地,所述步骤S103为:将数据对应存储在对应的所述一级列存储空间和所述二级列存储空间。在上述实施例的基础上,本发明提供又一种实施例,其具体流程如下:
S201、按照时间统计维度定义元数据,所述元数据包括一级数据T1、二级数据T2、三级数据T3和四级数据T4;
S202、为每个维度的所述元数据分配一个对应的一级列存储空间;
S203、按照时间统计维度将所述一级数据T1、二级数据T2和三级数据T3分别分为P个一级子数据、P个二级子数据和P个三级子数据;
S204、将所述一级数据T1、二级数据T2和三级数据T3的一级列存储空间分别分为P个与所述一级子数据、二级子数据和三级子数据对应的二级列存储空间;
具体地,每个所述一级子数据的二级列存储空间均用于存储M*N条第一数据;每个所述二级子数据的二级列存储空间均用于存储N条第二数据;每个所述三级子数据的二级列存储空间均用于存储第三数据;所述四级数据T4的一级列存储空间用于存储第四数据。
所述第二数据由将第一数据以M行为单位分为N组后的每一组的末条第一数据组成;所述第三数据由末条第二数据组成;所述第四数据为末条第三数据。
S205、将数据对应存储在对应的所述一级列存储空间和所述二级列存储空间,最终形成一个表格。如表2所示。
表2数据的存放表
需要说明的是,本实施例中的M、N和P分别相当于上述实施例中的M1、M2和M3。
本发明所述的数据存放方法,典型的应用实例包括用于智能计量设备或者智能家居设备的数据存放。智能计量设备包括电表、水表、燃气表和热量表等民用表。以智能电表为例,根据本发明提供的数据存放方法,电表实时数据的数据存放方法如下。首先,可先建立索引表和字段表,以供后期进行查询。索引表和字段表分别如表3和表4。
表3索引表
名称 |
类型 |
属性 |
备注 |
主索引 |
id |
unique |
无 |
addr |
equnum |
无 |
无 |
year |
year |
无 |
无 |
表4字段表
结合表2,定义智能电表的数据存放表的元数据:一级数据T1、二级数据T2、三级数据T3和四级数据T4。其中,一级数据T1包括12个一级子数据(h1-h12);二级数据T2包括12个二级子数据(d1-d12);三级数据T3包括12个三级子数据(m1-m12);四级数据T4为y1。初始化M=24,N=31,P=12。
第一数据为以小时为更新单位的智能计量设备的实时数据,例如下述的“1.1”;所述第二数据为以天为更新单位的智能计量设备的实时数据,例如下述的“26.4”;所述第三数据为以月为更新单位的智能计量设备的实时数据,例如下述的“818.4”;所述第四数据为以年为更新单位的智能计量设备的实时数据,例如下述的“89662.4”。
(1)12个小时的列(h1-h12):h1记录1月的所有小时的数据,h2记录2月的所有小时的数据,以此类推,h12记录12月的所有小时的数据。
例如1月1号的小时数据,可利用下述程序进行存储。其中“0”-“23”表示小时;“1.1”表示电表读数。
(2)12个天的列(d1-d12):d1记录1月的所有天的数据,d2记录2月的所有天的数据,以此类推,d12记录12月的所有天的数据。
例如1月的31天数据,可利用下述程序进行存储。其中“01”-“31”表示天;“26.4”表示电表读数。
(3)12个月的列(m1-m12):m1记录1月的所有月的数据,m2记录2月的所有天的数据,以此类推,m12记录12月的所有天的数据。
例如,1月的月数据:818.4。
(4)一个年的列y1:记录一年的总和数据。
例如,1年的总数据量:89662.4。
这样,在统计电量水量等的历史数据时,要查一天24小时的数据,一个月31天的数据,一年12个月的数据,一年的数据就会非常的方便快捷,都可以在一条数据中查询到。一条数据用占用表格中的一行,这样100万行数据可以存储100万个设备一年的数据,具有以下好处:第一、存储次相同的数据使用了更少的存储空间;第二、提高查询性能;第三、不用做分库分表,逻辑简单;第四、减少对数据库的查询次数;第五、查询的数据可以直接展示到页面上,而不用对查询出的数据再做加减操作,节约时间。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。