时间序列数据存储和检索设计, 是设备运行监测应用领域的关键技术环节. 我根据以往项目中的经验, 结合设备运行监测数据特征, 基于 Oracle 数据库, 采用创新的时间序列数据存储模式, 在不降低数据质量的前提下, 极大的压缩存储空间, 提升检索效率.
考虑到实时运行监测数据特性和业务应用要求, 自定义时间序列数据存储格式, 以减少数据存储容量, 提升数据访问效率, 时间序列库存储格式如下:
基于时间序列的存储和检索模式
(1) 以光伏发电为例, 光伏发电是白天并网发电夜间离网的周期性运行模式, 以天为单位将每个测点 5 分钟一次的数据基于时间序列库进行压缩存储. 每天生成一个唯一的 RowKey 作为标识, 每个 RowKey 使用 6 个字节存储设备编号, 测点编号和日期; 一天内的数据采用 Key-Value 模式顺序存储, Key 为距离第一个数据的个数, Value 为测量点数值. 如上图中所示, 某逆变器效率数据每 5 分钟采集一次, 2 月 1 日, 逆变器设备并网时间为 15 小时, 则改组数据中共有 180 条记录; 2 月 2 日并网 14 小时, 共有 168 条记录. 每组数据按照字节流方式顺序存储.
(2) 在时间序列库中进行一天的数据块的特征值汇聚. 特征值是针对这一类监测点再设计阶段定义的, 例如针对逆变器效率的测量点, 预先定义的特征值为最大效率, 最小效率, 平均效率, 效率小于 98% 的次数等. 数据处理功能对于每天的原始数据进行特征值汇聚, 并将这些特征值的结果与 RowKey 关联并存储.
(3) 在数据库中建立反向索引. 再设计阶段定义特征值可能被查询的方式, 例如逆变器效率告警条件为一天内出现效率小于 98% 的次数大于 3 次, 这些相当于全文检索中的关键字. 针对这些关键字建立反向索引. 反向索引则直接指向时间序列库中的 RowKey. 当用户针对全部历史数据查询曾经出现逆变器效率告警所有设备的名称时, 无需进行全数据扫描, 直接利用反向索引就可以快速检索出所对应的设备名称.
(4) 在系统设计阶段, 根据用户所有的历史数据检索需求进行分解, 解构成为若干反向索引, 保证用户查询速度.
来源: http://www.jianshu.com/p/f7b0817d931a