Skip to Content
数据处理

数据处理与架构

IronFlock 提供了一套完整的端到端数据采集和存储基础设施——从边缘到云——以可扩展性、安全性和明确的数据所有权为设计目标。无论您是路由来自数千个传感器的遥测数据,还是构建实时 SCADA 界面,IronFlock 的数据架构都能确保您的信息安全、隔离且可访问。

消息路由与安全 realm

IronFlock 实时通信的核心是一个强大的消息路由集群。该消息基础设施将您项目中各种边缘设备彼此连接,并连接到 IronFlock 云基础设施。

为了确保严格的数据安全和隔离,路由集群在语义上被划分为安全 realm。realm 是隔离的子网——消息被严格限制在其中,这意味着数据和命令绝不会离开或跨越 realm。

运行在边缘设备上的应用可以使用 ironflock-sdk 通过这些消息 realm 以下列方式之一进行通信:

  • 发布/订阅 (Pub/Sub): 非常适合持续广播传感器遥测或状态变化。
  • 远程过程调用 (RPC): 完美适用于直接触发操作或安全地查询设备状态。

动态配置的项目数据库

对于持久存储和历史分析,IronFlock 为每个项目配置一个专用的物理 TimescaleDB 数据库。

此项目数据库作为项目中安装的每个应用的中央数据采集中心:

  • 应用数据后端: 您项目中安装的所有应用的数据后端都安全地存储在此数据库中。再安装一个应用,它就会在第一个应用的表旁边添加自己的表——一个运行多个应用的项目最终会将它们的所有数据集中收集在一处,可以一起查询。
  • 直接采集: 当设备应用使用 ironflock-sdk 发布数据时,这些流会直接采集并组织到项目数据库中。
  • 读取访问(需经许可): 默认情况下,应用只读取自己的数据,但经您批准后,同一项目中的一个应用也可以读取另一个应用的数据——从而让应用能够基于彼此的读数进行构建。您可以控制并撤销这种共享(见下文)。
IronFlock 的 Fleet Database 视图,显示 App Demo 的 sensordata 表,包含温度、湿度和时间戳等实时遥测数据

由于项目数据库作为您运营的唯一真实来源,它解锁了高级功能:

  • SQL 查询: 直接在原始历史表上编写强大的查询。
  • Physical AI 集成: 让 IronFlock AI 代理以自然语言提取、分析和查询您的数据。
  • 可视化数据源: 项目数据库是实时看板、IoT 仪表板和 SCADA 看板的终极数据源。

自定义转换

应用写入的表,很少恰好就是您想提出的那个问题的形状。设备综合效率(OEE)要把可用率、性能和质量结合起来;班次报表需要按小时分桶;对比两台机器则意味着要连接两个不同应用的表。自定义转换把这类问题回答一次:它是一条以名称保存下来的 SQL 查询,此后就像项目中的任何其他表一样使用。

创建转换并不是应用开发者的工作。任何拥有数据访问权限的项目成员——也就是打开 SQL 查询控制台的那个权限——都可以保存转换;当看板需要某个原始表中并不存在的数值时,IronFlock AI 助手也可以按要求创建一个。转换位于所有应用之外,存放在项目自己的 IronFlock 空间中,因此一个转换可以跨项目中安装的所有应用的表进行读取。

  • 查询只写一次。 在项目数据视图的查询控制台中编写查询,然后选择另存为转换,或者直接前往那里的转换标签页。源表以 databackend_<key>.<table> 的形式引用——也就是数据树在每个应用旁显示的名称。
  • 选择它的计算方式。 物化转换会持久化存储其结果,并按您设定的计划重新计算,最快每分钟一次。普通视图则在每次读取时计算:始终是最新的,但速度取决于其查询本身。
  • 描述它返回什么。 转换带有一段描述,每个结果列也各自带有显示名称和描述。它们与转换一起存储在数据库中,正是小部件编辑器所展示、AI 助手所读取的内容——描述良好的转换,助手在数月之后仍能正确使用。
  • 像表一样绑定它。 转换会出现在小部件编辑器数据选择器的 IronFlock 之下,与各应用的表并列,并接入同一条实时通道:当它刷新时,绑定到它的看板也会刷新。

