4. PI Data Archive架构与存储原理

PI Data Archive 是 PI System 的核心历史数据库,它并不是一个普通的关系型数据库,而是一套面向时间序列优化的专有存储引擎。理解它的架构与存储原理,直接决定了后续数据采集是否稳定、查询是否高效、磁盘是否够用。本节从存储机制、压缩算法、性能特点和容量规划四个角度展开,并给出可执行的估算方法。

一、整体架构:从接口到归档的分层

PI Data Archive 的逻辑结构可以分成四层:接口层(PI Interface / PI Connector)、快照层(Snapshot)、归档层(Archive)和索引层(PI Point 定义与时间索引)。接口把现场数据写入快照,快照保存每个位号的最新值,归档文件按时间顺序持久化历史数据。位号(PI Point)是数据组织的基本单位,每个位号带有 Point Type、压缩偏差、工程单位等属性,这些属性共同决定了数据如何被存储和压缩。

需要特别区分两个概念:快照(Snapshot)只保留最新值,用于实时查询;归档(Archive)保存全部历史事件,是容量规划的主要对象。归档文件默认大小在 PI Data Archive 2018 及以后版本中为 2 GB(早期版本为 1 GB 或 2 GB 可配置),单个归档文件写满后自动切换到下一个归档文件,形成归档序列。

PI Data Archive 存储架构与数据流 接口 / 连接器 PI Interface / Connector 快照 Snapshot 仅保留最新值 归档 Archive(历史持久化) Archive 1 → Archive 2 → …(默认 2 GB/个) PI Point 定义(索引层) Point Type · 压缩偏差 · 工程单位 · 数据源 压缩判定(每个新值到达时) 新值到达 t, v 与上一归档值比较 |v − v_last| ≥ 压缩偏差? 是 → 写入归档 保留该事件 否 → 丢弃 仅更新快照 容量规划关键参数 位号数 N × 平均事件率 R(事件/秒) × 单事件字节 B × 保留时长 T 压缩比 = 原始采集点数 / 实际归档点数,典型 5:1 ~ 50:1,取决于偏差设置与信号波动

二、历史数据存储机制

PI Data Archive 采用事件驱动的存储方式。每个位号的数据以“时间戳 + 值 + 质量码”三元组形式记录,按时间升序写入归档文件。归档文件内部使用 B 树或类似索引结构,使按时间范围查询时无需全表扫描。归档文件写满后,系统自动创建新归档文件,旧文件保持只读,便于备份和迁移。

归档文件的位置由 PI Data Archive 的配置决定,通常分布在多个磁盘上以分散 I/O。归档文件一旦写满,不会自动删除,需要管理员通过 PI SMT 或归档管理工具手动配置归档保留策略。这一点与很多“自动滚动删除”的时序数据库不同,必须提前规划。

三、压缩算法:旋转门压缩

PI Data Archive 使用旋转门压缩(Swinging Door Compression),这是一种有损压缩算法。它的核心思想是:只有当一个新值偏离“上一归档值”超过设定的压缩偏差(Compression Deviation)时,才把该值写入归档;否则只更新快照,不写归档。

压缩偏差是每个位号可单独设置的参数,单位与工程单位一致。例如一个温度位号量程 0~200°C,压缩偏差设为 0.5°C,意味着温度变化小于 0.5°C 时不会产生归档记录。偏差设得越大,压缩比越高,但曲线细节丢失越多;偏差设得越小,存储越精确,但归档增长越快。

需要强调:压缩偏差不是“死区”,而是基于上一归档值的比较。旋转门算法会保留趋势转折点,因此对趋势查询友好,但对尖峰脉冲可能丢失。对于需要保留所有原始值的场景(如计量结算),应把压缩偏差设为 0 或使用 PI Buffer Subsystem 配合接口侧缓存。

四、性能特点

PI Data Archive 的性能优势主要体现在写入和查询两方面。写入侧,接口以批量方式提交数据,单台服务器可支撑数十万位号、每秒数十万事件的写入。查询侧,按时间范围读取时,归档文件的顺序存储和索引使查询延迟通常在毫秒级。

性能瓶颈通常出现在三个位置:一是归档文件所在磁盘的随机 I/O 能力;二是快照层的内存占用,位号越多内存需求越大;三是压缩偏差设置过小导致归档文件快速增长,进而拖慢查询。实际运维中,建议把归档文件放在独立的高速磁盘或 SSD 上,并定期检查归档文件数量和增长速率。

五、容量规划方法

容量规划的核心是估算归档文件增长速率。一个可用的估算公式如下:

归档增长速率 ≈ N × R × B / 压缩比

其中:
  N  = 位号数量
  R  = 每个位号平均事件率(事件/秒)
  B  = 单事件存储字节数(PI 中约 16~24 字节,含时间戳、值、质量码和索引开销)
  压缩比 = 原始事件数 / 实际归档事件数

举例说明(以下为教学示例,非实测数据):某工厂有 5000 个位号,平均每个位号每秒产生 1 个事件,单事件按 20 字节估算,压缩比按 10:1 估算。则每秒归档增长约为 5000 × 1 × 20 / 10 = 10000 字节/秒,即约 10 KB/s。一天约 864 MB,一年约 315 GB。若保留 3 年,需要约 1 TB 归档空间,再考虑归档文件切换和备份冗余,建议预留 1.5~2 倍余量。

实际规划时,压缩比不能拍脑袋,应先用 PI SMT 的 Archive Statistics 或 PI System Explorer 查看现有位号的实际压缩比,再按位号分组分别估算。对于波动剧烈的位号(如流量、振动),压缩比可能只有 3:1~5:1;对于温度、液位等缓变量,压缩比可达 50:1 以上。

容量规划建议每季度复核一次:对比实际归档增长与预测值,若偏差超过 20%,应检查是否有位号压缩偏差设置过小、是否有新增高频位号、是否有接口重复写入。

六、规划检查清单

  • 确认位号总数与分组,按波动特性分类估算压缩比。
  • 确认每个位号的压缩偏差设置,避免“默认值”一刀切。
  • 确认归档文件存放磁盘的容量、IOPS 和冗余方式。
  • 确认归档保留策略:保留多久、是否归档到二级存储。
  • 确认备份方案:归档文件是否可在线备份,备份窗口是否影响写入。
  • 确认监控项:归档文件数量、磁盘剩余空间、归档增长速率、快照内存占用。

掌握以上机制后,就能在部署阶段做出合理的位号定义、压缩偏差设置和磁盘规划,避免上线后因归档暴涨或查询变慢而被动扩容。