feat: 扩展心跳消息支持电力与空调设备数组字段
新增 Kafka 消息中 electricity[] 和 air_conditioner[] 数组字段支持,用于存储电力与空调设备明细数据。数据库表新增对应数组列并创建 GIN 索引优化查询性能,processor 实现数组字段校验与聚合转换逻辑。 主要变更: - Kafka 消息规范新增 electricity 和 air_conditioner 数组字段定义 - 数据库 heartbeat_events 表新增 14 个数组列并创建 4 个 GIN 索引 - processor 实现数组字段解析、校验及聚合转换逻辑 - 更新相关文档与测试用例,确保端到端功能完整
This commit is contained in:
@@ -22,9 +22,9 @@
|
||||
| id | bigserial | 否(自动生成) | 自增序列号(写入时可不提供) |
|
||||
| ts_ms | bigint | 是 | 毫秒级时间戳(epoch ms) |
|
||||
| hotel_id | int2 | 是 | 酒店编号 |
|
||||
| room_id | int4 | 是 | 房间编号(或房间唯一标识) |
|
||||
| room_id | varchar(50) | 是 | 房间编号(或房间唯一标识,按字符串存储) |
|
||||
| device_id | varchar(64) | 是 | 设备 ID(序列号/MAC/混合编码);如明确为纯数字可改 bigint |
|
||||
| ip | inet | 是 | 设备/上报方 IP(PostgreSQL inet 类型自带格式校验) |
|
||||
| ip | varchar(21) | 是 | `IP:PORT`(IPv4)或纯 IP 字符串 |
|
||||
| power_state | int2 | 是 | 取电状态(枚举值待标准化) |
|
||||
| guest_type | int2 | 是 | 住客身份(住客/空房/保洁/维修等,枚举值待标准化) |
|
||||
| cardless_state | int2 | 是 | 无卡取电/无卡策略状态(枚举待定) |
|
||||
@@ -33,6 +33,20 @@
|
||||
| carbon_state | int2 | 是 | 碳控状态(枚举待定) |
|
||||
| device_count | int2 | 是 | 设备数量/上报设备数量(语义待确认) |
|
||||
| comm_seq | int4 | 是 | 通讯序号(语义待确认) |
|
||||
| elec_address | text[] | 否 | 电力设备地址数组(与 voltage[] 等按下标对齐) |
|
||||
| voltage | double precision[] | 否 | 电压数组 |
|
||||
| ampere | double precision[] | 否 | 电流数组 |
|
||||
| power | double precision[] | 否 | 功率数组 |
|
||||
| phase | text[] | 否 | 相位数组 |
|
||||
| energy | double precision[] | 否 | 能耗数组 |
|
||||
| sum_energy | double precision[] | 否 | 总能耗数组 |
|
||||
| air_address | text[] | 否 | 空调设备地址数组(与 state[] 等按下标对齐) |
|
||||
| state | int2[] | 否 | 开关状态数组 |
|
||||
| model | int2[] | 否 | 运行模式数组 |
|
||||
| speed | int2[] | 否 | 风速设置数组 |
|
||||
| set_temp | int2[] | 否 | 设定温度数组 |
|
||||
| now_temp | int2[] | 否 | 当前温度数组 |
|
||||
| solenoid_valve | int2[] | 否 | 电磁阀门状态数组 |
|
||||
| extra | jsonb | 否 | 可扩展字段:电参/空调状态/版本/来源等 |
|
||||
|
||||
### 2.2 约束
|
||||
@@ -67,6 +81,15 @@
|
||||
- B-tree:`hotel_id`, `power_state`, `guest_type`, `device_id`
|
||||
- BRIN:`service_mask`
|
||||
|
||||
新增(数组元素查询):
|
||||
- GIN:`elec_address`, `air_address`, `state`, `model`
|
||||
|
||||
常用查询示例:
|
||||
- `SELECT * FROM heartbeat.heartbeat_events WHERE elec_address @> ARRAY['add11'];`
|
||||
- `SELECT * FROM heartbeat.heartbeat_events WHERE air_address @> ARRAY['ac1'];`
|
||||
- `SELECT * FROM heartbeat.heartbeat_events WHERE state @> ARRAY[1::int2];`
|
||||
- `SELECT * FROM heartbeat.heartbeat_events WHERE model @> ARRAY[2::int2];`
|
||||
|
||||
额外建议(脚本默认包含,可按需移除):
|
||||
- `btree (hotel_id, ts_ms)`:覆盖最常见过滤(酒店 + 时间范围),显著提升检索与分区内扫描效率。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user