首页> 中国专利> 一种海量历史数据的存储及索引方法

一种海量历史数据的存储及索引方法

摘要

本发明公开了一种海量历史数据的存储及索引方法,属于实时历史数据库领域。该方法根据分布式文件系统将大文件进行分块存储的特点,给出了一种简单高效的海量历史数据文件的存储方法和一种高效的分布式索引机制。该存储方法可以保证满足当前海量历史数据文件的存储要求,更保证具有在线扩展的特性;索引机制可以实现对海量历史数据的快速访问,同时在系统进行资源扩展以后,即底层物理存储发生变化时,该索引在无需修改的情况下依旧可以实现对数据的查找功能。

著录项

  • 公开/公告号CN102646130A

    专利类型发明专利

  • 公开/公告日2012-08-22

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201210063417.3

  • 发明设计人 王非;黄本雄;王章;

    申请日2012-03-12

  • 分类号G06F17/30(20060101);

  • 代理机构北京市德权律师事务所;

  • 代理人刘丽君

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-12-18 07:51:02

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-04-29

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20130814 终止日期:20140312 申请日:20120312

    专利权的终止

  • 2013-08-14

    授权

    授权

  • 2012-10-10

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20120312

    实质审查的生效

  • 2012-08-22

    公开

    公开

说明书

技术领域

本发明涉及到实时历史数据库领域,尤其涉及到实时历史数据库存储海 量级历史数据和为之建立索引文件的方法。

背景技术

实时历史数据库在工控领域被普遍使用,涉及的行业包括电力、石油、 冶金、化工等。实时历史数据库以测点作为基本单位来描述生产数据。一个 数据库的测点对应现实世界的一个物理数据源,如某一条输电线的电压、某 一个检测点的温度等。测点储存的数据是离散的量,其储存的数据都带有时 间戳。从现场采集到的生产过程数据(如某个设备不同部位测点的电流电压、 锅炉不同部位测点的水位水温等)经过一系列处理之后最终保存在实时历史 数据库当中。此类数据通常在后续的过程回溯或者数据分析的过程中使用。

随着信息化建设的推进,越来越多的数据通过分布广泛的数据采集器进 入到实时历史数据库系统,并最终以数据文件的形式保存,这些数据文件称 之为历史数据文件。由于生产控制过程是24小时不间断运行的,因此随着 时间的推移,历史数据总量不断累积,产生的历史数据文件总量可以达到 TB甚至PB级别。

当前的实时历史数据库系统主要部署于性能良好的单机上,单机能够满 足一定的存储需求,但是面对持续增长的历史数据量,单机有限的磁盘空间 就不再满足存储要求。虽然可以通过停机更换大容量磁盘来实现扩展,但这 样不能保证服务的持续性。分布式数据库系统和集群数据库系统虽然可以实 现存储空间动态扩容,但当前的产品均只能在离线方式下进行系统扩展,不 适合历史数据产生的实际环境,更重要的是二者没有专门针对历史数据的特 点进行数据存储的方案,因此这二者不适合海量历史数据的存储需求。近些 年,数据库领域新兴的列数据库被广泛使用,其代表了基于云平台的新型数 据库,并开始应用于大规模数据存储和处理过程。该类数据库系统可以实现 在线扩展,即保证服务不间断的情况下实现添加节点的功能。但是,该类数 据库也没有针对历史数据的特点而实施的数据存储方案,因此这类数据库也 不完全适合历史数据的存储要求。

综上所述,面对海量历史数据,目前尚无完整可用的实施方案既可以满 足当前的数据存储要求,又保证系统具有动态扩展性来应对持续增长的数据 存储和处理的需求。

发明内容

有鉴于此,本发明的目的在于提供一种海量历史数据的存储及索引方 法,用于实现既满足当前海量历史数据文件的存储要求,更保证具有在线扩 展的特性。

本发明提供了一种海量历史数据的存储方法,该方法包括:

A、从实时历史数据库获取与测点数字标识NID相对应测点的前一天全 天的压缩数据,按时间升序连续排列构成一条测点历史数据记录的历史数据 区,在所述历史数据区前加入该测点的元数据区信息构造一条测点历史数据 记录R;

