《一种海量时序数据的存储方法.pdf》由会员分享,可在线阅读,更多相关《一种海量时序数据的存储方法.pdf(13页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103605805 A (43)申请公布日 2014.02.26 CN 103605805 A (21)申请号 201310659810.3 (22)申请日 2013.12.09 G06F 17/30(2006.01) (71)申请人 冶金自动化研究设计院 地址 100071 北京市丰台区西四环南路 72 号 (72)发明人 朱寅 李勇 徐化岩 于立业 黄霜梅 余志刚 赵博 贾天云 梁青艳 王丽娜 (74)专利代理机构 北京华谊知识产权代理有限 公司 11207 代理人 刘月娥 (54) 发明名称 一种海量时序数据的存储方法 (57) 摘要 一种海量时序数据的存储方法。
2、, 属于数据管 理技术领域。 采用设计精简的HBase主键, 并根据 不同类型时序数据的存储及访问特性对时序数据 分类并设计存储机制 : 对于实时数据、 大周期数 据以及无周期数据, 采用简单行存储, 即一条时序 数据对应一条 HBase 行记录, 通过简单行存储实 现快速插入及检索数据 ; 对于历史数据, 采用把 某一时段内的历史时序数据存储为 HBase 的一条 行记录的段存储机制, 通过段存储实现快速、 高吞 吐性能的历史数据数据检索数。 优点在于, 解决了 具有实时访问性能的海量时序数据存储问题。 (51)Int.Cl. 权利要求书 2 页 说明书 6 页 附图 4 页 (19)中华人。
3、民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书6页 附图4页 (10)申请公布号 CN 103605805 A CN 103605805 A 1/2 页 2 1. 一种海量时序数据的存储方法, 其特征在于 : 工艺步骤 : (1) 采用 HBase 集群来直接管理企业的时序数据, 由 HBase 写数据到 Hadoop 分布式 文件系统, 最终由 Hadoop 归档数据到磁盘 ; 外部用户通过访问 HBase 来读、 写、 删除时序数 据 ; (2) 企业的每个需要存储的时序数据点均具有唯一 Id, 通过数据点 Id 定位具体的数据 点并获取数据点名称等信息, 其中, I。
4、d 为大于或等于 0 的长整型数据, 这使得数据存储系统 支持万亿级的数据点管理 ; (3) 数据增加和数据修改均是数据写的一种特殊形式, 在 HBase 中均通过 Put 操作完 成, 把数据增加和数据修改均统一到数据写入操作 ; 在数据写入时, 每个数据点的一条或多条时序记录成为 HBase 数据表的一条行记录 ; 行记录包括行键rowkey和值部分 ; HBase数据表通过行键区分行记录 ; 行键设计为比特串, 具体为 : 数据点 Id.toBytes+ 时间戳 .toBytes, 其中数据点 Id 在前, 时间戳在后, 它们一 前一后把同一数据点的数据聚在一起, 方便查询某一数据点在某。
5、一时段的数据 ; Id 为长整 型, 最多占用 8 字节, 且根据数据点 Id 的值大小来自动选取最短长度的比特流, 小于 256 的 Id 只需用 1 个字节 ; 时间戳精确到毫秒, 也采用长整型表示, 占用 8 个字节, 行键最多占用 16 字节 ; (4) 具体哪个数据点的时序数据写入到哪张 HBase 数据表中, 由平衡存储机制来控制 ; 通过平衡存储, 实现在数据访问时把网络 I/O 和磁盘 I/O 分布到集群中多个机器上, 提高 总的网络吞吐量和磁盘吞吐量 ; 通过为每个数据点定义一个启发知识来实现平衡存储 ; 在 读、 写某一数据点的数据时, 根据数据点的启发知识确定其 HBas。
6、e 数据表 ; (5) 按照是否周期性的有数据, 把时序数据点分为两类 : 周期性的, 即数据点每隔指定 时间就有一条时序数据 ; 无周期的, 即该数据点数据流的时间戳是没有周期性规律的 ; 按照周期数据点的周期大小, 把周期性数据点分为小周期数据点和大周期数据点 ; 其 中, 用于分类的周期阈值通过配置设定 ; 按照数据新旧, 把小周期性数据点的具体时序数据分为两类 : 历史数据, 指时间戳在某 一时刻之前的数据 ; 实时数据, 指除历史数据以外的数据。 历史数据和实时数据的分割时刻 实际也是实时数据起始时刻。用户在访问周期性数据点时, 主要是访问某一时刻的实时数 据, 或者访问某一时段的历。
7、史数据 ; 实时数据起始时刻的计算公式为 : 实时数据的起始时刻 = 当前段存储的开始时刻 段存储的时间区间大小 *n 当前段存储的开始时刻 = 当前时刻 当前时刻 % 段存储的时间区间大小 段存储的时间区间大小=存储周期*存储的数据点个数 ; 其中, n为大于0的整数 ; %为 数学求模运算符。 2. 根据权利要求 1 所述的方法, 其特征在于 : 根据不同数据的存储及访问特性, 设计存 储机制如下 : a. 实时数据的每一条时序数据记录为 HBase 的一条行记录, 行键中的时间戳选取为时 序数据的时间戳, 此时, 行键已经包含了数据点 Id 和时序数据的时间戳, 行记录的值部分 只需存储。
8、序列化为比特流的时序数据的值 ; 实时数据直接写入到 HBase 实时数据表中, 实时数据表提供数据实时读写功能 ; 在读 权 利 要 求 书 CN 103605805 A 2 2/2 页 3 取某数据点在某一时刻的实时数据时, 根据数据点Id及读取数据的时刻确定HBase记录的 行键, 并由此直接检索到数据, 最后反序列化得到数据 ; b. 对于历史数据数据, 某一时段内的历史时序数据存储为 HBase 的一条行记录, 行键 的时间戳部分选取为时段的开始时间, 通过增加一次 IO 的读取量, 减少在读取时间区间数 据时的 IO 次数 ; 由于是周期数据, 当把时序数据做有序存储时, 行记录的。
9、值部分就只需存 储时序数据的值, 而时间戳 ; 经过推算得到 ; 因此, 行记录的值部分设计为比特串, 比特串 中存放时序数据值序列化得到的比特流, 并根据时序数据的时间戳及时段的开始时间确定 时序数据值的存储位置 ; 对于数据缺失的情况, 在比特串的指定位置填充序列化为比特流 的 Double.NaN ; 其中, Double.NaN 表示不是数字 (NaN) 的值, 在 java、 C# 语言中均有支持 ; 在写入某一历史时序数据时, 先把那一时刻所在时段的段存储记录读出来, 之后进行 更新, 最后再把段存储记录写回到历史数据表中 ; 随着时间前进, 实时数据表中的实时数据 记录会慢慢地变。
10、为历史数据, 需要把实时数据表中已变为历史数据的记录迁移到采用段存 储的历史数据表中 ; 通过确保相应段存储的时间区间完全覆盖, 来构造新的段存储记录并 写到历史数据表, 从而避免读历史数据表段记录、 更新段记录、 再写回段记录的复杂操作 ; 实时数据表具有了数据缓冲的功能, 通过周期性的遍历小周期数据点列表, 计算、 查找变为 了历史数据的时序记录, 并批量迁移查到的历史数据到历史数据表中。 权 利 要 求 书 CN 103605805 A 3 1/6 页 4 一种海量时序数据的存储方法 技术领域 0001 本发明属于数据管理技术领域, 特别涉及一种海量时序数据的存储方法。 背景技术 000。
11、2 时序数据是一种具有时间属性和值属性的数据。 时序数据的时间属性也称为该时 序数据的时间戳。以流程工业为例, 包括化工、 冶金、 建筑、 电力等等, 存在着海量的时序数 据。这些时序数据具体有 : 仪表的计量数据, 生产计划数据, 成本核算数据等。对于大型流 程工业企业, 一般有几十个分厂或车间, 有几十万点级的仪表计量, 一年产生的时序数据的 规模在 TB 级。面对如此大规模的数据, 许多企业在建设信息系统时采用分而治之的策略 : 每个分厂或车间拥有自己的数据存储系统, 而企业层面存储的数据主要是汇总后的数据。 0003 在工业化与信息化深入融合的今天, 许多企业要求进一步提高信息化水平,。
12、 要求 建立企业级的数据平台, 即实现对企业各车间所有计量数据等时序数据的统一集中管理, 并基于此解决当前车间级多个数据存储系统造成的数据孤岛、 数出多源等问题, 实现更好 的生产管控。企业级的数据平台需要一个企业级数据存储系统。该存储系统需要具有良好 地弹性可扩展能力, 以支持日渐增大的数据存储规模, 且具有快速访问性能, 以满足数据报 警、 实时查询、 曲线查看等实时应用需求。 0004 当前, 在流程工业面临着海量数据时序存储管理的困境时, 互联网公司也在面临 着海量数据管理的难题。以 Hadoop、 HBase 等为代表的大数据技术为海量数据管理提供了 一种解决方案, 并为当前淘宝、 。
13、百度、 搜狐等许多互联网公司采用。 Hadoop提供了一种可靠、 可伸缩的分布式文件系统, HBase 是一种高性能、 面向列存储的分布式数据存储系统。在专 利 一种基于 Hadoop+Hbase 的农业时序数据组织方法 (专利申请号 : 201210107915.3) 中, 采用 Hadoop 和 HBase 技术来存储管理具有时间顺序的农业经济技术数据。 发明内容 0005 本发明的目的是提供一种海量时序数据存储方法, 以便建立具有海量时序数据存 储能力以及实时访问能力的企业级数据存储系统。该方法采用 Hadoop 和 HBase 作为底层 存储支撑技术, 利用它们的高扩展性以支持海量时序。
14、数据高性能存储管理, 通过设计精简 的 HBase 主键以及设计段存储进一步提升时序数据的读、 写速度。其中, 段存储定义为把同 一数据点在某一时间的时序数据存储到一起。 0006 本发明包括下列工艺步骤 : 0007 (1) 采用 HBase 集群来直接管理企业的时序数据, 由 HBase 写数据到 Hadoop 分布 式文件系统, 最终由 Hadoop 归档数据到磁盘 ; 外部用户通过访问 HBase 来读、 写、 删除时序 数据。 0008 (2) 企业的每个需要存储的时序数据点均具有唯一 Id, 通过数据点 Id 可定位具体 的数据点并获取数据点名称等信息, 其中, Id 为大于或等于。
15、 0 的长整型数据, 这使得数据存 储系统可以支持万亿级的数据点管理。 说 明 书 CN 103605805 A 4 2/6 页 5 0009 (3) 数据增加和数据修改均是数据写的一种特殊形式, 在HBase中均通过Put操作 完成, 因此, 在本发明中, 把数据增加和数据修改均统一到数据写入操作。 0010 在数据写入时, 每个数据点的一条或多条时序记录成为 HBase 数据表的一条行记 录。 行记录包括行键(rowkey)和值部分。 HBase数据表通过行键区分行记录。 合理的行键, 可以起到数据索引作用, 促成数据的快速检索。另外, 对于海量数据, 行键需要被存储上亿 次, 因此, 行。
16、键也需要尽可能的短。为此, 行键设计为比特串, 具体为 : 数据点 Id.toBytes+ 时间戳 .toBytes, 其中数据点 Id 在前, 时间戳在后, 它们一前一后的目的是为了把同一数 据点的数据聚在一起, 使得可以方便查询某一数据点在某一时段的数据。 Id为长整型, 最多 占用 8 字节, 且可以根据数据点 Id 的值大小来自动选取最短长度的比特流, 例如小于 256 的 Id 只需用 1 个字节。时间戳精确到毫秒, 也采用长整型表示, 占用 8 个字节。因此, 行键 最多占用 16 字节。 0011 (4) 具体哪个数据点的时序数据写入到哪张 HBase 数据表中, 由平衡存储机制。
17、来 控制。通过平衡存储, 实现在数据访问时把网络 I/O 和磁盘 I/O 分布到集群中多个机器上, 从而提高总的网络吞吐量和磁盘吞吐量。 通过为每个数据点定义一个启发知识来实现平衡 存储。在读、 写某一数据点的数据时, 可根据数据点的启发知识确定其 HBase 数据表。 0012 (5) 按照是否周期性的有数据, 把时序数据点分为两类 : 周期性的, 即数据点每隔 指定时间就有一条时序数据 ; 无周期的, 即该数据点数据流的时间戳是没有周期性规律的。 0013 按照周期数据点的周期大小, 把周期性数据点分为小周期数据点和大周期数据 点 ; 其中, 用于分类的周期阈值通过配置设定。 0014 按。
18、照数据新旧, 把小周期性数据点的具体时序数据分为两类 : 历史数据, 指时间戳 在某一时刻之前的数据 ; 实时数据, 指除历史数据以外的数据。 历史数据和实时数据的分割 时刻实际也是实时数据起始时刻。用户在访问周期性数据点时, 主要是访问某一时刻的实 时数据, 或者访问某一时段的历史数据。 0015 根据不同数据的存储及访问特性, 设计存储机制如下 : 0016 a.实时数据的每一条时序数据记录为HBase的一条行记录。 行键中的时间戳选取 为时序数据的时间戳, 此时, 行键已经包含了数据点 Id 和时序数据的时间戳, 因此, 行记录 的值部分只需存储序列化为比特流的时序数据的值。 0017 。
19、实时数据直接写入到 HBase 实时数据表中。实时数据表提供数据实时读写功能。 在读取某数据点在某一时刻的实时数据时, 根据数据点Id及读取数据的时刻确定HBase记 录的行键, 并由此直接检索到数据, 最后反序列化得到数据。 0018 b. 对于历史数据数据, 某一时段内的历史时序数据存储为 HBase 的一条行记录, 行键的时间戳部分选取为时段的开始时间。通过增加一次 IO 的读取量, 减少在读取时间区 间数据时的 IO 次数。由于是周期数据, 因此, 当把时序数据做有序存储时, 行记录的值部分 就只需存储时序数据的值, 而时间戳可以经过推算得到。 因此, 行记录的值部分设计为比特 串, 。
20、比特串中存放时序数据值序列化得到的比特流, 并根据时序数据的时间戳及时段的开 始时间确定时序数据值的存储位置。对于数据缺失的情况, 在比特串的指定位置填充序列 化为比特流的 Double.NaN。其中, Double.NaN 表示不是数字 (NaN) 的值, 在 java、 C# 等语 言中均有支持。 0019 在写入某一历史时序数据时, 先把那一时刻所在时段的段存储记录读出来, 之后 说 明 书 CN 103605805 A 5 3/6 页 6 进行更新, 最后再把段存储记录写回到历史数据表中。 随着时间前进, 实时数据表中的实时 数据记录会慢慢地变为历史数据, 我们需要把实时数据表中已变为。
21、历史数据的记录迁移到 采用段存储的历史数据表中。相比面向某个数据点的某一具体时序数据的迁移, 面向某个 数据点某一时段所有时序数据的迁移是更高效的, 因为可以通过确保相应段存储的时间区 间完全覆盖, 来构造新的段存储记录并写到历史数据表, 从而避免读历史数据表段记录、 更 新段记录、 再写回段记录的复杂操作。此时, 实时数据表具有了数据缓冲的功能, 可以通过 周期性的遍历小周期数据点列表, 计算、 查找变为了历史数据的时序记录, 并批量迁移查到 的历史数据到历史数据表中。 0020 为此, 具体定义实时数据起始时刻的计算公式为 : 0021 实时数据的起始时刻 = 当前段存储的开始时刻 段存储。
22、的时间区间大小 *n 0022 当前段存储的开始时刻 = 当前时刻 当前时刻 % 段存储的时间区间大小 0023 段存储的时间区间大小 = 存储周期 * 存储的数据点个数 0024 其中, n 为大于 0 的整数 ; % 为数学求模运算符。 0025 在读取某一数据点在某一时间区间的历史数据时, 根据所要读取的时间区间确定 所在的时段, 并进而结合数据点 Id 确定 HBase 记录的行键 ; 随后, 把相关的行记录读取出 来 ; 之后, 对行记录进行解析及反序列化得到该区间的时序数据。 0026 c. 对于大周期数据点, 由于同一数据点的时序数据较为稀疏, 因此, 不再区分实时 数据和历史数。
23、据, 而是采用类似于周期性实时数据的存储方式, 即一条时序数据对应一条 HBase 行记录。 0027 d. 对于无周期数据点, 数据频次不确定, 不适宜于采用段存储, 因此, 直接采用类 似于周期性实时数据的存储方式, 即一条时序数据对应一条 HBase 行记录。 0028 本发明的优点在于 : 0029 (1) 本发明是采用 Hadoop 和 HBase 等技术作为底层存储支撑, 具有本质的海量数 据管理能力, 易于实施 ; 0030 (2) 本发明采用平衡存储、 段存储以及简单的数据结构能显著提高系统的吞吐能 力和访问速度。 附图说明 0031 图 1 为时序数据点分类图。 0032 图。
24、 2 为数据写入流程图。 0033 图 3 为后台数据迁移流程图。 0034 图 4 为数据读取流程图。 0035 图 5 为数据删除流程图。 具体实施方式 0036 本发明提供了一种海量时序数据存储方法, 其通过采用Hadoop和HBase作为底层 存储支撑技术, 利用它们的高扩展性以支持海量时序数据高性能存储管理, 并通过设计精 简的 HBase 主键以及设计段存储进一步提升时序数据的读、 写性能。 0037 该发明的实施主要包括两个阶段, 具体有数据组织与存储、 数据流动。 下面结合流 说 明 书 CN 103605805 A 6 4/6 页 7 程图和实例来说明本发明的具体实施方式 :。
25、 0038 (1) 数据组织与存储 0039 采用 HBase 集群来直接管理企业的时序数据, 由 HBase 写数据到 Hadoop 分布式文 件系统, 最终由Hadoop归档数据到磁盘 ; 外部用户通过访问HBase来读、 写、 删除时序数据。 0040 所有时序数据点均具有唯一 Id, 该 Id 为大于或等于 0 的长整型数据。通过 Id 可 定位、 查询指定的数据点。 0041 如图 1 所示, 对时序数据点进行分类。按照是否周期性的有数据, 把时序数据点 分为周期数据点和无周期数据点。按照周期数据点的周期大小, 把周期性数据点分为小周 期数据点和大周期数据点 ; 其中, 用于分类的周。
26、期阈值通过配置设定, 例如把周期阈值设定 为3600秒, 当数据点的周期小于3600秒时即为小周期数据点, 当数据点的周期大于或等于 3600秒时即为大周期数据点。 按照数据新旧, 把小周期性数据点的具体时序数据分为两类 : 历史数据, 指时间戳在某一时刻之前的数据 ; 实时数据, 指除历史数据以外的数据。历史数 据和实时数据的分割时刻实际也是实时数据起始时刻。 0042 时序数据存储于HBase。 根据数据的存储及访问特性, 在HBase中为不同类型的数 据创建不同的表, 具体为 : 把实时数据存储于实时数据表中, 把历史数据存储于历史数据表 中, 把大周期数据点的数据存储于大周期数据表中,。
27、 把无周期数据点的数据存储于无周期 数据表中。数据表是根据时序数据点的信息以及平衡存储机制动态创建的。 0043 实时数据存储采用简单行存储, 即一条时序数据存储为实时数据表中的一条行记 录。 实时数据表的表结构设计如下表所示。 数据表的行键设计为比特串, 最多占用16字节, 具体为 : id.toBytes+time.toBytes, 其中,“id” 为数据点 id,“time” 为时序数据的时间戳, “toBytes” 表示序列化为比特串,“+” 表示把后面的比特串添加到前面的比特串的末尾。数 据表中只有一个列族, 列族中只有一个数据列, 该数据列存储的是时序数据值部分 (value) 序。
28、列化得到的比特串。 0044 0045 历史数据存储采用段存储, 即某一时间区间内的历史时序数据存储为历史数据表 中的一条行记录。 历史数据表的表结构设计如下表所示。 数据表的行键设计为比特串, 最多 占用 16 字节, 具体为 : id.toBytes+time.toBytes, 其中,“time” 为该时间区间的开始时间, “id” 、“toBytes” 以及 “+” 的意义与实时数据存储的相同。数据表中只有一个列族, 列族中 只有一个数据列, 该数据列存储的是该时间区间所有时序数据值部分序列化得到的比特串 按照时序数据时间戳大小依序拼接, 其中, 时序数据序列化得到的比特串均为固定长度。。
29、 对 于数据缺失的情况, 在比特串的指定位置填充序列化为比特串的 Double.NaN, Double.NaN 表示不是数字 (NaN) 的值。 说 明 书 CN 103605805 A 7 5/6 页 8 0046 0047 随着迁移, 实时数据表中的数据记录逐渐地变为了历史数据, 这些变为了历史数 据的记录需要被迁移到历史数据表。 实时数据表中的行记录和历史数据表中的行记录是多 对一的关系, 为了实现一次迁移能把简单行存储中同一数据点的多条行记录刚好聚集为段 存储中的一条行记录, 具体定义实时数据起始时刻的计算公式为 : 0048 实时数据的起始时刻 = 当前段存储的开始时刻 段存储的时间。
30、区间大小 *n 0049 当前段存储的开始时刻 = 当前时刻 当前时刻 % 段存储的时间区间大小 0050 段存储的时间区间大小 = 存储周期 * 存储的数据点个数 0051 其中, n 为大于 0 的整数 ; % 为数学求模运算符。 0052 对于大周期数据点以及无周期数据点的数据存储, 它们的表结构、 行键、 数据列设 计为和上述实时数据存储一样的。 0053 实时数据表、 历史数据表、 大周期数据表、 无周期数据表均使用行的布隆过滤器, 均设定数据版本数为 1。根据相应类型数据点的规模以及平衡存储机制动态确定具体类型 数据表的个数。 例如, 假设有100000个无周期数据点, 每个无周期。
31、数据表存储20000个数据 点的数据, 那么需要创建 5 个无周期数据表 ; 当无周期数据点的个数由 100000 变为 160000 个时, 则需要增建 3 个无周期数据表。 0054 (2) 数据流动 0055 数据流动包括数据访问和后台数据迁移。 数据访问指外部用户或应用对所存储时 序数据的增、 删、 改、 查, 其中增和改可以统一到数据写, 因此, 本发明中, 只把数据访问区分 为数据写、 数据读、 数据删。后台数据迁移指已存储到 HBase 中的数据的再流动, 具体的说 就是写到实时数据表中的数据会逐渐地变为历史数据, 由此, 需要迁移这些数据到历史数 据表进行段存储。 0056 先。
32、说数据写操作。数据写操作的流程如图 2 所示。根据数据点的周期特性, 把实 时数据、 历史数据、 大周期数据、 无周期数据分别存储到实时数据表、 历史数据表、 大周期数 据表和无周期数据表。 0057 对于实时数据, 根据数据点 Id 和实时数据的时间戳得到 HBase 行键, 一条数据记 录对应一条 HBase 行记录。 0058 对于历史数据 : 首先, 根据数据点的存储周期和段存储的时间区间大小确定对应 段存储时间区间的开始时间, 再根据时间区间的开始时间以及数据点 Id 得到 HBase 行键 ; 之后, 从历史数据表中查询该行键对应的行记录 ; 随后, 对查询到的行记录进行解析, 得。
33、到 相应时间区间各时刻的具体时序数据 ; 紧接着, 根据要写入的时序数据和查询到的已写入 的时序数据得到新的行记录 ; 最后, 把生成的行记录写入到历史数据表中。其中, 段存储行 记录的数据解析是 : 由行键解析出时间区间的开始时间 ; 由数据列值以及时序数据值部分 所序列化为比特串的固定宽度解析出各个时序数据的值 ; 根据时序值在时序数据值部分的 说 明 书 CN 103605805 A 8 6/6 页 9 位置以及时间区间的开始时间, 计算得到该时序值对应的时间戳, 把值和时间戳结合得到 具体的时序数据。 0059 对于大周期和无周期数据, 跟实时数据的一样, 根据数据点 Id 和实时数据。
34、的时间 戳得到 HBase 行键, 一条数据记录对应一条 HBase 行记录。 0060 再说数据读操作之前, 先说后台数据迁移。数据迁移的流程如图 3 所示。在数据 平台系统启动时, 启动数据迁移任务, 该任务之后会在系统后台一直运行着。 数据迁移任务 首先获知系统中都有哪些小周期数据点, 之后, 每隔一段时间一一遍历每个小周期数据点。 在遍历时, 对于每个小周期数据点, 计算该数据点的实时数据起始时刻, 紧接着读取实时数 据表中已变为了历史数据的简单行存储记录 ; 当读取到的记录不为空时, 汇集这些记录为 段存储记录, 并写所生成的段存储记录到历史数据表中 ; 当段存储记录成功写入到历史数。
35、 据表后, 从实时数据表中删除刚才所获取的行记录。 0061 下面说数据读操作。数据读操作的流程图如图 4 所示。根据数据点 Id 获知数据 的周期特性, 并根据数据的周期特性判定数据是实时数据、 历史数据、 大周期数据还是无周 期数据, 由此, 采用不同的方式到不同的数据表中进行读取。 0062 对于实时数据, 根据数据点 Id 和所要读取数据的时间戳得到 HBase 行键, 并根据 行键从实时数据表中检索相应的时序数据。 0063 对应历史数据, 首先需要根据数据点 Id、 存储周期以及所要读取数据的时间戳 判定需要读取哪一个时间区间的段存储, 并由相应段存储的开始时间以及数据点 Id 得。
36、到 HBase段存储的行键。 之后, 根据行键从历史数据表中读取记录。 当读取到的行记录不为空 时, 根据所要读取数据的时间戳以及该段存储的开始时间确定相应数据值在行记录值部分 比特串的位置, 并由此提取提取比特串, 进而进行解析得到所要读取的时序数据的值部分。 0064 对于大周期和无周期数据, 跟实时数据的一样, 根据数据点 Id 和所要读取数据的 时间戳得到 HBase 行键, 并根据行键从相应的数据表中检索相应的时序数据。 0065 下面说数据删除操作。数据删除操作的流程图如图 5 所示。对于实时数据、 大周 期数据和小周期数据, 根据所要删除数据的时间戳和数据点 Id 确定行键, 并。
37、根据行键从相 应的数据表删除对应的行记录。 对于历史数据, 如果是删除区间数据, 则计算对应段存储的 时间区间, 判定是否会删除一个段存储完整时间区间的数据, 如果是, 则根据行键直接删除 历史数据表中对应行记录 ; 否则, 计算段存储行键, 从历史数据表中读取相应行记录 ; 如果 读取到的行记录不为空, 则置行记录值部分的相应区段为序列化为比特串的 Double.NaN, 紧接着, 判断该行记录值部分的所有数据均为 Double.NaN, 如果是, 删除历史数据表中对应 行记录, 否则, 把更新过的行记录写到历史数据表中。 0066 以上所述仅为本发明的实施例, 凡以本发明说明书及附图内容所作的均等变化与 修饰, 皆应属本发明专利的涵盖范围。 说 明 书 CN 103605805 A 9 1/4 页 10 图 1 图 2 说 明 书 附 图 CN 103605805 A 10 2/4 页 11 图 3 说 明 书 附 图 CN 103605805 A 11 3/4 页 12 图 4 说 明 书 附 图 CN 103605805 A 12 4/4 页 13 图 5 说 明 书 附 图 CN 103605805 A 13 。