数据存储、读取方法、装置及其设备转让专利

申请号 : CN201710682288.9

文献号 : CN107391744B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈勇

申请人 : 东软集团股份有限公司

摘要 :

本发明提出一种数据存储、读取方法、装置及其设备,其中,数据存储方法包括:对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值;根据各监控资源之间的父子关系,对各监控资源对应监控指标的采集值进行整合,得到单条设备的记录;将记录存储到数据模型的指标监控数据表中。由此,通过在采集监控数据后根据各监控资源之间的父子关系对各监控资源对应监控指标的采集值进行整合处理存储,从而大大降低了数据库部署成本和难度、节省了存储空间、提高了数据存储效率。

权利要求 :

1.一种数据存储方法,其特征在于,包括以下步骤:

对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值;其中,根据不同的设备或者是不同的应用场景选取不同的方式采集所述监控数据,不同的监控资源获得的监控数据不同;

根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合,得到单条所述设备的记录;

将所述记录存储到数据模型的指标监控数据表中;

其中,所述将所述记录存储到数据模型的指标监控数据表中,包括:根据所述记录生成的时间,将所述记录存储在所述指标监控数据表的对应分区;

所述记录还包括:所述记录所存储分区的分区标识,所述记录所涉及的父资源的标识,和所述记录所涉及的父资源的资源类型中的至少一个。

2.根据权利要求1所述的数据存储方法,其特征在于,所述根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合,包括:若所述监控资源为父资源,根据所述父资源的标识生成资源字段,并根据所述父资源对应监控指标的采集值,生成数值字段;

若所述监控资源为子资源,根据所述子资源的标识,以及所述子资源对应监控指标的采集值,生成孩子字段;

根据所述资源字段、数值字段和孩子字段,生成所述设备的记录。

3.根据权利要求2所述的数据存储方法,其特征在于,所述监控数据表基于Postqresql框架,所述根据所述资源字段、数值字段和孩子字段,生成所述设备的记录,包括:循环遍历所述孩子字段中的各子资源,以及所述资源字段和所述数值字段,以进行格式转换得到符合JSON结构的字符串;其中,所述符合JSON结构的字符串,用于指示各监控资源之间的父子关系,以及各监控资源的对应监控指标的采集值;

根据所述符合JSON结构的字符串,生成所述设备的记录的度量数据字段。

4.根据权利要求3所述的数据存储方法,其特征在于,所述循环遍历所述孩子字段中的各子资源,以及所述资源字段和所述数值字段,以进行格式转换得到符合JSON结构的字符串之前,还包括:根据数字序号与监控指标的字符标识之间对应关系,将所述数值字段和/或孩子字段中,各监控指标的字符标识转换为对应的数字序号。

5.一种数据读取方法,其特征在于,包括以下步骤:

读取数据模型的指标监控数据表,以得到设备的记录;其中,所述记录是对所述设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值之后,根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合得到的单条记录;其中,根据不同的设备或者是不同的应用场景选取不同的方式采集所述监控数据,不同的监控资源获得的监控数据不同;

对所述设备的记录解析得到所述设备内的各监控资源对应监控指标的采集值,以及各监控资源之间的父子关系;

其中,所述读取数据模型的指标监控数据表,以得到设备的记录,包括:根据所述设备的记录生成时间,确定在所述指标监控数据表中所需读取的分区;

查询所述分区对应的索引,以得到所述设备的记录。

6.根据权利要求5所述的数据读取方法,其特征在于,所述对所述设备的记录解析,包括:读取所述记录的度量数据字段,以得到所涉及的各监控资源对应监控指标的采集值;

根据所述度量数据字段所涉及的监控资源,查询所述数据模型中的资源关系表,以确定所述度量数据字段所涉及的各监控资源之间的父子关系。

7.根据权利要求6所述的数据读取方法,其特征在于,所述读取所述记录的度量数据字段,以得到所涉及的各监控资源对应监控指标的采集值之后,还包括:查询所述数据模型中的指标序号映射表,以确定数字序号与监控指标的字符标识之间对应关系;

根据数字序号与监控指标的字符标识之间对应关系,将所涉及的各监控资源的数字序号转换为对应监控指标的字符标识。

8.一种数据存储装置,其特征在于,包括:

采集模块,用于对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值;其中,根据不同的设备或者是不同的应用场景选取不同的方式采集所述监控数据,不同的监控资源获得的监控数据不同;

处理模块,用于根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合,得到单条所述设备的记录;

存储模块,用于将所述记录存储到数据模型的指标监控数据表中;