B、判断中间数据文件FT的剩余空间是否小于R的长度RLEN,如果是, 则向FT的剩余空间写入无效数据,并将FT中的整块数据追加写入历史数据 文件F,从分布式文件系统返回的结果中获取本次写入数据所存入的文件块 的全局数字标识BlockID,遍历保存测点数字标识的集合CID,每次取出一个 测点数字标识赋值给临时变量TID,将日索引集合文件FTI第TID个索引单元 的文件块标识FileBlockID项的值置为BlockID,清空CID和文件FT,并执行 步骤C;否则直接执行步骤C;

C、将R写入FT,记录下R在FT中的起始偏移地址Offset,将Offset 和RLEN分别写入FTI的第NID个索引单元的数据偏移DataOffset项和数据长 度DataLength项,将NID的值存入集合CID

D、对NID的值执行加1操作,判断该NID对应的测点是否存在,若存 在则执行步骤A;否则执行步骤E;

E、向FT的剩余空间写入无效数据,将FT中的数据追加写入历史数据 文件F,从分布式文件系统返回的结果中获取本次写入数据存入的BlockID, 更新FTI,遍历CID,每次取出一个测点数字标识赋值给TID,将FTI中第TID个索引单元FileBlockID项的值置为BlockID,将FTI的数据追加写入年索引 文件FIDX

本发明的实施例还提供了一种基于所述海量历史数据存储方法的索引 方法,当索引测点NID在同一天内的时间点TS至TE时间段内的历史数据时, 包括以下步骤:

解析时间TS,获得年份Y和日期D,并打开Y对应的年索引文件FIDX

将日期D转化为在一年366天中的天数K,K从1开始取值,在FIDX中定 位到第K天的日索引集合的起始偏移地址HA

以HA为起始地址,向后查找到第NID个索引单元,读取该索引单元的三项 信息:FileBlockID,DataOffset,DataLength;

在分布式文件系统中读取FileBlockID对应文件块内偏移为DataOffset,长 度为DataLength的历史数据记录Data;

根据Data的元数据区的数据,将Data的历史数据区的数据进行解压缩, 得到按时间先后顺序排列的测点NID一整天的历史数据集合DeData;

如果TS等于TE,则执行下一步;否则,将DeData中满足时间戳不小于TS并且不大于TE条件的数据集合按时间先后顺序排列后返回,结束本流程;

在DeData中查找时间戳等于TS的历史数据DA,如果找到DA则返回历 史数据DA,结束本流程;否则返回索引无结果的信息,结束本流程。

本发明根据分布式文件系统将大文件进行分块存储的特点,给出了一种 简单高效的海量历史数据文件的存储方法和一种高效的分布式索引机制。该 存储方法可以保证满足当前海量历史数据文件的存储要求,更保证具有在线 扩展的特性;索引机制可以实现对海量历史数据的快速访问,同时在系统进 行资源扩展以后,即底层物理存储发生变化时,该索引在无需修改的情况下 依旧可以实现对数据的查找功能。

附图说明

图1是本发明实施例中历史数据文件的组织结构示意图;

图2是本发明实施例中的历史数据索引文件的结构示意图;

图3是本发明实施例提供的历史数据存储和建立索引的方法流程图;

图4是本发明实施例提供的索引一个测点在一个日期内某个时间段的 历史数据的方法流程图;

图5是本发明实施例提供的索引一个测点在任意时间段内历史数据的 方法流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明 作进一步的详细描述。

为解决海量历史数据的存储问题,本发明实施例根据分布式文件系统将 大文件进行分块存储的特点,给出了一种简单高效的海量历史数据文件的存 储方法和一种高效的分布式索引机制。该存储方法可以保证满足当前海量历 史数据文件的存储要求,更保证具有在线扩展的特性。本发明实施例提出的 索引机制可以实现对海量历史数据的快速访问,同时在系统进行资源扩展以 后,即底层物理存储发生变化时,该索引在无需修改的情况下依旧可以实现 对数据的查找功能。

本实施例提出的数据存储方法基于分布式文件系统实现,使得使用该方 法的系统具备分布式文件系统可弹性扩展和数据高可用的特性。

