Apache IotDB
Apache IoTDB 是一个用于存储时间序列数据的数据库。因此,它可以很好地用于管理由 PLC4X 采集的数据。
数据模型(概念)
给定一个 PLC 地址和若干字段,我们可以把 PLC 看作 IoTDB 中的一个 device,把每个字段看作 IoTDB 中的一个 measurement。若干 PLC 构成一个 storage group。
例如,存在一个虚拟存储组 mi,以及一个 PLC d1,它有一个字段 RANDOM/foo:Integer。那么在 IoTDB 中,我们可以得到一条时间序列 root.mi.d1.foo(或者 root.mi.d1.RANDOM_foo_Integer,随你所愿)。然后,我们可以使用 JDBC 通过 SQL,或使用称为 Session API 的原生 API 将数据写入 IoTDB。
示例
https://github.com/apache/plc4x-extras/tree/develop/plc4j/examples/hello-integration-iotdb](https://github.com/apache/plc4x-extras/tree/develop/plc4j/examples/hello-integration-iotdb) 展示了一个使用 PLC4X 采集数据并将其写入 IoTDB 的示例。
要运行该 Java 示例,需要提供一些参数:
例如,java -jar ….. --connection-string simulated://127.0.0.1 --field-address RANDOM/foo:Integer --polling-interval 1000 --iotdb-address 127.0.0.1:6667 --iotdb-user-name root --iotdb-user-password root --iotdb-sg mi --iotdb-device d1 --iotdb-datatype INT32 --use-jdbc false
随后 PLC4x 将从一个模拟的 PLC 设备采集数据,该设备每 1 秒生成一个随机整数。IoTDB 的地址是 127.0.0.1,端口是 6667。数据将被存储在设备 root.m1.d1 中,测量(measurement)名称为 RANDOM_foo_Integer。
如果你使用的是默认配置的 IoTDB v0.10.0,并且没有手动创建上述时间序列,那么 IoTDB 会将数据视为 float。因此,在程序运行几秒之后,你可以使用 IoTDB 的命令行查询数据:select * from root.mi.d1;
+-----------------------------+-----------------------------+
| Time|root.mi.d1.RANDOM_foo_Integer|
+-----------------------------+-----------------------------+
|2020-07-16T20:01:39.216+08:00| -1.34242598E9|
|2020-07-16T20:01:40.150+08:00| -9.4141104E7|
|2020-07-16T20:01:41.154+08:00| 1.40969664E9|
|2020-07-16T20:01:42.155+08:00| 9.5824531E8|
|2020-07-16T20:01:43.157+08:00| -4.207406E7|
+-----------------------------+-----------------------------+关于 IoTDB 的详细用法,可参见 https://iotdb.apache.org/UserGuide/Master/Client/Programming%20-%20Native%20API.html
评论
登录后参与评论
KnowForge