编写行为良好的转换

转换返回的正是它自身 SQL 所选出的行。小部件的时间窗口、日历过滤器以及 latest 模式适用于表,在这里会被忽略,因此有三个习惯值得养成:

  • 在查询内部限定时间范围,例如 WHERE tsp > now() - interval '7 days'。单次读取还有 3000 行的上限,因此请在查询中聚合,而不是选出原始历史数据。
  • 让时间序列按从新到旧排序(ORDER BY <时间列> DESC)。这样小部件收到的行是从旧到新的,而在行数上限生效时,保留下来的是最新的那些行。
  • 选出所有您想绘制或过滤的列。 转换没有隐含的时间戳列或设备列:小部件只能使用查询实际返回的内容。

如果某个转换不再工作——它读取的应用被卸载了、它用到的列消失了——转换标签页会显示原因,而其他转换继续运行。在看板上读取转换所遵循的访问规则,与任何应用的数据相同;数据访问只决定谁可以编写转换。

应用开发者也可以改为在应用的数据模式中声明转换,随应用一起发布——参见转换表。两种转换的读取方式完全相同。

项目文件存储

并非应用产生的所有内容都适合放入表中。除了项目数据库之外,每个项目还拥有一个用于存放对象的私有文件存储——摄像头帧、PDF 报告、固件镜像、音频片段、导出文件——其治理原则与数据库完全相同。

  • 每个应用都会自动获得存储空间。 当应用安装时,IronFlock 会在项目的文件存储中为其配置一个私有存储区域,就像为应用配置数据库表一样。多个应用将各自的文件汇集到同一个项目存储中,每个应用的对象都与其他应用的对象清晰隔离。
  • 同样的所有权保证适用于此。 这些文件归项目所有者所有,而非应用开发者。您可以浏览、下载、限额和删除它们,而应用的开发者无法看到该应用在您项目中运行时采集的文件。
  • 文件直接链接到您的数据。 存储的对象带有一个永久的、受访问控制的 URL,应用可以将其写入数据库列中——因此仪表板小部件无需额外工作即可渲染该图像或文档,而撤销用户对项目的访问权限也会同时撤销他们获取文件的能力。
  • 您掌控预算。 每个应用的存储设置会显示其使用量,并允许您设置存储限额、清空表或删除应用的所有文件。而对于平台之外的工具——使用 DuckDB 的分析师、每晚的备份——您可以签发范围限定于单个应用文件的只读 S3 凭据。

文件存储可以在表格旁边直接浏览:项目的数据视图为每个应用显示一个文件条目,列出每个存储对象及其大小、类型和日期。有关开发者端的详细信息——声明存储、命名空间、保留策略以及 SDK 调用——请参阅文件存储。

在应用之间共享数据

同一项目中的应用默认是相互隔离的:每个应用只读取和写入自己的表和自己的文件。这是一个安全的起点——您为计量能耗而安装的应用无权读取另一个应用的检测照片,除非您决定允许它这样做。

但应用之间往往应该协同工作——分析应用读取监控应用的历史记录,报告应用从质量应用中提取照片。IronFlock 通过一个由您控制的许可决定(在使用方应用的设置中)使之成为可能:

  • 您可以精确批准某个应用可以读取哪些提供方,并且您会看到该应用给出的访问请求理由。未经您的明确批准,任何内容都不会被共享。
  • 一次授权涵盖枢纽的两个部分——提供方应用共享的表以及它共享的文件。您无需分别管理数据库和文件权限。
  • 访问权限为只读。 使用方应用可以查看另一个应用的数据,但绝不能更改或删除它。
  • 您可以随时撤销,访问权限会立即停止。

