DolphinDB在工业物联网的应用
本页介绍工业物联网数据的平台需求与痛点,并说明DolphinDB在该场景下的解决思路与对比讨论。
Source: https://dolphindb.cn/blogs/28
What this page covers
- 工业物联网数据特点与系统痛点梳理
- DolphinDB在IIoT存储与计算方面的能力概览
- 示例场景规模与实时/离线任务需求
- 案例模块设计:分布式库、流订阅聚合、前端轮询展示
- 案例部署:单机多节点与Streaming启用、生产部署建议
- 实现步骤:建表、入库、聚合、Grafana查询、数据模拟与脚本链接
技能认证特训营第二期报名提示
页面顶部展示技能认证特训营第二期开启与限时报名链接的提示信息。
- 页面包含技能认证特训营第二期的提示信息。
- 页面提供限时报名链接。
DolphinDB在工业物联网的应用(文章信息)
本部分包含文章标题、作者标识与发布日期信息。
- 文章标题为“DolphinDB在工业物联网的应用”。
- 发布日期为2021-05-20。
工业物联网的数据特点和痛点
本部分描述工业物联网数据高频、多设备、高维度与海量特性,并提出高吞吐、低延时、实时与离线分析并存的要求;同时讨论传统数据库与Hadoop组合方案的不足。
- 工业物联网数据采集具有高频率与设备数量多的特点。
- 工业物联网采集数据维度高,数据量非常大。
- 平台通常需要实时处理数据用于预警与监控。
- 平台通常需要对海量历史数据进行离线建模与分析。
- 传统事务型数据库与Hadoop生态组合方案在该场景存在适用性与成本问题。
DolphinDB的工业物联网解决方案
本部分概述DolphinDB在工业物联网场景中,围绕分布式存储、流计算、内存结果承载、库内分布式计算与BI接口等能力的组合。
- DolphinDB定位为高性能分布式时序数据库,可作为IIoT存储与计算基础平台。
- DolphinDB支持实时流计算处理与按时间窗口聚合。
- 聚合结果可输出到内存表以支持前端秒级轮询。
- DolphinDB支持库内完成复杂分布式计算以加快离线分析与建模。
- DolphinDB实现与部分BI工具的接口,便于可视化或监控设备数据。
案例综述
本部分给出示例场景规模与任务需求:原始数据入库用于离线建模、实时聚合计算、以及前端按秒级频率查询刷新。
- 示例场景包含1000个传感设备。
- 每个设备每10ms采集一次数据。
- 示例中假设采集数据仅有三个维度且均为温度。
- 任务包含将原始数据存入数据库用于离线建模的历史数据。
- 任务包含实时计算每个设备过去一分钟平均温度,并每两秒计算一次。
案例实施:系统功能模块设计
本部分说明案例的模块化设计:创建分布式数据库与分区策略、启用流发布订阅与聚合引擎做实时计算、以及通过Grafana前端轮询展示结果。
- 示例创建名为 iotDemoDB 的分布式数据库用于保存采集的实时数据。
- 示例按日期与设备两个维度分区。
- 示例启用流数据发布与订阅以订阅高频数据流进行实时计算。
- 示例配置窗口大小为1分钟,并每2秒运算一次均值。
- 示例中Grafana前端每1秒轮询DolphinDB并刷新展示界面。
案例实施:服务器部署
本部分描述demo使用的单机多节点集群配置与Streaming模块启用要求,并给出生产环境建议使用多物理机集群及相关部署指南链接。
- 本次demo需要使用单机多节点集群。
- 示例集群包含1个controller、1个agent与4个datanode。
- 系统默认不启用Streaming模块,需要在cluster.cfg中显式启用。
- demo为避免复杂化,仅启用node1做数据订阅。
- 生产环境部署建议使用多物理机集群。
案例实施:实现步骤(建表、订阅入库、流聚合、Grafana查询、数据模拟)
本部分给出实现步骤要点,包括流表与持久化、订阅批量写入分布式表、创建流聚合引擎与结果表、Grafana查询示例、模拟数据生成方式与脚本下载链接。
- 示例使用流数据表sensorTemp接收实时采集的温度数据。
- sensorTemp配置内存最大保留行数为100万行。
- 订阅数据在达到100万条或间隔10秒时批量写入分布式数据库。
- 分布式表按日期与设备编号两个维度分区。
- 示例创建流聚合引擎按hardwareId分组,窗口60秒并每2秒计算均值。
- 聚合结果写入结果流表sensorTempAvg用于展示。
- Grafana可通过DolphinDB数据源插件查询sensorTempAvg并展示指定设备数据。
- 示例提供模拟程序生成10ms频率的温度数据并写入sensorTemp。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| DolphinDB在工业物联网的应用 | 发布日期 | 2021-05-20 | high |
| 工业物联网数据采集 | 数据特点 | 频率高、设备多、维度高,数据量非常大,对系统吞吐量要求很高 | medium |
| 工业物联网数据平台 | 实时能力需求 | 需要系统能够实时处理数据用于预警、监控,甚至反控;可能需要图形化终端供操作工实时监控设备运行 | medium |
| 工业物联网数据平台 | 离线分析需求 | 对采集到的海量历史数据通常需要离线建模和分析 | medium |
| 工业物联网数据平台 | 综合要求 | 需要高吞吐、低延时;既能实时处理流数据又能处理海量历史数据;既满足点查询又满足批量复杂分析 | medium |
| 传统事务型数据库(SQL Server/Oracle/MySQL) | 适用性 | 无法满足高吞吐量的数据写入和海量数据分析;即使数据量较小能满足写入,也不能同时响应实时计算请求 | medium |
| Hadoop生态组合方案 | 覆盖组件 | 提供消息引擎、实时数据写入、流数据计算、离线数据仓库、离线数据计算等多个部件 | medium |
| Hadoop生态组合方案 | 代价 | 方案过于庞大和臃肿,实施和运维成本很高 | medium |
| DolphinDB database | 定位/类型 | 高性能的分布式时序数据库,为工业物联网的数据存储和计算提供基础平台 | medium |
| DolphinDB分布式数据库 | 扩展能力 | 可方便支持水平扩展和垂直扩展;系统吞吐量和支持的数据量可近乎无限扩展 | low |
| DolphinDB流计算引擎 | 能力 | 支持实时流计算处理;内置聚合引擎可按指定时间窗口大小和频率计算聚合指标;支持纵向(高频到低频)与横向(多维度)聚合 | medium |
| DolphinDB内存数据库 | 用途 | 支持数据快速写入、查询和计算;聚合结果可输出到内存表以接受前端BI(如Grafana)的秒级轮询 | medium |
| DolphinDB(数据库+分布式计算+编程语言一体) | 库内计算 | 可在库内快速完成复杂的分布式计算(例如回归和分类),加快海量历史数据的离线分析和建模 | medium |
| DolphinDB | BI工具接口 | 实现与部分开源或商业化BI工具的接口,便于可视化或监控设备数据 | medium |
| 示例场景(生产车间) | 传感设备数量 | 1000个传感设备 | high |
| 示例场景(每个设备采集频率) | 采集周期 | 每10ms采集一次数据 | high |
| 示例场景(采集维度) | 维度说明 | 为简化demo脚本,假设采集数据仅有三个维度,均为温度 | high |
| 示例任务 | 原始数据处理 | 将采集到的原始数据存入数据库,用于离线建模的历史数据 | high |
| 示例任务 | 实时计算指标 | 实时计算每个设备过去一分钟平均温度;每两秒钟计算一次 | high |
| 示例任务(前端展示) | 查询/刷新频率 | 前端展示界面每秒查询一次实时运算结果并刷新趋势图 | high |
| 示例实现(DolphinDB分布式数据库) | 数据库名称 | 创建名为 iotDemoDB 的分布式数据库用于保存采集的实时数据 | high |
| 示例实现(iotDemoDB分区策略) | 分区维度与类型 | 按日期和设备两个维度分区;日期采用值分区,设备采用范围分区 | high |
| 示例实现(过期数据清理) | 清理方式 | 删除旧的日期分区即可清理过期数据 | medium |
| 示例实现(流发布与订阅) | 用途 | 启用流数据发布和订阅功能,订阅高频数据流做实时计算 | high |
| createStreamingAggregator函数 | 用途 | 可创建指标聚合引擎用于实时计算 | high |
| 示例实现(聚合窗口与频率) | 配置 | 窗口大小1分钟;每2秒钟运算一次过往1分钟的温度均值;结果保存到低频数据表供前端轮询 | high |
| Grafana前端平台(示例部署) | 轮询频率 | 每1秒钟轮询一次DolphinDB Server并刷新展示界面 | high |
| 本次demo(分布式数据库) | 部署形态 | 需要使用单机多节点集群 | high |
| 单机多节点集群部署指南 | 参考链接 | https://github.com/dolphindb/Tutorials_CN/blob/master/single_machine_cluster_deploy.md | high |
| 本次demo集群配置 | 节点组成 | 1个controller + 1个agent + 4个datanode | high |
| DolphinDB Streaming模块 | 默认状态 | 系统默认不启用Streaming模块功能,需要在cluster.cfg里显式配置启用 | high |
| 本次demo(Streaming订阅节点) | 约束/选择 | 因数据量不大且为避免demo复杂化,只启用node1做数据订阅 | high |
| 实际生产环境部署建议 | 集群形态 | 建议使用多物理机集群 | medium |
| 多物理机集群部署指南 | 参考链接 | https://github.com/dolphindb/Tutorials_CN/blob/master/multi_machine_cluster_deploy.md | high |
| sensorTemp(流数据表) | 用途 | 用于接收实时采集的温度数据 | high |
| sensorTemp持久化配置 | 内存最大保留行数 | 100万行 | high |
| sensorTemp(流数据表) | 字段定义 | hardwareId, ts, temp1, temp2, temp3;类型分别为 INT, TIMESTAMP, DOUBLE, DOUBLE, DOUBLE | high |
| subscribeTable(保存到分布式数据库) | 写入触发条件/频率参数 | 仅当订阅数据达到100万或时间间隔达到10秒才批量写入分布式数据库 | high |
| 分布式表(物联网场景分区) | 分区维度 | 日期和设备编号两个分区维度 | high |
| 物联网大数据场景(过时数据清除) | 分区模式带来的清理方式 | 可通过删除指定日期分区快速清理过期数据 | medium |
| iotDemoDB(DolphinDB DFS数据库) | DFS路径/名称 | dfs://iotDemoDB | high |
| 示例分区数据库db1 | 分区类型与范围 | VALUE 分区,范围 2018.08.14..2018.12.20 | high |
| 示例分区数据库db2 | 分区类型与范围 | RANGE 分区,范围 0..10*100 | high |
| dfsTable(分布式分区表) | 创建方式 | 通过 db.createPartitionedTable(sensorTemp, "sensorTemp", `ts`hardwareId) 创建 | high |
| createStreamAggregator函数 | 参数语义(文中说明) | 窗口时间、运算间隔时间、聚合运算元代码、原始数据输入表、运算结果输出表、时序字段、分组字段、触发GC记录数阈值 | high |
| createStreamAggregator(示例配置) | 窗口大小 | 60秒(60000ms) | high |
| createStreamAggregator(示例配置) | 运算间隔 | 每2秒(2000ms)做一次求均值运算 | high |
| createStreamAggregator(示例聚合内容) | 聚合指标 | avg(temp1), avg(temp2), avg(temp3) | high |
| createStreamAggregator(示例分组字段) | 分组字段 | hardwareId | high |
| 示例场景(设备队列/并行计算) | 队列数量 | 将流数据按设备分成1000个队列进行均值运算 | high |
| sensorTempAvg(结果流数据表) | 用途 | 保存实时计算得到的平均温度结果 | high |
| sensorTempAvg(结果流表) | 字段定义 | time, hardwareId, tempavg1, tempavg2, tempavg3;类型分别为 TIMESTAMP, INT, DOUBLE, DOUBLE, DOUBLE | high |
| Grafana与DolphinDB | 数据源插件 | DolphinDB提供 Grafana_DolphinDB datasource 插件 | high |
| Grafana配置教程 | 参考链接 | https://github.com/dolphindb/grafana-datasource/blob/master/README.md | high |
| Grafana前端程序(示例) | 轮询频率 | 每秒钟轮询实时运算结果并刷新平均温度趋势图 | high |
| Grafana Graph Panel(示例查询) | SQL示例 | select gmtime(time) as time, tempavg1, tempavg2, tempavg3 from sensorTempAvg where hardwareId = 1 | high |
| Grafana查询示例 | 含义说明 | 选出1号设备实时运算得到的平均温度表数据用于展示 | high |
| 图片说明(AI说明块) | 展示内容 | 展示在Grafana仪表板中通过DolphinDB插件实时展示1号设备平均温度趋势图的配置界面,并显示SQL查询语句与每秒自动刷新趋势 | low |
| 数据模拟(数据规模) | 设备数量 | 1000个设备 | high |
| 数据模拟(数据规模) | 每点维度数 | 每个点3个维度 | high |
| 数据模拟(数据规模) | 生成频率 | 10ms的频率生成数据 | high |
| 数据模拟(数据规模) | 单维度字节数与类型 | 每个维度8个Byte(Double类型) | high |
| 数据模拟(数据规模) | 数据流速 | 24Mbps | high |
| 数据模拟(数据规模) | 持续时间 | 持续100秒 | high |
| 数据模拟程序(writeData/submitJob) | 行为 | 生成模拟温度数据并写入流数据表sensorTemp(通过sensorTemp.append!)并提交作业simulateData | high |
| 数据模拟程序(writeData) | 循环次数 | for (i in 0:10000) | high |
| 数据模拟程序(writeData) | 每轮生成的记录数 | take(1..hardwareNumber, hardwareNumber);hardwareNumber=1000(每轮按设备数生成) | high |
| 完整demo脚本 | 下载链接 | https://github.com/dolphindb/Tutorials_CN/blob/master/script/iot_demo_script.txt | high |
| 技能认证特训营第二期 | 限时报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |