Files
Web_BLS_Heartbeat_Server/openspec/specs/db/spec.md

79 lines
2.8 KiB
Markdown
Raw Normal View History

# 数据库操作规范
## Purpose
本规范定义本服务对 PostgreSQL 的连接池配置、表结构初始化(含分区表)、分区预创建维护策略、批量写入与约束错误处理等行为。
## Requirements
### Requirement: 数据库连接管理
系统 MUST 能够建立和维护与 PostgreSQL 数据库的连接。
#### Scenario: 成功连接数据库
- **WHEN** 系统启动时
- **THEN** 应该成功连接到配置的PostgreSQL数据库
- **AND** 应该监控连接状态
#### Scenario: 数据库连接断开重连
- **WHEN** 数据库连接断开时
- **THEN** 系统应该自动尝试重连
- **AND** 重连失败时应该记录错误日志
### Requirement: 心跳数据写入
系统 MUST 能够将处理后的心跳数据写入 PostgreSQL 数据库。
#### Scenario: 写入单条心跳数据
- **WHEN** 接收到单条处理后的心跳数据时
- **THEN** 系统应该将数据写入数据库
- **AND** 返回写入结果
#### Scenario: 批量写入心跳数据
- **WHEN** 接收到批量处理后的心跳数据时
- **THEN** 系统应该使用批量写入机制将数据写入数据库
- **AND** 提高写入效率
### Requirement: 数据完整性保障
系统 MUST 保障写入数据库的心跳数据完整性。
#### Scenario: 事务管理
- **WHEN** 写入多条相关数据时
- **THEN** 系统应该使用事务确保数据一致性
- **AND** 要么全部写入成功,要么全部失败
#### Scenario: 数据约束验证
- **WHEN** 写入的数据违反数据库约束时
- **THEN** 系统应该捕获约束错误
- **AND** 记录错误日志
- **AND** 根据配置决定是否重试
### Requirement: 数据库表结构管理
系统 MUST 提供数据库表结构的定义和管理机制。
#### Scenario: 表结构初始化
- **WHEN** 系统首次启动时
- **THEN** 系统应该检查数据库表是否存在
- **AND** 不存在时应该创建表结构
#### Scenario: 分区预创建(无人值守)
- **WHEN** 系统启动完成数据库初始化后
- **THEN** 系统应该预创建未来一段时间(例如未来 30 天)的日分区
- **AND** 系统应该周期性执行该预创建以保证长期运行不中断
- **AND** 当分区预创建失败时应记录错误日志
#### Scenario: 表结构迁移
- **WHEN** 表结构需要变更时
- **THEN** 系统应该支持平滑的表结构迁移
- **AND** 不影响现有数据
### Requirement: 数据查询支持
系统 MUST 支持基本的数据查询操作,用于监控和调试。
#### Scenario: 查询最新心跳数据
- **WHEN** 需要查询最新的心跳数据时
- **THEN** 系统应该提供查询接口
- **AND** 返回符合条件的数据
#### Scenario: 按条件查询心跳数据
- **WHEN** 需要按特定条件查询心跳数据时
- **THEN** 系统应该支持条件过滤
- **AND** 返回符合条件的数据