feat: 外置数据库初始化与分区管理功能

- 删除主服务中的数据库初始化与分区管理逻辑,降低复杂度。
- 新增 SQL 脚本用于数据库初始化和分区管理,集中在 SQL_Script 目录。
- 移除环境变量 ENABLE_DATABASE_INITIALIZATION,简化配置。
- 更新 package.json,新增数据库初始化和分区管理的 npm 脚本。
- 删除不再使用的初始化和分区管理相关文件。
- 提供统一的命令行接口,支持外部调用数据库初始化和分区创建。
This commit is contained in:
2026-03-04 14:54:27 +08:00
parent 677db35cdf
commit f61a63d8c1
18 changed files with 483 additions and 397 deletions

View File

@@ -0,0 +1,15 @@
# Proposal: Externalize DB Provisioning
## Why
- 降低主服务复杂度与运行时 DDL 风险。
- 避免在高并发消费服务中执行建库/建分区。
- 便于平台化调度(独立任务/外部程序调用)。
## What
- 删除主服务中的初始化与分区创建能力。
- 将建库相关 SQL 与 JS 工具集中到根目录 `SQL_Script`
- 提供统一 npm scripts 入口供外部调用。
## Non-Goals
- 不改动 Kafka 解析与业务写库模型。
- 不引入旧开关兼容。

View File

@@ -0,0 +1,64 @@
# Externalize Database Provisioning to SQL_Script
## 1. 背景
当前服务进程中仍包含数据库初始化与分区创建相关职责。为降低主服务复杂度、避免运行时 DDL 风险,并支持由外部程序统一调度,现将“建库/建表/建分区”能力完全外置到根目录 `SQL_Script`
## 2. 目标
1. 主服务 `bls-rcu-action-backend` 启动后仅执行:拉取 Kafka -> 解析 -> 写库。
2. 删除所有运行时建库、建表、建分区与对应定时任务逻辑。
3. 不保留旧兼容开关(如 `ENABLE_DATABASE_INITIALIZATION`)。
4. 在根目录 `SQL_Script` 提供可复用的 SQL 与 JS 调用入口,供其他程序调用。
## 3. 变更范围
### 3.1 业务服务(剥离)
- 删除文件:
- `bls-rcu-action-backend/src/db/initializer.js`
- `bls-rcu-action-backend/src/db/partitionManager.js`
- 修改文件:
- `bls-rcu-action-backend/src/index.js`
- 移除初始化与定时建分区调用
- `bls-rcu-action-backend/src/config/config.js`
- 移除 `enableDatabaseInitialization`
- `bls-rcu-action-backend/src/db/roomStatusManager.js`
- 移除自动建分区逻辑(仅保留 upsert
- `bls-rcu-action-backend/.env`
- `bls-rcu-action-backend/.env.example`
- 移除 `ENABLE_DATABASE_INITIALIZATION`
- 删除旧 SQL
- `bls-rcu-action-backend/scripts/init_db.sql`
### 3.2 外部脚本(新增)
新增根目录 `SQL_Script/`
- `init_rcu_action.sql`
- `init_room_status.sql`
- `partition_rcu_action.sql`
- `partition_room_status.sql`
- `db_manager.js`CLI + import
- `README.md`
### 3.3 npm scripts入口
`bls-rcu-action-backend/package.json` 新增:
- `db:init:all`
- `db:init:rcu-action`
- `db:init:room-status`
- `db:partition:rcu-action`
- `db:partition:room-status`
## 4. 设计约束
1. 主服务代码中不得出现 `CREATE TABLE` / `CREATE SCHEMA` / `CREATE INDEX` / 分区创建语句。
2. 主服务中不得出现初始化器和分区管理器调用路径。
3. 建库能力仅存在于根目录 `SQL_Script`
## 5. 验收标准
1. `npm run test` 全通过。
2. `npm run build` 通过,且 `dist/index.js` 不包含以下关键词:
- `dbInitializer`
- `partitionManager`
- `ENABLE_DATABASE_INITIALIZATION`
- `ensurePartitions`
3. 通过 `npm run db:init:all` 可以执行外部初始化流程。
4. 通过 `npm run db:partition:rcu-action``npm run db:partition:room-status -- <hotelId>` 可执行外部分区流程。
## 6. 迁移说明
- 旧部署流程若依赖服务启动自动建库,需改为先执行 `SQL_Script` 对应命令,再启动主服务。
- 该变更为有意“去兼容”升级:删除旧开关与旧路径,避免双路径维护。

View File

@@ -0,0 +1,37 @@
# 2026-03-04 外置建库能力改造总结
## 概述
已将建库(初始化 + 分区创建)能力从主服务中完全剥离,迁移至根目录 `SQL_Script`,并提供可供其他程序调用的 JS/SQL 入口。
## 实施结果
### 已删除(主服务内)
- `src/db/initializer.js`
- `src/db/partitionManager.js`
- 运行时初始化、定时分区维护逻辑
- 配置项:`ENABLE_DATABASE_INITIALIZATION`
- 旧 SQL`bls-rcu-action-backend/scripts/init_db.sql`
### 已新增(根目录)
- `SQL_Script/init_rcu_action.sql`
- `SQL_Script/init_room_status.sql`
- `SQL_Script/partition_rcu_action.sql`
- `SQL_Script/partition_room_status.sql`
- `SQL_Script/db_manager.js`
- `SQL_Script/README.md`
### 已新增 npm 入口
- `db:init:all`
- `db:init:rcu-action`
- `db:init:room-status`
- `db:partition:rcu-action`
- `db:partition:room-status`
## 验证
- `npm run test`通过45/45
- `npm run build`:通过
- 构建产物不再包含初始化/分区管理逻辑
## 影响
- 主服务职责更单一:只处理 Kafka 消费与写库。
- DDL 改为外部可控,适合由调度系统或独立服务统一执行。