一种实时数据库的存储方法

文档序号:6640727阅读:269来源:国知局
一种实时数据库的存储方法
【专利摘要】本发明公开了一种实时数据库的存储方法。该方法包括:当写入历史数据和历史报警数据时,分别将历史数据和历史报警数据写入对应的内存表和操作日志缓冲区;当当前的内存表满时,将当前的内存表中的历史数据或历史报警数据经压缩后分别写入到分钟级文件中,申请一个新的内存表作为当前的内存表;合并线程定时进行检查,在每天的预设时间将多个分钟级历史数据文件、历史报警数据分别合并为日级历史数据文件、历史报警数据文件;在每月的预设时间将多个日级文件分别合并为月级文件;在每年的预设时间将多个月级文件分别合并为年级文件。通过上述方法,可以同时在实时数据库中存储和访问历史数据和历史报警数据,提高对历史报警数据的存储和访问速度。
【专利说明】一种实时数据库的存储方法

【技术领域】
[0001]本发明涉及实时数据库技术,特别涉及一种实时数据库的存储方法。

【背景技术】
[0002]目前,在很多领域中一般使用关系数据库存贮历史数据。然而,在很多高频采样、海量数据的应用场景(例如,轨道交通综合监控)下,关系数据库在读写性能和存贮容量上都遇到了瓶颈,难以满足综合监控系统对历史数据处理的需求。以轨道交通综合监控领域为例,报表统计、事故反演、培训仿真等操作都需要处理海量的历史运营数据,因此,综合监控系统对历史数据处理的要求也越来越高,关系数据库也越来越难以满足上述的要求。
[0003]为了解决上述的问题,在现有技术中开始使用实时数据库系统对系统的历史数据进行相应的处理。实时数据库系统是开发工业监控系统、数据采集系统等的支撑系统,能够解决行业内历史数据处理的性能和容量瓶颈,因此在流程行业中大量使用了实时数据库系统。
[0004]时序数据库,全称为时间序列数据库,是实时数据库的另一种名称。在本发明中,时序数据库与实时数据库所指的对象完全一样。主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。
[0005]时间序列数据主要由轨道交通行业、电力行业、化工行业等各类型实时监测、检查与分析设备所采集、产生的数据,这些工业数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应唯一的时间)、测点多信息量大(常规的实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。由上可知,基于时间序列数据的特点,关系型数据库无法满足对时间序列数据的有效存储与处理,必须使用实时数据库对上述的时间序列历史数据进行存储和处理。
[0006]时间序列历史数据,如工业监控领域的模拟量历史数据,一般是由如下四元组构成:测点ID、时间戳、质量戳、值。实时数据库的历史数据中可以存贮多个测点(数量从1万到1000万)的海量时间序列历史数据。
[0007]另外,实时数据库也可以存储开关量历史数据,但是实时数据库一般只记录开关量历史数据的变化信息,也是采用与模拟量历史数据同样的四元组构成:测点ID、时间戳、质量戳、值,其中值为开关变位信息。
[0008]但是,在实际应用时,使用开关量历史信息并不能完整地表达一条报警信息。例如,一条完整的报警信息一般包含如下内容:报警开始时间、报警类型、报警级别、报警描述、报警消失时间、报警确认时间、报警确认人、报警对应测点、对应设备、所属子系统等等。(以上只是举例说明,实际的系统的报警信息可以采用上述的格式,也可以采用其它的格式)。
[0009]由上可知,历史报警数据的类型比模拟量历史数据和开关量历史数据所采用的四元组结构复杂得多,因此对历史报警数据的查询条件也比模拟量历史数据和开关量历史数据复杂得多。在实际应用中的实时数据库系统中,一般采用关系型数据库来保存和处理历史报警数据,即在系统中混合使用实时数据库和关系数据库,其中,使用实时数据库存贮模拟量历史数据和开关量历史数据,采用关系数据库存贮历史报警数据。
[0010]在轨道交通综合监控这种高频采样、海量数据的应用场景下,历史报警数据的数量也是海量的,因此关系数据库在历史报警数据的读写性能和存贮容量上也都遇到了瓶颈。另外,在轨道交通综合监控系统中,历史报警数据比模拟量历史数据更为重要,如果能提高历史报警数据的存贮和读写性能,并提供与关系数据库相同的查询和使用方式,将极大拓展实时数据库的应用范围。


【发明内容】

[0011]有鉴于此,本发明提供一种实时数据库的存储方法,从而可以同时在实时数据库中存储和访问历史数据和历史报警数据,提高对历史报警数据的存储和访问速度。
[0012]本发明的技术方案具体是这样实现的:
[0013]一种实时数据库的存储方法,该方法包括:
[0014]当写入历史数据和历史报警数据时,分别将所述历史数据和历史报警数据写入对应的内存表和操作日志缓冲区;
[0015]当当前的内存表满时,将当前的内存表中的历史数据或历史报警数据经压缩后分别写入到当前时刻所对应的分钟级历史数据文件或分钟级历史报警数据文件中,申请一个新的内存表,并将所申请的新内存表作为当前的内存表;
[0016]合并线程定时进行检查,在每天的预设时间将多个分钟级历史数据文件和分钟级历史报警数据分别合并为日级历史数据文件和日级历史报警数据文件;在每月的预设时间将多个日级历史数据文件和日级历史报警数据文件分别合并为月级历史数据文件和月级历史报警数据文件;在每年的预设时间将多个月级历史数据文件和月级历史报警数据文件分别合并为年级历史数据文件和年级历史报警数据文件。
[0017]较佳的,所述将所述历史数据写入当前的内存表包括:
[0018]当需要将历史数据或历史报警数据写入到内存表中时,先获取当前内存表中的当前可用位置;
[0019]将所述历史数据或历史报警数据写入到当前内存表中的当前可用位置中;
[0020]当一个历史数据或历史报警数据写入完毕后,确定所述内存表中的下一个可用位置,并将所确认的下一个可用位置作为该内存表的当前的可用位置。
[0021]较佳的,所述写入到内存表中的历史数据的内容至少包括:测点标识、时间戳、质量戳和值;
[0022]所述写入到内存表中的历史报警数据的内容至少包括:报警开始时间、报警类型、报警级别、报警描述、报警消失时间、报警确认时间、报警确认人、报警对应测点、对应设备和所属子系统。
[0023]较佳的,按区域和子系统将所述历史数据保存为相应的历史数据文件;
[0024]按区域和子系统将所述历史报警数据保存为相应的历史报警数据文件。
[0025]较佳的,所述历史数据文件由多个块构成;所述块的类型包括:文件尾块、首索引块、索引块和数据块。
[0026]较佳的,所述文件尾块的有效内容为固定长度。
[0027]较佳的,该方法还进一步包括:
[0028]根据所接收的数据查询请求中的传入时间参数,确定对应的历史数据文件;
[0029]读取所确定的历史数据文件的文件尾块,确定对应的首索引块;
[0030]根据数据查询请求中的测点标识,确定该测点的索引块的位置;
[0031]在所确定的索引块中根据传入时间参数,确定对应的数据块;
[0032]在所确定的数据块中查询到与所述传入时间参数对应的测点值。
[0033]较佳的,所述历史数据文件由多个块构成;所述历史数据文件的块的类型包括:文件尾块、首索引块、索引块和数据块;
[0034]所述历史报警数据文件由多个块构成;所述历史报警数据文件的块的类型包括:报警文件尾块、报警索引块、报警过滤块和报警描述块。
[0035]较佳的,所述报警文件尾块的有效内容为固定长度。
[0036]较佳的,该方法还进一步包括:
[0037]用户输入历史报警数据查询请求;
[0038]系统根据所接收的历史报警数据查询请求中的开始时间,确定对应的历史报警数据的起始文件;
[0039]读取所确定的起始文件的报警文件尾块,确定对应的报警索引块;
[0040]对所确定的报警索引块进行遍历操作,遍历指定时间范围内所有的报警索引块和报警过滤块,确定满足查询条件的报警过滤块;
[0041]根据所确定的报警过滤块确定相应的报警描述块,并将所确定的报警过滤块和报警描述块的内容装载并提供给用户。
[0042]如上可见,在本发明中的实时数据库的存储方法中,在实时数据库中集成报警存贮和处理,实时数据库可以同时存贮和处理模拟量历史数据、开关量历史数据和历史报警数据,而且还可以使用统一的访问接口和方式,因此使得历史报警数据的存储和访问速度远远高于现有技术中在关系数据库中的存储和访问速度(例如,可以快10倍以上),而且还可以为历史报警数据查询提供方便和快捷的查询服务。
[0043]另外,由于在上述的实时数据库的存储方法中,在将实时数据库的历史数据和历史报警数据写入内存表时,对磁盘文件的操作全部都是顺序操作,而没有随机写操作,因此可以充分利用机械硬盘的顺序操作的高效特性,提高数据读写操作的速度和效率,从而可以在对实时数据库中的历史数据和历史报警数据进行读写操作时,获得更快的读写速度。
[0044]另外,由于在本发明中的实时数据库的存储方法中,是先获取当前内存表中的当前可用位置,然后再将历史数据和历史报警数据写入到当前内存表中的当前可用位置中,因此可以支持并发读写,并支持对多个测点的并发写,读写操作之间互不干扰,多个测点写之间也互不干扰,从而可利用现代多核计算机系统的特性,提高实时数据库的并发访问能力。
[0045]另外,本发明中的实时数据库的历史报警数据的存贮结构可以有效地利用时间序列数据的特点,将历史报警数据按区域和子系统存贮,每个历史报警数据文件对应一个固定的时间段的报警数据,因此可以根据查询时间快速定位到相应的历史报警数据文件。
[0046]此外,由于在实时数据库对所述历史报警数据文件进行存贮时,是将过滤条件(即报警过滤块)和报警描述(报警描述块)分别存贮,并在实时数据库中提供与关系数据库同等灵活的报警条件查询方式,没有关系数据库的条件索引,而且使用比关系数据库更小的存贮空间,同时还可以提供比关系数据库更快的条件查询速度,极大地拓展了实时数据库的应用范围。

【专利附图】

【附图说明】
[0047]图1为本发明实施例中的实时数据库的存储方法的流程示意图。
[0048]图2为本发明实施例中的实时数据库的历史数据的存储方法的示意图。
[0049]图3为本发明实施例中的历史数据写入内存表的示意图。
[0050]图4为本发明实施例中的历史数据文件的结构示意图。
[0051]图5为本发明实施例中的历史数据文件中的文件尾块的结构示意图。
[0052]图6为本发明实施例中的历史数据文件中的首索引块的结构示意图。
[0053]图7为本发明实施例中的历史数据文件中的索引块的结构示意图。
[0054]图8为本发明实施例中的历史数据文件中的数据块的结构示意图。
[0055]图9为本发明实施例中的历史报警数据写入内存表的示意图。
[0056]图10为本发明实施例中的历史报警数据的结构示意图。
[0057]图11为本发明实施例中的历史报警数据文件中的报警文件尾块的结构示意图。
[0058]图12为本发明实施例中的历史报警数据文件中的报警索引块的结构示意图。
[0059]图13为本发明实施例中的历史报警数据文件中的报警过滤块的结构示意图。
[0060]图14为本发明实施例中的历史报警数据文件中的报警描述块的结构示意图。

【具体实施方式】
[0061]为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
[0062]本实施例提供了一种实时数据库的存储方法。
[0063]图1为本发明实施例中的实时数据库的存储方法的流程示意图。图2为本发明实施例中的实时数据库的历史数据的存储方法的示意图(历史报警数据的存储方法与图2类似,未在图2中示出)。如图1和图2所示,本发明实施例中的实时数据库的存储方法主要包括如下所述的步骤:
[0064]步骤11,当写入历史数据和历史报警数据时,分别将所述历史数据和历史报警数据写入对应的内存表和操作日志缓冲区。
[0065]在本发明的技术方案中,在将上述历史数据和历史报警数据写入上述对应的内存表的同时,还会将该历史数据和历史报警数据写入对应的操作日志缓存区。
[0066]较佳的,在本发明具体实施例中,本方法还可进一步包括:所述操作日志缓存区中的操作日志以4K的整数倍为单位写入到操作日志文件中,从而便于在出现故障之后能及时恢复数据。
[0067]步骤12,当当前的内存表满时,将当前的内存表中的历史数据或历史报警数据经压缩后分别写入到当前时刻所对应的分钟级历史数据文件或分钟级历史报警数据文件中,申请一个新的内存表,并将所申请的新内存表作为当前的内存表。
[0068]在本发明的技术方案中,每一个时刻都对应一个分钟级历史数据文件和分钟级历史报警数据文件,因此可以通过写入线程将当前的内存表中的历史数据和历史报警数据经压缩后分别写入到当前时刻所对应的分钟级历史数据文件和分钟级历史报警数据文件中。同时,还将申请一个新的内存表,并将该新的内存表作为当前的内存表,以便于随后继续写入新的历史数据和历史报警数据。
[0069]步骤13,合并线程定时进行检查,在每天的预设时间将多个分钟级历史数据文件和分钟级历史报警数据分别合并为日级历史数据文件和日级历史报警数据文件;在每月的预设时间将多个日级历史数据文件和日级历史报警数据文件分别合并为月级历史数据文件和月级历史报警数据文件;在每年的预设时间将多个月级历史数据文件和月级历史报警数据文件分别合并为年级历史数据文件和年级历史报警数据文件。
[0070]较佳的,在本发明的具体实施例中,上述操作日志文件的写入操作、历史数据文件和历史报警数据文件的写入操作、历史数据文件和历史报警数据文件的合并操作等操作都是顺序读写的操作。
[0071]另外,图3为本发明实施例中的历史数据写入内存表的示意图。图9为本发明实施例中的历史报警数据写入内存表的示意图。如图3和图9所示,较佳的,在本发明的具体实施例中,所述将所述历史数据或历史报警数据写入当前的内存表可以包括如下所述的步骤:
[0072]步骤21,当需要将历史数据或历史报警数据写入到内存表中时,先获取当前内存表中的当前可用位置。
[0073]步骤22,将所述历史数据或历史报警数据写入到当前内存表中的当前可用位置中。
[0074]较佳的,在本发明的具体实施例中,所述写入到内存表中的历史数据的内容至少包括:测点标识(ID)、时间戳、质量戳和值。
[0075]较佳的,在本发明的具体实施例中,所述写入到内存表中的历史报警数据的内容可以包括:报警开始时间、报警类型、报警级别、报警描述、报警消失时间、报警确认时间、报警确认人、报警对应测点、对应设备和所属子系统等信息。
[0076]在本发明的技术方案中,所述历史报警数据的内容可以根据实际应用的需要由用户进行定义和扩充,以适用于不同行业和系统对历史报警数据的存储和查询的需求。
[0077]步骤23,当一个历史数据或历史报警数据写入完毕后,确定所述内存表中的下一个可用位置,并将所确认的下一个可用位置作为该内存表的当前的可用位置。这样,当进行下一个历史数据或历史报警数据的写入时,可以直接获取到内存表中的当前的可用位置,并进行后续的写入操作。
[0078]例如,如图3所示,可以通过如下所述的步骤,将多个测点的历史数据写入到图3中右边的内存表中:
[0079]步骤31,增加新历史数据时,首先获取下一个可用位置,并在可用位置上记录下时间戳、质量戳和值。
[0080]步骤32,当所增加的新历史数据是测点i的数据时,如果此时测点i的首数据位置的值为空,则在写入所述新历史数据时,将测点i的首数据位置的值更改为内存表的当前可用位置的值。
[0081]步骤33,如果此时测点i的尾数据位置的值也为空,则将尾数据位置的值也更改为内存表的当前可用位置的值。
[0082]步骤34,如果此时测点i的首数据位置的值不为空,则尾数据位置的值也一定不为空,则将尾数据位置的值的下一数据值作为内存表的下一个可用位置,并在写入该新历史数据之后,将该测点i的尾数据位置的值更改为该历史数据最后一个数据所占用的内存表的位置。
[0083]例如,如图3所示,当测点0当前测得的数据为空值(NULL)时,则测点0的首数据位置和尾数据位置均为空值;如果此时测点0测到了一个新数据A,且此时内存表的下一个可用位置为8,则获取内存表中的当前可用位置8,并将内存表的下一个可用位置修改为9,然后在位置8中记录测点0的数据A,并将图3所示的左表中的测点0的首数据位置和尾数据位置都修改为8;如果之后,测点0又测到了一个新数据B,且此时内存表的下一个可用位置为9,则获取该内存表中的当前可用位置9,在位置9中记录测点0的数据B,将内存表的下一个可用位置修改为10,并将图3所示的左表中的测点0的首数据位置和尾数据位置都修改为9 ;……,依此类推,即可不断将测点0新测到的数据写入到内存表中。
[0084]另外,根据图3所示的左表可知,在图3所示的情况下,测点0没有需要写入的数值,因此测点0的首数据位置和尾数据位置均为NULL。测点1在内存表的位置1写入了一个数据,即空值NULL,因此测点1的首数据位置和尾数据位置均为1 ;测点2在内存表的位置2、3、5分别写入了 3个数据,且测点2在内存表中写入的首数据位置为2,尾数据位置为5 ;测点3在内存表的位置4、6、7分别写入了 3个数据,且测点3在内存表中写入的首数据位置为4,尾数据位置为7 ;依此类推。
[0085]较佳的,在本发明的具体实施例中,按区域和子系统将所述历史数据保存为相应的历史数据文件。
[0086]图4为本发明实施例中的历史数据文件的结构示意图。如图4所示,较佳的,在本发明的具体实施例中,所述历史数据文件由多个块构成;所述块的类型包括:文件尾块、首索引块、索引块和数据块。
[0087]其中,可以将所述文件尾块称为文件尾区,将所述首索引块称为首索引区;将所述索引块和数据块统称为索引+数据区。
[0088]较佳的,在本发明的具体实施例中,所述历史数据文件中的块内容包括了上述文件尾块、首索引块、索引块和数据块;所述历史数据文件中还包括:表示所述历史数据文件是否压缩的压缩标识位(例如,长度可以为1位)、表示块类型的块类型标识位(例如,长度可以为7位)以及用于CRC校验的校验位(例如,长度可以为4个字节)。
[0089]较佳的,在本发明的具体实施例中,所述文件尾块的有效内容为固定长度(例如,该固定长度为:36字节+5字节)。因此,根据历史数据文件的尺寸大小即可快速定位到文件尾块。较佳的,在本发明的具体实施例中,所述文件尾块中所包括的内容如图5所示。
[0090]较佳的,在本发明的具体实施例中,每一个测点标识(ID)都设置有对应的首索弓丨。各个测点标识的首索引都存储在首索引块中,因此,通过对首索引块的查询,即可获知各个测点标识的首索引。
[0091]较佳的,在本发明的具体实施例中,所述首索引块中所包括的内容如图6所示。
[0092]较佳的,在本发明的具体实施例中,所述索引块中包括:各个数据块的起始时间、位置和尺寸等信息。例如,数据块0的起始时间表是数据块0中数据的最小时间。
[0093]较佳的,在本发明的具体实施例中,所述索引块中所包括的内容如图7所示。
[0094]较佳的,在本发明的具体实施例中,所述数据块的长度可以预先配置。例如,所述数据块的长度可以是数K。
[0095]较佳的,在本发明的具体实施例中,所述数据块中所包括的内容如图8所示。
[0096]较佳的,在本发明的具体实施例中,上述图4?图8中所示的数据块中的数据所表示的是最终的数据,在实际存储时,上述数据块会被压缩。
[0097]另外,在本发明的技术方案中,还可以根据传入时间参数,定位到当前所需查询的数据存储在哪个历史数据文件上。
[0098]例如,较佳的,在本发明的具体实施例中,所述实时数据库的存储方法还可进一步包括:
[0099]根据所接收的数据查询请求中的传入时间参数,确定对应的历史数据文件;
[0100]读取所确定的历史数据文件的文件尾块,确定对应的首索引块;
[0101]根据数据查询请求中的测点标识,确定该测点的索引块的位置;。
[0102]在所确定的索引块中根据传入时间参数,确定对应的数据块;
[0103]在所确定的数据块中查询到与所述传入时间参数对应的测点值。
[0104]较佳的,在本发明的具体实施例中,如图9所示,可以通过如下所述的步骤,将历史报警数据写入到图9中底部的内存表中:
[0105]步骤41,增加新历史报警数据时,首先获取下一个可用位置(即图9中所示的尾数据位置的值),并在可用位置上记录下所需增加的新历史报警数据的内容,例如,报警开始时间、报警类型、报警级别、报警描述、报警消失时间、报警确认时间、报警确认人、报警对应测点、对应设备和所属子系统等信息。
[0106]较佳的,在本发明的具体实施例中,所述首数据和尾数据的初始值均为1。也就是说,如果内存表中还未存储历史报警数据,则当前的可用位置为1,因此尾数据的值也为1。
[0107]步骤42,将当前容量的值加1,将尾数据位置的值的下一数据值作为尾数据位置的当前值(即内存表的下一个可用位置的值),并将当前序列号更改为当前增加的新历史报警数据的序列号的下一个序列号。
[0108]较佳的,在本发明的具体实施例中,所述当前容量的初始值为0。
[0109]步骤43,记录当前增加的新历史报警数据的前一数据位置的值,并将前一数据的下一数据位置的当前值更改为当前可用位置的值;如果当前增加的新历史报警数据为首数据,则所述前一数据位置的值为NULL。
[0110]例如,如图9所示,当第1个历史报警数据写入到内存表时,当前容量的当前值为0,尾数据位置的当前值为1,即此时内存表的下一个可用位置为1。此时,可以将第1个历史报警数据写入到位置1中,将该第1个历史报警数据的序列号作为当前序列号;然后将当前容量的当前值更改为1,将首数据位置的当前值更改为1,将尾数据位置的当前值更改为
2。由于第1个历史报警数据为首数据,因此其前一数据位置的值为NULL。
[0111]当第2个历史报警数据写入到内存表时,当前容量的当前值为1,尾数据位置的当前值为2,即此时内存表的下一个可用位置为2。此时,可以将第2个历史报警数据写入到位置2中,将该第2个历史报警数据的序列号作为当前序列号;然后将当前容量的当前值更改为2,将尾数据位置的当前值更改为3。由于第2个历史报警数据不是首数据,其前一个数据为第1个历史报警数据,因此记录第1个历史报警数据的位置的值1,并将第1个历史报警数据的下一数据位置的当前值更改为当前可用位置的值2 ;……,依此类推,即可不断将新历史报警数据写入到内存表中。
[0112]较佳的,在本发明的具体实施例中,按区域和子系统将所述历史报警数据保存为相应的历史报警数据文件。
[0113]图10为本发明实施例中的历史报警数据的结构示意图。如图10所示,较佳的,在本发明的具体实施例中,所述历史报警数据文件由多个块构成;所述块的类型包括:报警文件尾块、报警索引块、报警过滤块和报警描述块。
[0114]其中,可以将所述报警文件尾块称为报警文件尾区,将所述报警索引块称为报警索引区;将所述报警过滤块和报警描述块统称为过滤+描述区。
[0115]较佳的,在本发明的具体实施例中,所述历史报警数据文件中的块内容包括了上述报警文件尾块、报警索引块、报警过滤块和报警描述块;所述历史报警数据文件中还包括:表示所述历史报警数据文件是否压缩的压缩标识位(例如,长度可以为1位)、表示块类型的块类型标识位(例如,长度可以为7位)以及用于CRC校验的校验位(例如,长度可以为4个字节)。
[0116]较佳的,在本发明的具体实施例中,所述报警文件尾块的有效内容为固定长度(例如,该固定长度为:36字节+5字节)。因此,根据历史报警数据文件的尺寸大小即可快速定位到报警文件尾块。较佳的,在本发明的具体实施例中,所述报警文件尾块中所包括的内容如图11所示。
[0117]较佳的,在本发明的具体实施例中,所述报警索引块中所包括的内容如图12所不ο
[0118]较佳的,在本发明的具体实施例中,所述报警索引块的内容可以包括:各个数据块的起始时间、各个报警过滤块的位置和尺寸、各个报警描述块的位置和尺寸。因此,通过对报警索引块的查询,即可获知各个报警过滤块和报警描述块的位置和尺寸。
[0119]在本发明的技术方案中,所述报警描述块的尺寸较大,因此,可以将所述报警描述块与所述报警过滤块进行分段存贮,以实现对历史报警数据的快速查询。
[0120]较佳的,在本发明的具体实施例中,所述报警过滤块中所包括的内容如图13所示。所述报警描述块中所包括的内容如图14所示。
[0121]较佳的,在本发明的具体实施例中,所述报警过滤块的字段数量和长度可由用户根据实际应用情况预先配置,所述报警描述块的长度也可由用户根据实际应用情况预先配置,以适用不同行业和系统对历史报警数据的存贮和查询的需求。
[0122]根据上述对历史报警数据文件的格式的介绍可知,与模拟量历史数据一样,历史报警数据在写入实时数据库中时,对磁盘文件的操作也全部都是顺序操作,而没有随机写操作,因此可以充分利用机械硬盘的顺序操作的高效特性。
[0123]另外,在本发明的技术方案中,还可以根据用户输入的查询条件,对实时数据库中所存储的历史报警数据进行查询。
[0124]例如,较佳的,在本发明的具体实施例中,所述实时数据库的存储方法还可进一步包括:
[0125]用户输入历史报警数据查询请求;较佳的,在本发明的具体实施例中,所述历史报警数据查询请求可以包括:开始时间、结束时间或者其它各种不同条件的组合。
[0126]系统根据所接收的历史报警数据查询请求中的开始时间,确定对应的历史报警数据的起始文件;
[0127]读取所确定的起始文件的报警文件尾块,确定对应的报警索引块;
[0128]对所确定的报警索引块进行遍历操作,遍历指定时间范围内所有的报警索引块和报警过滤块,确定满足查询条件的报警过滤块。由于报警过滤块只包含了历史报警数据的过滤信息,尺寸较小,因此查询和装载速度都比较快。
[0129]根据所确定的报警过滤块确定相应的报警描述块,并将所确定的报警过滤块和报警描述块的内容装载并提供给用户。
[0130]综上可知,在本发明中的实时数据库的存储方法中,在实时数据库中集成报警存贮和处理,实时数据库可以同时存贮和处理模拟量历史数据、开关量历史数据和历史报警数据,而且还可以使用统一的访问接口和方式,因此使得历史报警数据的存储和访问速度远远高于现有技术中在关系数据库中的存储和访问速度(例如,可以快10倍以上),而且还可以为历史报警数据查询提供方便和快捷的查询服务。
[0131]另外,由于在上述的实时数据库的存储方法中,在将实时数据库的历史数据和历史报警数据写入内存表时,对磁盘文件的操作全部都是顺序操作,而没有随机写操作,因此可以充分利用机械硬盘的顺序操作的高效特性,提高数据读写操作的速度和效率,从而可以在对实时数据库中的历史数据和历史报警数据进行读写操作时,获得更快的读写速度。
[0132]另外,由于在本发明中的实时数据库的存储方法中,是先获取当前内存表中的当前可用位置,然后再将历史数据和历史报警数据写入到当前内存表中的当前可用位置中,因此可以支持并发读写,并支持对多个测点的并发写,读写操作之间互不干扰,多个测点写之间也互不干扰,从而可利用现代多核计算机系统的特性,提高实时数据库的并发访问能力。
[0133]另外,本发明中的实时数据库的历史报警数据的存贮结构可以有效地利用时间序列数据的特点,将历史报警数据按区域和子系统存贮,每个历史报警数据文件对应一个固定的时间段的报警数据,因此可以根据查询时间快速定位到相应的历史报警数据文件。
[0134]此外,由于在实时数据库对所述历史报警数据文件进行存贮时,是将过滤条件(即报警过滤块)和报警描述(报警描述块)分别存贮,并在实时数据库中提供与关系数据库同等灵活的报警条件查询方式,没有关系数据库的条件索引,而且使用比关系数据库更小的存贮空间,同时还可以提供比关系数据库更快的条件查询速度,极大地拓展了实时数据库的应用范围。
[0135]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种实时数据库的存储方法,其特征在于,该方法包括: 当写入历史数据和历史报警数据时,分别将所述历史数据和历史报警数据写入对应的内存表和操作日志缓冲区; 当当前的内存表满时,将当前的内存表中的历史数据或历史报警数据经压缩后分别写入到当前时刻所对应的分钟级历史数据文件或分钟级历史报警数据文件中,申请一个新的内存表,并将所申请的新内存表作为当前的内存表; 合并线程定时进行检查,在每天的预设时间将多个分钟级历史数据文件和分钟级历史报警数据分别合并为日级历史数据文件和日级历史报警数据文件;在每月的预设时间将多个日级历史数据文件和日级历史报警数据文件分别合并为月级历史数据文件和月级历史报警数据文件;在每年的预设时间将多个月级历史数据文件和月级历史报警数据文件分别合并为年级历史数据文件和年级历史报警数据文件。
2.根据权利要求1所述的方法,其特征在于,所述将所述历史数据写入当前的内存表包括: 当需要将历史数据或历史报警数据写入到内存表中时,先获取当前内存表中的当前可用位置; 将所述历史数据或历史报警数据写入到当前内存表中的当前可用位置中; 当一个历史数据或历史报警数据写入完毕后,确定所述内存表中的下一个可用位置,并将所确认的下一个可用位置作为该内存表的当前的可用位置。
3.根据权利要求2所述的方法,其特征在于, 所述写入到内存表中的历史数据的内容至少包括:测点标识、时间戳、质量戳和值;所述写入到内存表中的历史报警数据的内容至少包括:报警开始时间、报警类型、报警级别、报警描述、报警消失时间、报警确认时间、报警确认人、报警对应测点、对应设备和所属子系统。
4.根据权利要求1所述的方法,其特征在于: 按区域和子系统将所述历史数据保存为相应的历史数据文件; 按区域和子系统将所述历史报警数据保存为相应的历史报警数据文件。
5.根据权利要求4所述的方法,其特征在于: 所述历史数据文件由多个块构成;所述块的类型包括:文件尾块、首索引块、索引块和数据块。
6.根据权利要求5所述的方法,其特征在于: 所述文件尾块的有效内容为固定长度。
7.根据权利要求6所述的方法,其特征在于,该方法还进一步包括: 根据所接收的数据查询请求中的传入时间参数,确定对应的历史数据文件; 读取所确定的历史数据文件的文件尾块,确定对应的首索引块; 根据数据查询请求中的测点标识,确定该测点的索引块的位置; 在所确定的索弓I块中根据传入时间参数,确定对应的数据块; 在所确定的数据块中查询到与所述传入时间参数对应的测点值。
8.根据权利要求4所述的方法,其特征在于: 所述历史数据文件由多个块构成;所述历史数据文件的块的类型包括:文件尾块、首索引块、索引块和数据块; 所述历史报警数据文件由多个块构成;所述历史报警数据文件的块的类型包括:报警文件尾块、报警索引块、报警过滤块和报警描述块。
9.根据权利要求8所述的方法,其特征在于: 所述报警文件尾块的有效内容为固定长度。
10.根据权利要求9所述的方法,其特征在于,该方法还进一步包括: 用户输入历史报警数据查询请求; 系统根据所接收的历史报警数据查询请求中的开始时间,确定对应的历史报警数据的起始文件; 读取所确定的起始文件的报警文件尾块,确定对应的报警索引块; 对所确定的报警索引块进行遍历操作,遍历指定时间范围内所有的报警索引块和报警过滤块,确定满足查询条件的报警过滤块; 根据所确定的报警过滤块确定相应的报警描述块,并将所确定的报警过滤块和报警描述块的内容装载并提供给用户。
【文档编号】G06F17/30GK104504116SQ201410844237
【公开日】2015年4月8日 申请日期:2014年12月30日 优先权日:2014年12月30日
【发明者】廖常斌, 万思军, 刘见, 刘东海, 宋艳荣, 张洪波 申请人:青岛海信网络科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1