其中,存储模块,具体用于:根据所述记录生成的时间,将所述记录存储在所述指标监控数据表的对应分区;

所述记录还包括:所述记录所存储分区的分区标识,所述记录所涉及的父资源的标识,和所述记录所涉及的父资源的资源类型中的至少一个。

9.一种数据读取装置,其特征在于,包括:

读取模块,用于读取数据模型的指标监控数据表,以得到设备的记录;其中,所述记录是对所述设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值之后,根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合得到的单条记录;其中,根据不同的设备或者是不同的应用场景选取不同的方式采集所述监控数据,不同的监控资源获得的监控数据不同;

解析模块,用于对所述设备的记录解析得到所述设备内的各监控资源对应监控指标的采集值,以及各监控资源之间的父子关系;

其中,所述读取模块,具体用于:根据所述设备的记录生成时间,确定在所述指标监控数据表中所需读取的分区;查询所述分区对应的索引,以得到所述设备的记录。

10.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现如权利要求1-4中任一所述的数据存储方法,和/或,实现如权利要求5-7中任一所述的数据读取方法。

11.一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-4中任一所述的数据存储方法,和/或,实现如权利要求

5-7中任一所述的数据读取方法。

说明书 :

数据存储、读取方法、装置及其设备

技术领域

[0001] 本发明涉及数据处理技术领域,尤其涉及一种数据存储、读取方法、装置及其设备。

背景技术

[0002] 目前,有很多种数据库方案可以选择以进行数据存储,比如库集群部署、负载均衡、Nosql数据库、时序数据库、大数据方案等等。
[0003] 然而,上述方案往往部署成本高、难度大,以及存储效率低。举例而言,MySQL加Hbase的数据库方案,HBase实施难度高,部署需要比较多主机,成本高,不稳定、且一台宕机后性能影响较高,以及MySQL在海量数据时性能急剧下降,需要部署集群、成本较大,且属于GPL协议。

发明内容