本实施例提出的数据存储方法的关键在于建立历史数据文件F,一整年 的历史数据用一个历史数据文件F保存。历史数据文件F的命名规则如下: 历史数据文件F的文件名形如YYYY.dat(YYYY代表年),如2012.dat。历 史数据文件F内部组织如图1所示,F由多个相同大小的数据块拼接而成, 每个数据块的大小等于分布式文件系统默认的文件分块大小BlockSize,实现 物理存储的分布式文件系统将文件F切分为多个文件块进行分布存储,一个 数据块对应一个文件块。每个数据块内包含多条测点历史数据记录,一条测 点历史数据记录只会保存在一个数据块内。本实施例的历史数据存储方法保 证一条测点历史数据记录不会跨两个数据块保存,这是为了保证一条历史数 据记录在分布式文件系统中进行物理存储时不被切分到两个不同的文件分 块内造成索引数据的高开销和低效率。每一条测点历史数据记录又包含测点 元数据区和测点历史数据区,测点元数据区包含实时历史数据库为每个测点 分配的全局唯一的数字标识NID(NID从1开始分配)、测点的数据采集周期 和测点历史数据区内第一个数据的时间戳,测点历史数据区则连续存储按时 间升序排列的多个压缩数据。压缩需使用基于时间序列的算法,比如旋转门 压缩算法。测点元数据区的信息则在解压历史数据过程中使用。

本实施例的历史数据索引方法的关键在于建立年索引文件FIDX,年索引 文件FIDX的文件名形如YYYY.idx(YYYY代表年),如2012.idx。年索引文 件FIDX的结构如图2所示,由366个(考虑到闰年的存在)日索引集合组成, 每个日索引集合包含M个索引单元(M等于系统支持最大点数),每个索 引单元又包含三项信息:FileBlockID,DataOffset,DataLength。FileBlockID 代表该条测点历史数据记录存储在分布式文件系统中文件分块的全局数字 标识,DataOffset代表该条数据在文件分块内的起始偏移地址,DataLength 代表该条数据的长度。年索引文件FIDX不是一次性完全建立,而是在数据存 储的过程逐步建立,在每天对历史数据进行存储之前,先新建一个存储日索 引集合的文件FTI,在历史数据存储过程中更新日索引集合文件FTI中每个测 点历史数据记录对应的索引单元的三项信息,在历史数据存储完成之后,将 文件FTI中的数据追加写入年索引文件FIDX,如此直至完成12月31日的历 史数据存储,年索引文件才完全建立。

本实施例的历史数据存储方法的基本思想是,每天将实时历史数据库中 所有测点前一天整天的压缩数据按测点的NID从小到大的顺序进行整理,每 个测点整理后的测点历史数据记录顺次写入本地文件系统中的中间数据文 件FT,FT的大小等于分布式文件系统默认文件分块大小BlockSize,当文件 FT被写满时,将文件FT中的数据追加写入保存在分布式文件系统中的历史 数据文件F,然后清空文件FT,继续整理后续测点的一整天的压缩数据。如 此反复,直至所有测点的压缩数据全部存入历史数据文件F。向中间数据文 件FT写入数据时,可能遇到FT剩余的空间不足以保存下一个测点整理后的 一天的压缩数据的情况,此时向文件FT的剩余空间填充无效数据(如图2 中数据块内部结构图的阴影部分所示)使之被写满,然后将文件FT的数据 追加写入文件F,再清空文件FT,将下一个测点整理后的压缩数据写入,再 继续整理后续测点的压缩数据。

本实施例提供的历史数据的存储和建立索引方法如图3所示,包括以下 步骤:

步骤301、初始化。打开当前年对应的历史数据文件F,如果不存在则 按照历史数据文件命名的规则新建一个空的历史数据文件;打开当前年对应 的年索引文件FIDX,如果不存在则按照年索引文件命名的规则新建一个空的 年索引文件;新建一个空的中间数据文件FT,FT的大小固定为分布式文件 系统默认文件分块大小BlockSize;新建一个包含M个索引单元的日索引集 合文件FTI;将NID赋值为1,新建一个保存测点数字标识的集合CID

步骤302、从实时历史数据库获取NID对应测点前一天从0时0分0秒 至23时59分59秒时间段内的压缩后的多个数据,将每个数据按时间升序 连续排列构成一条测点历史数据记录的历史数据区,再在历史数据区前加入 该测点的元数据区信息构造一条测点历史数据记录R,长度为RLEN

步骤303、如果中间数据文件FT剩余空间小于RLEN,执行步骤304;否 则执行步骤305。

步骤304、向中间数据文件FT的剩余空间写入无效数据,将文件FT中 的整块数据追加写入历史数据文件F,从分布式文件系统返回的结果中获取 本次写入数据所存入的文件块的全局数字标识BlockID。遍历集合CID,每次 取出一个测点数字标识赋值给TID(TID为临时变量),将日索引集合文件 FTI第TID个索引单元FileBlockID项的值置为BlockID。清空集合CID和文件 FT,并执行步骤305。

