阿里云的PolarDB MySQL版是阿里巴巴自研的云原生HTAP数据库,基于云原生架构、计算存储分离、软硬件一体化设计,为用户提供具备超高弹性和性能、高可用和高可靠保障、高性价比的数据库服务。物联网平台可以将设备的指定Topic消息,先经过解析脚本处理和过滤,再转发到云原生数据库PolarDB MySQL版数据表中存储。本文以物模型数据上报Topic为例,介绍消息转发至PolarDB MySQL版数据表的完整流程。
工作原理
云产品流转将设备的Topic消息转发到PolarDB MySQL版集群下数据库的数据表中存储,使用PolarDB MySQL版的数据库服务。详细内容,请参见PolarDB MySQL版。
在上图中:
数据源:支持的Topic类型消息,请参见数据格式(非云网关产品和设备)、自定义Topic(MQTT云网关)、消息转发Topic(GB/T 32960云网关)、消息转发Topic(JT/T 808云网关)、消息转发Topic(SL 651云网关)。
数据目的:创建的专有网络下PolarDB MySQL版集群中数据库下的数据表,用于接收设备数据。
解析器脚本:配置通过数据流转函数
writePolarDB(destinationId, data)
将Topic数据转发到PolarDB MySQL版数据表。data
仅支持Map类型数据,其中键(Key)值对应数据库表列名,值(Value)对应列值。函数详细说明,请参见函数列表。
应用场景
对设备存储数据库有如下要求的物联网应用场景:
大中型企业相关设备的生产数据库。
对设备数据安全性要求非常高的核心数据库。
使用限制
前提条件
背景信息
转发的数据目的配置完成后,会自动完成以下配置,实现设备数据通过物联网平台的消息转发功能流转到云原生数据库PolarDB MySQL版。
物联网平台占用PolarDB MySQL版集群所在虚拟交换机的2个IP地址;将虚拟交换机的IPv4网段配置到PolarDB MySQL版集群的白名单中。
在PolarDB MySQL版集群所在的VPC网络下创建托管安全组,安全组名称默认以sg-nsm-开头。
创建数据目的
登录物联网平台控制台。
在实例概览页签的全部环境下,找到对应的实例,单击实例卡片。
在左侧导航栏,选择
。在云产品流转页面,单击右上角体验新版,进入新版功能页面。
说明如果您已执行过此操作,再次进入云产品流转页面,会直接进入新版功能页面。
单击数据目的页签,然后单击创建数据目的。
在创建数据目的对话框,输入数据目的名称,例如
DataPurpose
,按照以下参数说明,完成配置,然后单击确定。参数
描述
选择操作
选择存储到云原生数据库(PolarDB MySQL版)中。
授权
单击授权,系统创建角色和授权策略,授权物联网平台将数据写入PolarDB MySQL版数据表。详细说明,请参见数据转发到云原生数据库PolarDB MySQL版的服务关联角色。
说明若已授权,忽略此操作。
地域
固定与您的物联网平台实例所在地域一致。
PolarDB集群
选择数据转发目的为您已创建的专有网络(VPC)下的PolarDB集群。
您可单击创建集群,新增PolarDB MySQL版集群。具体操作,请参见购买集群。
数据库
选择PolarDB MySQL版集群下接收数据的目标数据库名称。
创建数据库的具体操作,请参见创建数据库。
账号
输入管理数据库的账号和密码。账号应具有该数据库的读写权限,否则消息转发无法将数据写入PolarDB MySQL版数据库。
数据库管理账号和密码说明,请参见创建和管理数据库账号。
密码
表名
输入目标数据库下接收数据的数据表名称。消息转发会把数据写入这张表中。
配置并启动解析器
创建解析器,例如DataParser。具体操作,请参见创建解析器。
在解析器详情页面,关联数据源。
在配置向导的数据源下,单击关联数据源。
在弹出的对话框中,单击数据源下拉列表,选择已创建的数据源DataSource,单击确定。
在解析器详情页面,关联数据目的。
单击配置向导的数据目的,然后单击数据目的列表右上方的关联数据目的。
在弹出的对话框中,单击数据目的下拉列表,选择已创建的数据目的DataPurpose,单击确定。
在数据目的列表,查看并保存数据目的ID,例如为1000。
后续解析脚本中,需使用此处的数据目的ID。
在解析器详情页面,单击解析器。
在脚本输入框,输入如下解析脚本。
脚本编辑方法,请参见脚本示例。函数参数说明,请参见函数列表。
// 通过payload函数,获取设备上报的消息内容,并按照JSON格式转换。 var data = payload("json"); // 筛选出上报的温湿度值。 var h = data.items.Humidity.value; var t = data.items.Temperature.value; // PolarDB MySQL表结构为id[自增主键] deviceName、temperature、humidity、time,在writePolarDB方法中,可以按column:value的形式,将值写入对应的列。 // 设置温度值大于30时触发规则。 if (t > 30) { writePolarDB(1000, {"deviceName":deviceName(), "temperature":t, "time":timestamp(), "humidity":h}); }
单击调试,根据页面提示,选择产品和设备,输入Topic和Payload数据,验证脚本可执行。
调试参数示例:
运行结果如下,表示脚本执行成功。
action: transmit to polardb[destinationId=1000], data:{"temperature":38,"humidity":25,"time":1700631588609,"deviceName":"devce****"} variables: data : {"deviceType":"CustomCategory","iotId":"JCp9***","requestId":"16269*******7","checkFailedData":{},"productKey":"ic*******z","gmtCreate":1626948134445,"deviceName":"devce****","items":{"temperature":{"time":1626948134319,"value":38},"humidity":{"time":1626948134319,"value":25}}} t : 38 h : 25
单击发布。
回到云产品流转页面的解析器页签,单击解析器DataParser对应的操作列的启动,启动解析器。
后续操作
您可在物联网平台控制台对应实例下云端运行日志。
页面的云端运行日志页签,查看设备到云消息及云产品流转的运行日志。具体操作,请参见您可登录PolarDB控制台,连接数据库查询存储的物联网平台数据。具体操作,请参见连接数据库集群。
相关文档
设备接入物联网平台上报数据的操作指导,请参见设备接入引导。
您可在实例详情页面,查看消息转发TPS可用资源,确保设备消息能正常转发到PolarDB MySQL版存储。具体操作,请参见查看实例信息和运行数据。如果可用资源不足,可进行升配。具体内容,请参见升配。
使用PolarDB MySQL版存储数据时,费用、集群访问(读写分离)、性能和容量、稳定性和存储空间等常见问题,请参见PolarDB MySQL版的常见问题和解答。