EdgeX&IoTDB
EdgeX Foundry是由Linux基金会运维的、全球领先的开放源码边缘计算软件框架。自2017年开源之后,在世界各地的各行业、各场景上得到了广泛的应用。从2018年起,VMware与众多行业合作伙伴在中国社区推广EdgeX技术、拓展生态,并持续地贡献代码。
IoTDB是由Apache基金会运维的一款时序数据库管理系统,可以为用户提供数据收集、存储和分析等服务。IoTDB的创始团队来自清华大学软件学院,并一直在领导IoTDB社区的开发和推广工作。
EdgeX Foundry v2.x在2020年因为开源许可证变更的原因移除了MongoDB之后,目前使用Redis作为元数据存储服务。然而Redis是一款内存型开源数据库,主要用作高速缓存、流数据引擎和消息代理,一般不用作保存大量采集的数据。如果用户希望在边缘侧大量保存业务数据,经常需要自行集成第三方软件。IoTDB 是针对时间序列数据收集、存储与分析一体化的数据管理引擎。IoTDB的边缘版本具有体量更轻、性能高、易使用的特点,适用于工业物联网应用中海量时间序列数据高速写入和复杂分析查询的需求。
然而EdgeX Foundry和IoTDB定义的数据模型和类型互不兼容,EdgeX Foundry无法直接调用IoTDB的接口存储输出的数据。下表是它们各自支持的数据类型。
EdgeXFoundry | IoTDB |
---|---|
bool | BOOLEAN |
int32 | INT32 |
Int64 | INT64 |
float32 | FLOAT |
float64 | DOUBLE |
string | TEXT |
unint8-64, binary, array, object等 | 不支持 |
表-1 EdgeX Foundry和IoTDB数据类型对比
针对这样的情况,我们实现了EdgeX Foundry与IoTDB集成的适配服务。该服务启动后会自动设置存储空间、存储路径、数据模型转换等一系列配置,使EdgeX Foundry采集到的数据自动转储到IoTDB边缘版实例中,无需额外的手工配置。
EdgeX Foundry和IoTDB适配服务功能如下图所示:
EdgeX Foundry 与IoTDB适配服务的基本策略:
- 默认存储空间名称为edgexfoundry,支持修改
- 默认丢弃不支持的数据类型
- 以EdgeX模型Reading而非Event中的时间戳作为IoTDB所保存序列的时标
该EdgeX Foundry与IoTDB的适配服务支持原码和容器双模式运行。运行该服务前,请保持EdgeX Foundry和IoTDB都在运行中,且位于同一个主机(虚机或物理机)上。
- Docker模式运行如下命令:
docker run -d -p 59990:59990
-e DATABASES_PRIMARY_HOST=iotdb_host
-e MESSAGEQUEUE_HOST=edgex-redis
--network edgex-network
--name edgex-iotdb-adapter
huaqiaoz/edgex-iotdb-adapter:0.1.0
- 原码模式执行如下命令:
make build
cd cmd/
./adapter-server
http://mmbiz.qpic.cn/mmbiz_jpg/bKQxkxMxib3bknFQRJSLCjRZFsAOlmlgYIqHxSeynib76E1BMbwqw3PZ4uwzuOVaQ4jA4HKf2NiaB7sdmvzmQ0kgg/0?wx_fmt=jpeg&wxfrom=16
IoTDB内置的同步工具(tsfile sync tool)可以定期将本地实例中持久化的tsfile文件上传至在云侧运行的IoTDB服务上。使用该同步工具需要首先启动IoTDB,且该工具目前不支持在外部主机,因此暂时未集成到本适配服务中,尤其是在容器模式场景下。
本适配服务的源代码已经开放至:
https://github.com/badboy-huaqiao/edgex-iotdb-adapter
容器镜像文件可以到
https://hub.docker.com/repository/docker/huaqiaoz/edgex-iotdb-adapter 下载。