步骤305、将测点历史数据记录R写入中间数据文件FT,记录下R在 文件FT中的起始偏移地址Offset,将Offset和RLEN分别写入日索引集合文件 FTI的第NID个索引单元的DataOffset和DataLength项。将NID的值存入集合 CID

步骤306、对NID的值执行加1操作,判断该新的NID对应的测点是否 存在,若存在则执行步骤302;若不存在则执行步骤307。

步骤307、向中间数据文件FT的剩余空间写入无效数据,将文件FT中 的数据追加写入历史数据文件F,从分布式文件系统返回的结果中获取本次 写入数据存入的文件块的全局数字标识BlockID。接着更新日索引集合文件 FTI,遍历集合CID,每次取出一个测点数字标识赋值给TID,将日索引集合文 件FTI中第TID个索引单元FileBlockID项的值置为BlockID。最后将日索引 集合文件FTI的数据追加写入年索引文件FIDX

由于在存储历史数据时将一个测点同一日期的压缩数据集中存放,故本 实施例的索引方法可以快速定位一个测点一个日期内某时间段内的历史数 据,也可以索引具体时刻的历史数据。

根据本实施例提供的历史数据文件和年索引文件,索引测点NID在时刻 TS至TE(TS和TE必须为同一天内的时间点,且TE不早于TS)时间段内的历 史数据的方法如图4所示,包括以下步骤:

步骤401、解析时间TS,获得年份Y和日期D,并打开Y对应的年索引 文件FIDX

步骤402、将日期D转化为在一年366天中的天数K(K从1开始取值), 在年索引文件FIDX中定位到第K天的日索引集合的起始偏移地址HA。

步骤403、以HA为起始地址,向后查找到第NID个索引单元,读取该索 引单元的三项信息:FileBlockID,DataOffset,DataLength。

步骤404、在分布式文件系统中读取FileBlockID对应文件块内偏移为 DataOffset,长度为DataLength的历史数据记录Data。

步骤405、根据Data的元数据区的数据,调用与之前生成历史数据的 压缩算法对应的解压缩算法将Data的历史数据区的数据进行解压缩,得到 按时间先后顺序排列的测点NID一整天的历史数据集合DeData。

步骤406、如果TS等于TE,则执行步骤407;否则,将DeData中满足 时间戳不小于TS并且不大于TE条件的数据集合按时间先后顺序排列后返 回,结束本流程。

步骤407、在DeData中查找时间戳等于TS的历史数据DA,如果找到 DA则执行步骤408;否则执行步骤409。

步骤408、返回历史数据DA,结束本流程。

步骤409、返回索引无结果的信息,结束本流程。

进一步地,索引测点NID在时刻TBEGIN至TEND(TBEGIN、TEND可以为任 意时间点,但TEND不得早于TBEGIN)时间段内的历史数据的流程如图5所示, 包括以下步骤:

步骤501、将TBEGIN至TEND的时间段按日期划分为N个不同日期内的时 间段,且同一个日期内只有一个时间段。用Ti表示第i个时间段(i从1开 始计数)。

步骤502、对时间段Ti采用图4的索引流程索引历史数据,时间段Ti对应的历史数据为RSi

步骤503、如果所有时间段都处理完成,执行步骤504;否则执行步骤 502。

步骤504、将N个时间段对应的结果数据集RSi按照日期先后进行合并, 即得到测点NID在时刻TBEGIN至TEND的时间段内的历史数据。

举例说明:索引测点NID在2012年3月1日12时0分0秒至2012年3 月3日12时0分0秒时间段内的历史数据,则可以按日期划分为三个时间 段,分别是2012年3月1日12时0分0秒至2012年3月1日23时59分 59秒,2012年3月2日0时0分0秒至2012年3月2日23时59分59秒, 2012年3月3日0时0分0秒至2012年3月3日12时0分0秒。然后分 别采用图4的索引流程索引测点NID在这三个时间段内的历史数据,最后将 索引每个时间段得到的历史数据集按时间先后顺序进行合并,即可得到测点 NID在2012年3月1日12时0分0秒至2012年3月3日12时0分0秒内 的历史数据。

总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的 保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号