简单的 SQL,实现 IoTDB 无缝流动同步!
之前的推文中我们介绍了 IoTDB 端边云同步技术的功能和特点,也了解其在多级时序数据管理场景中能够帮助企业实现更高效、可靠的端边云数据一站式管理。
IoTDB 以简洁灵活的 SQL 操作和直观的配置方式,为用户提供了一种高效的数据同步解决方案。只需简单的 SQL 配置步骤,即可一键生成并启动 IoTDB 的端边云同步任务,实现数据在端、边、云之间的无缝流动。
今天我们一起继续深入探索 IoTDB 端边云同步的 5 大常见场景以及它们非常简便的使用方式。
01
场景一:基础数据同步
基础数据同步分为两种常见模式:
全量数据同步:将一个 IoTDB 实例中的所有数据完整地同步到另一个 IoTDB 实例,同时确保数据的高可用性和安全性。这一功能在数据备份、灾难恢复以及数据迁移等场景中尤为常用。
范围数据同步:将一个 IoTDB 实例中的指定时间范围、指定测点的数据同步到另一个 IoTDB 实例。这一功能在关键数据备份与恢复场景中较为常见。
在此场景中,IoTDB 通过一条简单的 SQL 命令即可实现全量或范围数据同步,无需借助第三方组件或工具,简化了数据迁移的复杂度。同时,IoTDB 的内部优化机制能够在迁移过程中显著减少对 CPU 和内存资源的占用,即使在不影响集群正常使用的情况下也能进行数据迁移。
全量数据同步任务具体 SQL 语句如下:
CREATE PIPE A2B
WITH SINK (
'node-urls' = '127.0.0.1:6668,127.0.0.1:6669'
)
其中,node-urls 是数据同步的目标节点地址,它可以接受输入多个地址。在本例中,全量数据同步任务 A2B 的设置了两个目标节点 127.0.0.1:6668, 127.0.0.1:6669,此时发送端 A 将均分向两个目标节点发送数据。
范围数据同步任务具体 SQL 语句如下:
CREATE PIPE A2B
WITH SOURCE (
'path'= 'root.EnergyGroup.WindFarm.**',
'start-time' = '2024.08.01T08:00:00+00:00',
'end-time' = '2024.09.01T08:00:00+00:00'
)
WITH SINK (
'node-urls'='127.0.0.1:6668'
)
其中,path 字段是需要被同步的测点,start-time 和 end-time 指定了同步的时间范围。
02
场景二:数据降采样同步
降采样同步可以将数据从 IoTDB 实例 A 到 IoTDB 实例 B 同步的同时,将高频率采集的数据转换为较低频率的数据,通常在厂->区域->中心模式的数据汇聚场景中较为常用,能够帮助用户减少上级数据管理数据存储压力并提高数据处理效率。
在 IoTDB 中,可以通过创建带有降采样规则的数据同步任务来实现这一功能。
CREATE PIPE a2b
WITH PROCESSOR (
'processor' = 'changing-value-sampling-processor'
)
WITH SINK (
'node-urls' = '127.0.0.1:6668'
)
其中,需要将 processor 配置为数据降采样的处理插件。企业版可直接使用内置插件 changing-value-sampling-processor(或基于旋转门算法的趋势变化降采样 swinging-door-trending-sampling-processor、基于滚动时间窗口的降采样 tumbling-time-sampling-processor),该插件用于识别数据流中的数值变化,它可以让数据同步管道仅在数值变化时进行数据同步,从而减少传输的数据量。开源版可以自行实现逻辑,并将插件导入 IoTDB 进行使用。
03
场景三:级联数据同步
级联数据同步常见于多个场站间数据联动汇聚的场景,它通过在多个数据库之间创建链式的数据流动,确保了数据的连贯性和一致性。在 IoTDB 体系中,可在链路上设置多个同步任务实现级联数据同步:每个同步任务负责将数据从当前节点传输到下一个节点,从而实现如 A->B->C 这样的级联传输模式。
如需要构建上图中 A->B->C 三级同步,则需要在 A 执行:
create pipe A2B
with sink (
'node-urls'='127.0.0.1:6668'
)
在 B 执行:
create pipe B2C
with sink (
'forwarding-pipe-requests' = 'true',
'node-urls'='127.0.0.1:6669'
)
其中 'forwarding-pipe-requests' = 'true' 的含义是,转发由 A 同步而来的数据到 C 中。
04
场景四:双向数据同步
双向数据传输通过在两个 IoTDB 实例(单机或集群)之间实现数据的实时镜像,确保了数据的一致性和最新状态,IoTDB 的双活实例就是在此能力基础上搭建的。双向数据同步为多数据双活、灾备、数据备份提供了强有力的支持。
如要实现 A 和 B 两个实例的双向数据同步,可在 A 中执行 SQL:
CREATE PIPE A2B
WITH SOURCE (
'forwarding-pipe-requests' = 'false',
)
WITH SINK (
'node-urls'='127.0.0.1:6668'
)
在 B 中执行 SQL:
CREATE PIPE B2A
WITH SOURCE (
'forwarding-pipe-requests' = 'false',
)
WITH SINK (
'node-urls'='127.0.0.1:6667'
)
其中,需要将 forwarding-pipe-requests 设置为 false 防止数据无限循环(此配置为企业版功能)。
05
场景五:跨网闸数据同步
在电力等行业,网络安全至关重要,因此整个系统的网络被精心划分为四个具有不同安全等级的区域。安全区 Ⅰ 是生产控制区,负责关键的实时控制任务;安全区 Ⅱ 是生产非控制区,提供辅助性生产支持;安全区 Ⅲ 是生产管理区,处理生产管理任务;而安全区 Ⅳ 是管理信息区,专注于行政管理和决策支持。
在安全区 Ⅱ 与安全区 Ⅲ 之间,系统通过单向网闸进行交互,正向隔离机制允许高安全等级的系统向低安全等级的系统发送操作指令,而反向隔离则允许低安全等级的系统向高安全等级系统传输数据。这种隔离网闸的存在虽然物理上确保了生产控制区的安全,但也给安全区 Ⅱ 与安全区 Ⅲ 之间的数据同步带来了挑战。
IoTDB 通过内置的跨网闸同步插件支持适配数据在 Syskeeper2000 等型号下的数据同步。
如实现上图的数据同步,可使用 SQL:
create pipe A2B
with sink (
'sink'='iotdb-air-gap-sink',
'sink.node-urls'='10.53.53.53:9780'
)
其中,需要将 sink 配置为网闸专用处理插件。企业版可直接使用内置插件 iotdb-air-gap-sink,该插件专为通过单向网闸的数据传输设计,确保了数据传输的安全性和合规性。开源版可以自行实现逻辑,并将插件导入 IoTDB 进行使用。
06
总结
IoTDB 端边云同步以灵活和简单为设计的出发点,上述的所有操作,仅仅只需要执行一句 SQL 即可完成。
与此同时,我们也支持同步过程中的加密传输、压缩传输。用户也可以在数据同步框架上继续探索更为高阶的使用方法,通过使用其他参数、组合参数、自行开发插件的方式完成更高阶的使用场景搭建。
更多详细使用方法和介绍,可参考“阅读原文”中的官方用户手册,期待你的更多发现~
规上企业应用实例
能源电力:中核武汉|国网信通产业集团|华润电力|大唐先一|上海电气国轩|清安储能|某储能厂商|太极股份|绍兴安瑞思