[0004] 本发明的目的旨在至少在一定程度上解决相关技术中的技术问题之一。
[0005] 为此,本发明的第一个目的在于提出一种数据存储方法,用于解决现有技术中数据库方案部署成本高、难度大,以及存储效率低等问题。
[0006] 本发明的第二个目的在于提出一种数据读取方法。
[0007] 本发明的第三个目的在于提出一种数据存储装置。
[0008] 本发明的第四个目的在于提出一种数据读取装置。
[0009] 本发明的第五个目的在于提出一种计算机设备。
[0010] 本发明的第六个目的在于提出一种非临时性计算机可读存储介质。
[0011] 本发明的第七个目的在于提出一种计算机程序产品。
[0012] 为达上述目的,本发明第一方面实施例提出了一种数据存储方法,包括:对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值;根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合,得到单条所述设备的记录;将所述记录存储到数据模型的指标监控数据表中。
[0013] 本发明实施例的数据存储方法,通过对设备内的多个监控资源进行监控数据采集得到各监控资源对应监控指标的采集值,并根据各监控资源之间的父子关系对各监控资源对应监控指标的采集值进行整,得到单条设备的记录,最后将记录存储到数据模型的指标监控数据表中,从而大大降低了数据库部署成本和难度、节省了存储空间、提高了数据存储效率。
[0014] 另外,根据本发明上述实施例的数据存储方法还可以具有如下附加的技术特征:
[0015] 可选地,所述根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合,包括:若所述监控资源为父资源,根据所述父资源的标识生成资源字段,并根据所述父资源对应监控指标的采集值,生成数值字段;若所述监控资源为子资源,根据所述子资源的标识,以及所述子资源对应监控指标的采集值,生成孩子字段;根据所述资源字段、数值字段和孩子字段,生成所述设备的记录。
[0016] 可选地,所述监控数据表基于Postqresql框架,所述根据所述资源字段、数值字段和孩子字段,生成所述设备的记录,包括:循环遍历所述孩子字段中的各子资源,以及所述资源字段和所述数值字段,以进行格式转换得到符合JSON结构的字符串;其中,所述符合JSON结构的字符串,用于指示各监控资源之间的父子关系,以及各监控资源的对应监控指标的采集值;根据所述符合JSON结构的字符串,生成所述设备的记录的度量数据字段。
[0017] 可选地,所述循环遍历所述孩子字段中的各子资源,以及所述资源字段和所述数值字段,以进行格式转换得到符合JSON结构的字符串之前,还包括:根据数字序号与监控指标的字符标识之间对应关系,将所述数值字段和/或孩子字段中,各监控指标的字符标识转换为对应的数字序号。
[0018] 可选地,所述将所述记录存储到数据模型的指标监控数据表中,包括:根据所述记录生成的时间,将所述记录存储在所述指标监控数据表的对应分区。
[0019] 可选地,所述记录还包括:所述记录所存储分区的分区标识,所述记录所涉及的父资源的标识,和所述记录所涉及的父资源的资源类型中的至少一个。
[0020] 为达上述目的,本发明第二方面实施例提出了一种数据读取方法,包括:读取数据模型的指标监控数据表,以得到设备的记录;其中,所述记录是对所述设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值之后,根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合得到的单条记录;对所述设备的记录解析得到所述设备内的各监控资源对应监控指标的采集值,以及各监控资源之间的父子关系。
[0021] 本发明实施例的数据读取方法,通过读取数据模型的指标监控数据表以得到设备的记录,并对设备的记录解析得到设备内的各监控资源对应监控指标的采集值以及各监控资源之间的父子关系,从而大大降低了数据库部署成本和难度、提高了数据读取效率。
[0022] 另外,根据本发明上述实施例的数据读取方法还可以具有如下附加的技术特征:
[0023] 可选地,所述读取数据模型的指标监控数据表,以得到设备的记录,包括:根据所述设备的记录生成时间,确定在所述指标监控数据表中所需读取的分区;查询所述分区对应的索引,以得到所述设备的记录。
[0024] 可选地,所述对所述设备的记录解析,包括:读取所述记录的度量数据字段,以得到所涉及的各监控资源对应监控指标的采集值;根据所述度量数据字段所涉及的监控资源,查询所述数据模型中的资源关系表,以确定所述度量数据字段所涉及的各监控资源之间的父子关系。
[0025] 可选地,所述读取所述记录的度量数据字段,以得到所涉及的各监控资源对应监控指标的采集值之后,还包括:查询所述数据模型中的指标序号映射表,以确定数字序号与监控指标的字符标识之间对应关系;根据数字序号与监控指标的字符标识之间对应关系,将所涉及的各监控资源的数字序号转换为对应监控指标的字符标识。
[0026] 为达上述目的,本发明第三方面实施例提出了一种数据存储装置,包括:采集模块,用于对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值;处理模块,用于根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合,得到单条所述设备的记录;存储模块,用于将所述记录存储到数据模型的指标监控数据表中。
[0027] 本发明实施例的数据存储装置,通过对设备内的多个监控资源进行监控数据采集得到各监控资源对应监控指标的采集值,并根据各监控资源之间的父子关系对各监控资源对应监控指标的采集值进行整,得到单条设备的记录,最后将记录存储到数据模型的指标监控数据表中,从而大大降低了数据库部署成本和难度、节省了存储空间、提高了数据存储效率。
[0028] 为了实现上述目的,本发明第四方面实施例提出了一种数据读取装置,包括:读取模块,用于读取数据模型的指标监控数据表,以得到设备的记录;其中,所述记录是对所述设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值之后,根据各监控资源之间的父子关系,对所述各监控资源对应监控指标的采集值进行整合得到的单条记录;解析模块,用于对所述设备的记录解析得到所述设备内的各监控资源对应监控指标的采集值,以及各监控资源之间的父子关系。
[0029] 本发明实施例的数据读取装置,通过读取数据模型的指标监控数据表以得到设备的记录,并对设备的记录解析得到设备内的各监控资源对应监控指标的采集值以及各监控资源之间的父子关系,从而大大降低了数据库部署成本和难度、提高了数据读取效率。
[0030] 为了实现上述目的,本发明第五方面实施例提出了一种计算机设备,包括:包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现如第一方面实施例所述的数据存储方法,和/或,实现第二方面实施例所述的数据读取方法。
[0031] 为了实现上述目的,本发明第六方面实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现第一方面实施例所述的数据存储方法,和/或,实现第二方面实施例所述的数据读取方法。
[0032] 为了实现上述目的,本发明第七方面实施例提出了一种计算机程序产品,当所述计算机程序产品中的指令由处理器执行时,执行第一方面实施例所述的数据存储方法,和/或,执行第二方面实施例所述的数据读取方法。
[0033] 本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。

附图说明

[0034] 本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
[0035] 图1为根据本发明一个实施例的数据存储方法的流程示意图;
[0036] 图2为根据本发明另一个实施例的数据存储方法的流程示意图;
[0037] 图3为根据本发明一个实施例的各监控指标的字符标识转换为对应的数字序号的示意图;
[0038] 图4为根据本发明一个实施例的监控数据表的结构示意图;
[0039] 图5为根据本发明一个实施例的数据读取方法的流程示意图;
[0040] 图6为根据本发明一个实施例的数据模型的结构示意图;
[0041] 图7为根据本发明一个实施例的数据存储装置的结构示意图;
[0042] 图8为根据本发明一个实施例的数据读取装置的结构示意图;以及
[0043] 图9为根据本发明一个实施例的计算机设备的结构示意图。

具体实施方式

[0044] 下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
[0045] 下面参考附图描述本发明实施例的数据存储、读取方法、装置及其设备。
[0046] 目前,用户对于数据存储的要求越来越高,比如要求数据库在节省存储空间的同时提高存储效率等等。数据存储的场景也越来越复杂,比如单数据中心4000台服务器规模,指标最小存储周期5分钟、数据量在一天百万级左右、以及数据特点是资源间有天然的包含关系,也有业务上的关联,多种关系并存等等。
[0047] 现有技术中的大多方案部署成本高、难度大,以及存储效率低。作为一种示例,MySQL加Hbase的数据库方案,HBase实施难度高,部署需要比较多主机,成本高,不稳定、以及MySQL在海量数据时性能急剧下降,需要部署集群、成本较大。不能够满足部署简单成本低、存取效率高、数据占用空间小、原始监控数据保存周期在三个月以上等需求。
[0048] 为了解决上述问题,本发明提出一种数据存储方法,通过在采集监控数据后根据各监控资源之间的父子关系对各监控资源对应监控指标的采集值进行整合处理存储,从而大大降低了数据库部署成本和难度、节省了存储空间、提高了数据存储效率。具体描述如下:
[0049] 图1为根据本发明一个实施例的数据存储方法的流程示意图。如图1所示,该数据存储方法包括以下步骤:
[0050] 步骤101,对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值。
[0051] 在实际应用中,可以对设备(比如服务器等)内的多个监控资源(比如设备的操作系统、磁盘、网卡、进程等等)进行监控数据采集。
[0052] 其中,可以根据不同的设备或者是不同的应用场景选取不同的方式采集监控数据。举例而言,通过服务器操作系统的插件采集器HostCollector类获取服务器各监控资源对应监控指标的采集值。
[0053] 可以理解的是,不同的监控资源获得的监控数据不同,举例说明如下:
[0054] 第一种示例,对服务器的操作系统进行监控数据采集,可以得到CPU(CentralProcessing Unit,中央处理器)使用率、内存使用率、负载情况、整体的网络流量等。
[0055] 第二种示例,对磁盘、网卡和进程进行监控数据采集,可以得到每个磁盘分区的容量使用率、每个网卡的流量、每个进程的状态和占用资源情况等。
[0056] 需要说明的是,各监控资源具有对应监控指标的采集值,作为一种示例监控资源与监控指标的采集值是键值映射关系,也就是一个监控资源可以对应有多个监控指标的采集值,比如一个服务器内所有的监控资源加起来估计会有10到30个、每个监控资源对应监控指标的采集值大概有5-10个。
[0057] 步骤102,根据各监控资源之间的父子关系,对各监控资源对应监控指标的采集值进行整合,得到单条设备的记录。
[0058] 具体地,各监控资源之间有父子关系,也就是说可以把某种监控资源当做父资源,另外一种或者多种资源当做子资源。作为一种示例,某信息港数据中心下有3000台服务器,需要对其服务器上的所有带内操作系统进行监控,而系统本身又包括:磁盘分区、网卡、进程等物理上具有包含关系的子资源。可以把服务器的操作系统当做父资源,而磁盘、网卡、进程这些就是操作系统下的子资源。
[0059] 可以理解的是,可以采用很多种方式利用各监控资源之间的父子关系,对各监控资源对应监控指标的采集值进行整合,得到单条设备的记录。作为一种示例,在监控资源为父资源时根据父资源的标识生成资源字段,并根据父资源对应监控指标的采集值生成数值字段,在监控资源为子资源时根据子资源的标识以及子资源对应监控指标的采集值生成孩子字段,最后根据资源字段、数值字段和孩子字段,生成设备的记录。
[0060] 可以理解的是,上述例子中,通过服务器操作系统的插件采集器HostCollector类获取服务器各监控资源对应监控指标的采集值,比如采集完成后返回一个Map>集合,其中字段值包括服务器本身的父资源以及其所属的磁盘、网卡、进程等一系列子资源。
[0061] 步骤103,将记录存储到数据模型的指标监控数据表中。
[0062] 具体地,可以一次或者多次将记录存储到数据模型的指标监控数据表中,为了提高数据存储效率,优选对一次性采集回来的记录存储到数据模型的指标监控数据表中。
[0063] 可以理解的是,现有技术中是一个资源一条数据记录,一个服务器的操作系统监控资源就会有10-30条记录,所以3000台操作系统一次采集就是3w-9w条记录,采集周期是5分钟的话,一天就是864w到2592w记录甚至更多(如果子资源很多的情况),这样大的数据量如果长期运行后存取效率都不会太高,空间占用也会很大。通过本发明可以把这些数据整合成一条数据,每次采集只存一条记录,一天下来就是最多86w的数据量,提高存储效率。
[0064] 可以理解的是,有很多种方式将记录存储到数据模型的指标监控数据表中。作为一种示例,根据记录生成的时间,将记录存储在指标监控数据表的对应分区。也就是说按照时间把记录放到同一分区下,这样可以保证一定时间段内的记录可以不跨区的查询,满足了用户最大时间长度的查询范围需求。也就是说,避免单个指标监控数据表数据量过大,将数据分散到不同分区表中,某个分区内查找的性能要远高于全表查询。
[0065] 综上所述,本发明实施例的数据存储方法,通过对设备内的多个监控资源进行监控数据采集得到各监控资源对应监控指标的采集值,并根据各监控资源之间的父子关系对各监控资源对应监控指标的采集值进行整,得到单条设备的记录,最后将记录存储到数据模型的指标监控数据表中,从而大大降低了数据库部署成本和难度、节省了存储空间、提高了数据存储效率。
[0066] 图2为根据本发明另一个实施例的数据存储方法的流程示意图。如图2所示,该数据存储方法包括以下步骤:
[0067] 步骤201,对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值。
[0068] 需要说明的是,步骤S201的描述与上述步骤S101相对应,因此对的步骤S201的描述参考上述步骤S101的描述,在此不再赘述。
[0069] 步骤202,若监控资源为父资源,根据父资源的标识生成资源字段,并根据父资源对应监控指标的采集值,生成数值字段。
[0070] 步骤203,若监控资源为子资源,根据子资源的标识,以及子资源对应监控指标的采集值,生成孩子字段。
[0071] 步骤204,根据资源字段、数值字段和孩子字段,生成设备的记录。
[0072] 具体地,每一个监控资源都有对应的标识、以及监控资源名称等资源属性等。在监控资源为父资源时,根据父资源的标识生成资源字段以及父资源对应监控指标的采集值生成数值字段;在监控资源为子资源时,根据子资源的标识和子资源对应监控指标的采集值生成孩子字段。
[0073] 进一步地,可以采用很多种方式根据资源字段、数值字段和孩子字段,生成设备的记录,以及监控数据表可以基于一种或者多种框架,下面以监控数据表基于Postqresql框架,如何根据资源字段、数值字段和孩子字段,生成设备的记录进行具体描述:
[0074] 需要说明的是,关系型数据库PostgreSQL可以支持JSON结构数据存储与读取的特性,在采集大量设备内的监控数据后,优化收集到的监控数据模型、关联关系、存储顺序,通过低成本部署、低存储空间占用、高效率存取等特性轻松实现了在关系型数据库上每天存储百万级监控数据。由此,可以提高软件开发的效率,为复杂大数据场景下的时序数据存储提供了一个优良的解决方案。
[0075] 其中,PostgreSQL属于BSD协议,完全免费,可以节约成本、还具备非关系数据库的特性,增加了JSON和JSONB数据类型,可以通过模型与关系的构建与设计,大幅度降低数据表的记录数与所占磁盘空间、以及做集群的工具比较成熟,而MySQL的集群工具MySQLCluster不具实用性。
[0076] 具体地,循环遍历孩子字段中的各子资源,以及资源字段和数值字段,以进行格式转换得到符合JSON结构的字符串。其中,符合JSON结构的字符串,用于指示各监控资源之间的父子关系,以及各监控资源的对应监控指标的采集值,最后根据符合JSON结构的字符串,生成设备的记录的度量数据字段。
[0077] 由此,减少指标监控数据表中的记录数量,一个设备资源及其所属资源的全部监控数据只存一条记录中,资源与所属资源间的关系也整合到JSON的数据模型中,同时所属资源的监控数据也在其中。
[0078] 需要说明的是,在循环遍历孩子字段中的各子资源,以及资源字段和数值字段,以进行格式转换得到符合JSON结构的字符串之前,可以根据数字序号与监控指标的字符标识之间对应关系,将数值字段和/或孩子字段中,各监控指标的字符标识转换为对应的数字序号。
[0079] 可以理解的是,为了减少单条记录的占用空间,监控数据主要存储的是具体监控指标和对应的采集值,其中,监控指标如果以字符标识的方式存储,字符过多会造成占用空间浪费。可以通过一张表记录字符标识与数字序号的对应关系,而存储的监控数据中便是数字序号和采集值的对应关系,具体如图3所示,将各监控指标的字符标识转换为对应的数字序号。
[0080] 步骤205,根据记录生成的时间,将记录存储在指标监控数据表的对应分区。
[0081] 具体地,根据记录生成的时间,将记录存储在指标监控数据表中不同的分区。作为一种示例,把历史7天的记录放到同一分区下,可以保证7天内的记录可以不跨区的查询,满足了用户最大时间长度的查询范围需求。
[0082] 可以理解的是,记录还可以包括记录所存储分区的分区标识,记录所涉及的父资源的标识,和记录所涉及的父资源的资源类型中的至少一个。也就是说,根据记录中的分区标识能够快速查询到其存储的分区,以及根据记录中的父资源的标识、子资源标识等能够快速查询到其对应的父资源、子资源。进一步提升了存储效率和速度。
[0083] 作为一种场景实现,基于Postqresql框架生成的设备记录进行存储,只需要安装Postqresql数据库,可以实现产品自动化部署,完全可以交由用户自己使用,存取性能高,比如在已有百万级记录的情况下,一次性插入4000条记录大概2秒钟,时间段查询1000条记录的时间小于100毫秒。
[0084] 综上所述,本发明实施例的数据存储方法,通过对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值,在监控资源为父资源,根据父资源的标识生成资源字段,并根据父资源对应监控指标的采集值,生成数值字段,在监控资源为子资源时根据子资源的标识以及子资源对应监控指标的采集值,生成孩子字段,并根据资源字段、数值字段和孩子字段生成设备的记录,最后根据记录生成的时间,将记录存储在指标监控数据表的对应分区,从而大大降低了数据库部署成本和难度、节省了存储空间、提高了数据存储效率。
[0085] 为了本领域人员更加清楚上述过程,下面以具体场景进行举例说明:原始采集的监控数据模型Map>,包括所有的父子资源及对应的指标的 采 集数 据 ,接 着遍 历后 整 合有 关 系的父 子 资源 ,形 成 一条 数 据PersistanceMetricData,对象中的childrenValues(孩子字段)属性记录着资源的父子关系及采集数据,接着将父子资源的采集数据中监控指标的字符标识转换成数字序号(比如通过服务启动时加载的缓存measurementCache进行替换),然后利用阿里巴巴的FastJson把资源标识与采集数据形成JSON数据也就是把所有资源标识、替换后的数字序号与采集值组装成有层级关系的JSON数据,最后通过Disruptor并发框架和PostgreSQL9.3+支持存储JSON格式数据的特性进行高效快速的大批量资源监控数据存储入库,为保证数据读取效率,采用分区表,保证一定时间段内比如7天内数据查询不跨区。
[0086] 更具体地,可以通过convert方法针对原始的Map集合进行数据整合处理,返回一个PersistanceMetricData用来存储监控数据的,该模型中有以下几个字段:resourceId(String),记录着父资源的标识;json(String),是用来记录资源与采集值、父资源和子资源对应关系的结构数据;childrenValues(Map),记录着父资源下所有的子资源对应的存储对象的;values(Map),记录着指标与指标采集值的对应关系,最开始指标是从指标定义表acl_measurement中的英文名称获取的。
[0087] 进一步地,结合资源关系表资源关系表acl_inventory_res_relation中的资源间上下级或者说从属关系,对应设置到PersistanceMetricData模型中的不同属性中。
[0088] 具体地,如果是父资源,则设置到resourceId(资源字段)上,对应的values(数值字段)则设置父资源的指标和采集值;如果是子资源,则形成一个新的PersistanceMetricData对象,作为一个子资源的存储数据模型,相关指标数据也设置到相关属性上,若干个子资源则都加入到childrenValues(孩子字段)中去。
[0089] 需要说明的是,在转换的期间,通过convertMetricName方法,结合服务启动时加载到缓存中的measurementCache,以values(数值字段)中的key(指标的字符标识)作为cache的key,从中获取对应的数字序号,而这个measurementCache则是通过指标序号映射表acl_measurement_index中的数字序号与字符标识的映射关系写入到内存中的。
[0090] 进一步地,在做数据库的持续化操作之前,把父资源本身的values(数值字段)以及循环遍历childrenValues(孩子字段)中所有子资源对应的所有逻辑数据,通过阿里巴巴的FastJson工具包的模型格式要求,返回一个JSON结构的String字符串(符合JSON结构的字符串),设置到PersistanceMetricData模型的json属性上。这个属性也是最终这个服务器操作系统资源下所有从属资源对应监控指标及其采集值的一个统一集合。
[0091] 进一步地,对一次性采集回来的所有资源数据PersistanceMetricData进行数据库的持久化保存到监控数据表acl_measurement_historydata中(如图4所示),利用disruptor并发框架实现并发批量无琐的入库操作,提升存储效率和速度。
[0092] 需要说明的是,同时利用分区表的方式,把一定时间段内的数据放到同一分区下,这样可以保证一定时间段内的原始数据可以不跨区的查询,满足了用户最大时间长度的查询范围需求。
[0093] 需要说明的是,PostgreSQL数据库本身支持JSON格式的数据进行存储,而且相关特性使用场景很多,性能也得到了很好地测试和验证。由此,采集一个服务器操作系统资源,所有的相关数据都整合成一条对象数据,无论从持久化层面的存储还是SQL层面的查询,都很方便快速。针对每天24小时不间断采集入库,这种设计和实现方式大大提升了时序数据的存取效率,利用普通关系型数据也可以实现诸如此类的应用场景,是值得推广和复用的。
[0094] 为了本领域人员更加直观清楚了解本发明的效率,以时间段查询1000条记录的时间小于100毫秒,一次插入4000条数据的时间(单位:毫秒),测试4次。具体地的测试结果如下表所示:
[0095]
[0096] 由此,大大降低了数据库部署成本和难度、节省了存储空间、提高了数据存储效率。
[0097] 图5为根据本发明一个实施例的数据读取方法的流程示意图。如图5所示,该数据读取方法包括以下步骤:
[0098] 步骤301,读取数据模型的指标监控数据表,以得到设备的记录;其中,记录是对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值之后,根据各监控资源之间的父子关系,对各监控资源对应监控指标的采集值进行整合得到的单条记录。
[0099] 具体地,在数据存储时保存相关设备的记录,具体如何生产该记录可以参见本发明第一方面实施例所述的数据存储方法。为了本领域人员更加清楚数据模型的具体结构,下面结合图4具体描述如下:
[0100] 图6为根据本发明一个实施例的数据模型的结构示意图。如图6所示,该数据模型包括资源主表、资源关系表、指标定义表、指标序号映射表和指标监控数据表。
[0101] 其中,资源主表包括每个资源的资源标识、资源名称等一系列资源属性;资源关系表包括资源标识、与其有关联关系的资源标识和资源关系类型,如:包含、从属等;指标定义表包括:指标名和资源类型;指标序号映射表包括指标名与序号对应关系和资源类型;指标监控数据表包括父资源标识、资源类型、分区标识,保证一定时间内比如7天内监控数据查询时不跨区和JSON格式的监控数据,包括父子资源及对应转换后的数字序号与采集值。
[0102] 具体地,可以采用很多种方式读取数据模型的指标监控数据表以得到设备的记录,作为一种示例,根据设备的记录生成时间,确定在指标监控数据表中所需读取的分区,查询分区对应的索引,以得到设备的记录。
[0103] 其中,避免整个指标监控数据表的索引过大,因此可以每个分区表都有自己的索引,提高指标监控数据表的更新和插入速度。
[0104] 步骤302,对设备的记录解析得到设备内的各监控资源对应监控指标的采集值,以及各监控资源之间的父子关系。
[0105] 可以理解的是,设备的记录包括很多信息,需要通过对设备的记录解析得到设备内的各监控资源对应监控指标的采集值,以及各监控资源之间的父子关系等信息。
[0106] 作为一种示例,读取记录的度量数据字段,以得到所涉及的各监控资源对应监控指标的采集值,根据度量数据字段所涉及的监控资源,查询数据模型中的资源关系表,以确定度量数据字段所涉及的各监控资源之间的父子关系。
[0107] 其中,需要说明的是,在读取所述记录的度量数据字段以得到所涉及的各监控资源对应监控指标的采集值之后,还可以查询数据模型中的指标序号映射表,以确定数字序号与监控指标的字符标识之间对应关系,根据数字序号与监控指标的字符标识之间对应关系,将所涉及的各监控资源的数字序号转换为对应监控指标的字符标识。
[0108] 综上所述,本发明实施例的数据读取方法,通过读取数据模型的指标监控数据表以得到设备的记录,并对设备的记录解析得到设备内的各监控资源对应监控指标的采集值以及各监控资源之间的父子关系,从而大大降低了数据库部署成本和难度、提高了数据读取效率,也就是数据查询简单快速,可以方便的查看资源与资源、资源与监控数据的关系、原始监控数据在某时间范围内的快速查询。
[0109] 与上述几种实施例提供的数据存储方法相对应,本发明的一种实施例还提供一种数据存储装置,由于本发明实施例提供的数据存储装置与上述几种实施例提供的数据存储方法相对应,因此在前述数据存储方法的实施方式也适用于本实施例提供的数据存储装置,在本实施例中不再详细描述。
[0110] 图7为根据本发明一个实施例的数据存储装置的结构示意图。如图7所示,该数据存储装置包括:采集模块11、处理模块12和存储模块13。
[0111] 采集模块11,用于对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值。
[0112] 处理模块12,用于根据各监控资源之间的父子关系,对各监控资源对应监控指标的采集值进行整合,得到单条设备的记录。
[0113] 存储模块13,用于将记录存储到数据模型的指标监控数据表中。
[0114] 综上所述,本发明实施例的数据存储装置,通过对设备内的多个监控资源进行监控数据采集得到各监控资源对应监控指标的采集值,并根据各监控资源之间的父子关系对各监控资源对应监控指标的采集值进行整,得到单条设备的记录,最后将记录存储到数据模型的指标监控数据表中,从而大大降低了数据库部署成本和难度、节省了存储空间、提高了数据存储效率。
[0115] 与上述几种实施例提供的数据读取方法相对应,本发明的一种实施例还提供一种数据读取装置,由于本发明实施例提供的数据读取装置与上述几种实施例提供的数据读取方法相对应,因此在前述数据读取方法的实施方式也适用于本实施例提供的数据读取装置,在本实施例中不再详细描述。
[0116] 图8为根据本发明一个实施例的数据读取装置的结构示意图。如图8所示,该数据读取装置包括:读取模块21和解析模块22。
[0117] 其中,读取模块21,用于读取数据模型的指标监控数据表,以得到设备的记录;其中,记录是对设备内的多个监控资源进行监控数据采集,得到各监控资源对应监控指标的采集值之后,根据各监控资源之间的父子关系,对各监控资源对应监控指标的采集值进行整合得到的单条记录。
[0118] 解析模块22,用于对设备的记录解析得到设备内的各监控资源对应监控指标的采集值,以及各监控资源之间的父子关系。
[0119] 综上所述,本发明实施例的数据读取装置,通过读取数据模型的指标监控数据表以得到设备的记录,并对设备的记录解析得到设备内的各监控资源对应监控指标的采集值以及各监控资源之间的父子关系,从而大大降低了数据库部署成本和难度、提高了数据读取效率。
[0120] 为了实现上述实施例,本发明还提出一种计算机设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现如上述实施例所述的数据存储方法,和/或,实现上述实施例所述的数据读取方法。
[0121] 为了实现上述实施例,本发明还提出一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述实施例所述的数据存储方法,和/或,实现上述实施例所述的数据读取方法。
[0122] 为了实现上述实施例,本发明还提出一种计算机程序产品,当所述计算机程序产品中的指令处理器执行时,执行上述实施例所述的数据存储方法,和/或,执行上述实施例所述的数据读取方法。
[0123] 图9示出了适于用来实现本申请实施方式的示例性计算机设备的框图。图9显示的计算机设备12仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
[0124] 如图9所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
[0125] 总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry  Standard Architecture;以下简称:ISA)总线,微通道体系结构(Micro Channel Architecture;以下简称:MAC)总线,增强型ISA总线、视频电子标准协会(Video Electronics Standards Association;以下简称:VESA)局域总线以及外围组件互连(Peripheral Component Interconnection;以下简称:PCI)总线。
[0126] 计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
[0127] 存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(Random Access Memory;以下简称:RAM)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图9未显示,通常称为“硬盘驱动器”)。尽管图9中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如:光盘只读存储器(Compact Disc ReadOnly Memory;以下简称:CD-ROM)、数字多功能只读光盘(Digital Video Disc  Read OnlyMemory;以下简称:DVD-ROM)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本申请各实施例的功能。
[0128] 具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本申请所描述的实施例中的功能和/或方法。
[0129] 计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(Local AreaNetwork;以下简称:LAN),广域网(Wide Area Network;以下简称:WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
[0130] 处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现前述实施例中提及的数据存储方法,和/或,数据读取方法。
[0131] 在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
[0132] 此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
[0133] 流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
[0134] 在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
[0135] 应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
[0136] 本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
[0137] 此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
[0138] 上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。