至于哪些内容可供共享,则由应用开发者按表和按文件命名空间来决定——有些数据应用会严格保留为内部使用,这些数据永远不会作为您可以授予的内容出现。在可共享的内容中,由您决定是否实际共享它。开发者端的机制记录在从其他应用获取数据中。

数据所有权与欧盟数据法

IronFlock 建立在一个清晰的原则之上:项目所有者是数据的所有者——而不是应用开发者。

应用生成的所有数据——来自边缘设备的遥测流、事件日志、派生分析——都存储在属于项目所有者的项目数据库中。应用开发者编写应用,但这些应用在项目中运行时生成的数据,完全归托管它们的项目所有。

此模型直接符合欧盟数据法 (EU Data Act) 的要求,该法案赋予互联产品和相关服务的用户对其设备生成数据的完全控制权。在 IronFlock 中:

  • 独占控制。 项目所有者对项目数据库拥有完全的管理权限——他们可以读取、导出、删除和备份其中包含的所有数据。
  • 无静默数据收集。 应用开发者除非明确被邀请到项目中,否则无权访问项目数据。项目不存在回到应用开发者的隐藏数据管道。
  • 可移植性。 所有数据都存储在标准的 TimescaleDB 实例中,因此您可以使用 SQL 查询、以开放格式导出并随意迁移——项目所有者永远不会被锁定。
  • 细粒度共享。 项目所有者可以邀请应用开发者、集成合作伙伴或其他利益相关方加入项目,并授予他们对特定数据区域的细粒度访问权限。这使得可以利用第三方技术支持、远程维护或专业分析服务,条件由所有者定义并可随时撤销。

简而言之:应用产生数据,但项目所有者拥有、控制和共享它。此所有权模型是 IronFlock 平台的一等设计目标,而非事后考虑。

选择退出:绕过 IronFlock 数据管道

IronFlock 的消息层和项目数据库是推荐路径——它们开箱即用地提供实时路由、持久存储、仪表板就绪的数据和内置的所有权保证。然而,IronFlock 不强制应用使用此管道。

在 IronFlock 管理的设备上运行的应用是普通的容器工作负载,保留完整的网络和系统自由。如果项目所有者或应用开发者更喜欢不同的数据处理堆栈,应用可以:

  • 推送到外部系统。 将数据直接发送到第三方代理(MQTT、Kafka、AMQP)、云采集端点(AWS IoT、Azure IoT Hub、Google Cloud IoT)或自定义 REST / gRPC API。
  • 使用替代存储。 写入外部数据库(InfluxDB、MongoDB、S3、客户拥有的 TimescaleDB 等),而不是或与 IronFlock 项目数据库并行。
  • 桥接本地系统。 通过本地网络直接与现有的 MES、ERP、historian 或 SCADA 系统集成,无需通过 IronFlock 云。
  • 混合匹配。 将一部分数据发布到 IronFlock 用于仪表板和 AI 分析,同时将全保真数据流式传输到其他地方。

这种灵活性使 IronFlock 既适合用户端到端采用该平台的绿地部署,也适合数据目的地不可协商的现有企业数据架构集成。

在 IoT 仪表板和 SCADA 看板中使用数据

以可视化方式利用数据很简单。在 IoT 或 SCADA 看板上配置小部件时,几乎小部件的每个属性——如其标题、值或颜色——都可以动态绑定到项目数据库中的实时数据。

在 Board Studio 中编辑小部件时,配置字段下方有一个数据绑定开关。当您从表中选择特定列时,您为该属性建立了一个实时通道。一旦新的遥测数据到达数据库,绑定的属性就会自动实时更新,无需手动刷新 UI。

注意: 有关如何将小部件属性连接到数据库的深入说明,请参阅 IoT 仪表板文档的数据绑定部分。

Last updated on