feat: 更新 Kafka 配置和数据库管理逻辑
- 在 .env.example 中添加 Kafka 配置项:KAFKA_FETCH_MAX_BYTES, KAFKA_FETCH_MIN_BYTES, KAFKA_FETCH_MAX_WAIT_MS。 - 删除 room_status_sync 提案及相关文档。 - 删除 fix_uint64_overflow 提案及相关文档。 - 更新数据库管理器以支持使用 COPY 语句进行高效数据写入,替换批量 INSERT 逻辑。 - 实现心跳数据的整数溢出处理,确保无效数据被持久化到 heartbeat_events_errors 表。 - 更新处理器规范,确保心跳数据成功写入历史表后触发 room_status 同步。 - 添加新文档,描述新的分区方法案例。 - 归档旧的提案和规范文档以保持项目整洁。
This commit is contained in:
@@ -44,20 +44,12 @@
|
||||
- **AND** 根据配置决定是否重试
|
||||
|
||||
### Requirement: 数据库表结构管理
|
||||
系统 MUST 提供数据库表结构的定义和管理机制。
|
||||
系统 MUST 支持 room_status 实时状态表与心跳历史表的协同写入能力。
|
||||
|
||||
#### Scenario: 表结构初始化(高吞吐分区表)
|
||||
- **WHEN** 系统首次启动或部署数据库时
|
||||
- **THEN** 应该存在按 `ts_ms` 日分区的心跳明细表
|
||||
- **AND** 必填字段应具备 NOT NULL 约束
|
||||
- **AND** 状态类字段应具备 CHECK 约束(限制取值范围)
|
||||
- **AND** 主键应采用 GUID(32 位无连字符 HEX 字符串)并具备格式 CHECK
|
||||
- **AND** 必需索引应存在(hotel_id/power_state/guest_type/device_id B-tree;service_mask BRIN;service_mask 首位查询表达式索引 idx_service_mask_first_bit)
|
||||
|
||||
#### Scenario: 自动分区
|
||||
- **WHEN** 写入某天数据而该日分区不存在
|
||||
- **THEN** 系统应能够自动创建对应日分区或确保分区被预创建
|
||||
- **AND** 不应影响持续写入(高吞吐场景)
|
||||
#### Scenario: room_status 结构与约束支持
|
||||
- **WHEN** 心跳服务执行 room_status upsert 同步
|
||||
- **THEN** 目标表应具备支撑 UPSERT 的唯一约束(hotel_id, room_id, device_id)
|
||||
- **AND** 需要的同步字段应存在并可写入
|
||||
|
||||
### Requirement: 数组字段存储与索引
|
||||
系统 MUST 支持将电力与空调子设备数据以数组列形式存储,并为指定数组列建立针对元素查询的索引。
|
||||
@@ -96,9 +88,9 @@
|
||||
- **AND** 常见查询(hotel_id + 时间范围)应触发分区裁剪
|
||||
|
||||
## ADDED Requirements
|
||||
### Requirement: 分区表新增数组列与数组元素索<E7B4A0><EFBFBD>?系统 SHALL <EFBFBD><EFBFBD>?`heartbeat.heartbeat_events` 中新增用于存储电力与空调子设备的数组列,并为指定数组列提供数组元素级查询索引<E7B4A2><EFBFBD>?
|
||||
#### Scenario: 新增数组<E695B0><EFBFBD>?- **WHEN** 部署或升级数据库结构<E7BB93><EFBFBD>?- **THEN** 表应包含 elec_address、air_address、voltage、ampere、power、phase、energy、sum_energy、state、model、speed、set_temp、now_temp、solenoid_valve
|
||||
### Requirement: 分区表新增数组列与数组元素索<E7B4A0>?系统 SHALL <20>?`heartbeat.heartbeat_events` 中新增用于存储电力与空调子设备的数组列,并为指定数组列提供数组元素级查询索引<E7B4A2>?
|
||||
#### Scenario: 新增数组<E695B0>?- **WHEN** 部署或升级数据库结构<E7BB93>?- **THEN** 表应包含 elec_address、air_address、voltage、ampere、power、phase、energy、sum_energy、state、model、speed、set_temp、now_temp、solenoid_valve
|
||||
|
||||
#### Scenario: 数组元素索引
|
||||
- **WHEN** 需要按 elec_address/air_address/state/model 的数组元素进行查<E8A18C><EFBFBD>?- **THEN** 数据库应具备 GIN 索引以优化包含类查询
|
||||
- **WHEN** 需要按 elec_address/air_address/state/model 的数组元素进行查<E8A18C>?- **THEN** 数据库应具备 GIN 索引以优化包含类查询
|
||||
|
||||
|
||||
Reference in New Issue
Block a user