物模型存表

此页面用于把产品的物模型数据与「数据表设计」里的某张表关联起来,平台收到设备数据后会按映射规则自动写入数据库

核心概念

一条映射 = 一个产品 + 一张目标表
一个产品可以同时配置多条映射(写到多张表),但每条映射只对应一张表
写入模式
实时:监听设备上报事件,按批量缓冲入库,对应高 QPS 实时存储场景。
定时:按 cron 周期从设备最新数据缓存中拉取并入库,对应固定频率快照场景。

页面入口

菜单:存储管理 → 物模型存表

img_1.png

列表说明
说明
名称映射配置名称,自定义
产品关联的产品 SN
模式实时 / 定时
Cron定时模式专用,cron 表达式
设备范围全部 / 指定
批量大小实时模式专用,达到该阈值触发一次批量写入
状态启停开关,支持直接拨动,无需进入编辑
顶部操作
新增映射:进入编辑对话框新建。
刷新缓存:手动重建运行时路由表(修改外部依赖如设备列表后可触发)。

新增映射

操作步骤
1、点击 新增映射,进入对话框。
2、填写名称、选择产品 → 系统会自动加载该产品的物模型属性和设备列表。
3、选择目标表 → 系统会自动加载该表的字段。
4、选择存表模式设备范围
5、配置字段映射(推荐先点击 按字段名自动匹配物模型属性 一键填充)。
6、检查无误后点击 确定 保存。新建后默认是停用状态,需要在列表里手动开启。

img.png

基础字段说明
字段说明
名称映射名称,建议带产品名 + 用途,便于识别
产品必选;物模型字段下拉来源
目标表必选;表字段下拉来源
存表模式实时 / 定时
Cron 表达式定时模式必填,例如每 5 分钟:0 0/5 * * * ?
批量大小实时模式累积多少条后触发一次写入,默认 1000
flush 间隔ms实时模式定时 flush 周期,默认 1000ms
设备范围全部=该产品下所有设备;指定=只对勾选的设备生效
备注可选

存表模式

实时模式(推荐高频上报场景)
1、监听 device.up 事件总线,命中映射的设备数据进入内存缓冲队列
2、达到 批量大小 阈值或 flush 间隔 到时,按映射独立批量 INSERT
3、写入失败丢弃 + 打日志(不阻塞设备上报)。
4、修改配置后无需重启,路由缓存会自动刷新。
定时模式(推荐固定快照场景)
1、按 cron 表达式 调度,到点从设备最新数据缓存中拉取数据。
2、对范围内的每个设备各生成一行,一次性批量写入。
3、行操作里的 立即执行 按钮可手动触发一次(仅启用状态可见)。

img_2.png

Cron 表达式示例
表达式含义
0 0/5 * * * ?每 5 分钟
0 0 * * * ?每小时整点
0 0 0 * * ?每天 0 点
0 30 8 * * ?每天 8:30

设备范围

全部:该产品下所有设备的上报都会进入这条映射。
指定:弹出多选框,勾选具体设备 SN。只勾选的设备会入库,其他设备数据被跳过。
修改设备列表后会自动刷新路由缓存,几秒内生效。

字段映射

总规则
1、以表字段为准:表里有的字段才会写入;数据里多出来的字段直接丢弃。
2、表字段没匹配上的列留 NULL(除非设了默认值)。
3、带「内置含义」的列由平台自动填充不需要在这里再配映射(也可以配,会被覆盖)。
取值来源
来源取值规则
物模型属性 PROPERTY从设备上报的 properties 中按物模型 identifier 取值
内置字段 BUILT_IN选择 ID / DEVICE_SN / DEVICE_NAME / PRODUCT_SN / REPORT_TIME / CREATE_TIME
常量 CONST任意固定字符串/数字,所有行都写入这个值
一键自动匹配
点击 按字段名自动匹配物模型属性 按钮:
1、遍历目标表的非内置字段。
2、若字段名等于某个物模型 identifier,自动添加一条 PROPERTY 类型的映射。
3、已有映射的字段会跳过,不会覆盖。
推荐用法:先建表时通过「导入物模型字段」把表字段名与物模型 identifier 对齐,再来这里一键匹配,几乎零手工配置。

启停 / 立即执行

启停开关:列表行的开关直接控制,实时生效,无需重启。停用后该映射不再处理设备数据。
立即执行:仅定时模式且已启用时显示,点击后立即拉取一次最新数据并写库(不影响 cron 调度)。

修改映射

点击行 编辑 按钮,所有字段都可改。保存后路由缓存自动刷新,新规则立即生效

删除映射

删除会同时清理 字段映射明细映射设备列表,但目标表和已写入的数据保留

常见问题

Q:实时模式启用后,数据库里没数据?
A:按以下顺序排查:①该映射是否启用;②设备 SN 是否在「指定」范围里;③映射缓存是否生效,可点 刷新缓存;④查后台日志是否有 [Store] 批量写入失败 ... 字样;⑤目标表的字段是否能容纳值(NOT NULL 列没填会报错)。
Q:定时模式执行了但没数据?
A:①确认 cron 表达式正确;②确认设备最新数据缓存里有数据(设备得至少上报过一次);③可点 立即执行 手动触发,看后台日志是否报错。
Q:字段类型不匹配怎么办?
A:平台在写入时会做基本类型转换(int/long/decimal/bool/datetime);转换失败的字段会写 NULL 而不是抛异常。如果某列经常拿到 NULL,多半是物模型 dataType 与表字段类型不一致,需要把表字段类型调整到能容纳物模型的值。
Q:批量大小调大了反而变慢?
A:批量越大单次写入越久,可能在 flush 时阻塞缓冲队列。建议从 1000 起步,数据库性能好再往上调;同时把 flush 间隔ms 调小(如 500ms),保证延迟。
Q:物模型字段改了,已建好的映射要不要重配?
A:物模型属性新增不影响已有映射;属性 identifier 改名后,老映射的 sourceKey 会取不到值(写入 NULL),需要进入编辑修正。