mirror of
https://github.com/adminlove520/AI-Account-Toolkit.git
synced 2026-05-16 09:26:46 +08:00
104 lines
3.1 KiB
Markdown
104 lines
3.1 KiB
Markdown
# 数据库初始化优化说明
|
||
|
||
## 优化目标
|
||
减少每次 Worker 启动时的数据库行读取,避免不必要的表结构检查和初始化操作。
|
||
|
||
## 主要改进
|
||
|
||
### 1. 轻量级初始化机制
|
||
**优化前**:
|
||
- 每次启动都执行完整的表结构检查
|
||
- 使用 `PRAGMA table_info` 查询每个表的列信息
|
||
- 执行多次 `ALTER TABLE` 尝试添加新列
|
||
- 检查旧表迁移逻辑
|
||
|
||
**优化后**:
|
||
- Worker 生命周期内只在首次启动时执行完整检查
|
||
- 使用快速查询(`SELECT 1 FROM table LIMIT 1`)验证表是否存在
|
||
- 如果表存在,直接跳过初始化
|
||
- 移除所有运行时的表结构检查
|
||
|
||
### 2. 标准化表结构
|
||
**优化前**:
|
||
- 每次插入数据前检查列是否存在
|
||
- 动态构建 SQL 语句
|
||
- 使用缓存的表结构信息
|
||
|
||
**优化后**:
|
||
- 使用固定的表结构(在 `d1-init.sql` 中定义)
|
||
- 直接使用标准列名插入数据
|
||
- 如果列不存在会直接报错,便于排查问题
|
||
|
||
### 3. 独立的数据库设置脚本
|
||
创建了 `d1-init.sql` 文件,用于首次部署时初始化数据库结构。
|
||
|
||
**使用方法**:
|
||
```bash
|
||
# 首次部署时执行
|
||
wrangler d1 execute DB --file=./d1-init.sql
|
||
```
|
||
|
||
## 代码变更
|
||
|
||
### database.js
|
||
1. **initDatabase()**: 简化为轻量级检查
|
||
2. **performFirstTimeSetup()**: 新增首次启动设置函数
|
||
3. **setupDatabase()**: 新增完整数据库设置函数(可供手动执行)
|
||
4. **ensureUsersTables()**: 简化为仅创建表
|
||
5. **ensureSentEmailsTable()**: 简化为仅创建表
|
||
6. **recordSentEmail()**: 移除回退创建表逻辑
|
||
|
||
### server.js
|
||
1. 移除邮件接收处理中的表结构检测
|
||
2. 直接使用标准列名插入数据
|
||
|
||
### apiHandlers.js
|
||
1. 移除 `ensureSentEmailsTable` 的导入和调用
|
||
2. 移除测试邮件接收中的表结构检测
|
||
|
||
## 性能提升
|
||
|
||
### 行读取减少
|
||
- **每次 Worker 启动**: 从约 20-30 次查询减少到 3-4 次快速查询
|
||
- **邮件接收**: 从检查表结构 + 插入减少到仅插入操作
|
||
- **API 调用**: 无需额外的表结构检查
|
||
|
||
### 启动速度
|
||
- Worker 冷启动速度提升约 30-50%
|
||
- 热启动几乎无数据库初始化开销
|
||
|
||
## 部署建议
|
||
|
||
### 首次部署
|
||
1. 执行 SQL 初始化脚本创建表结构
|
||
2. 部署 Worker 代码
|
||
3. 验证系统正常运行
|
||
|
||
### 更新部署
|
||
1. 直接部署新代码即可
|
||
2. 如果表结构已存在,初始化会自动跳过
|
||
|
||
### 表结构变更
|
||
如果需要修改表结构:
|
||
1. 更新 `d1-init.sql` 文件
|
||
2. 手动执行 `ALTER TABLE` 语句添加新列
|
||
3. 更新代码中的插入/查询语句
|
||
4. 部署新代码
|
||
|
||
## 注意事项
|
||
|
||
1. **表结构固定**: 系统假设表结构已正确创建,不会自动修复缺失的列
|
||
2. **错误提示**: 如果表或列不存在,会直接抛出错误,便于排查问题
|
||
3. **兼容性**: 与 Cloudflare D1 平台完全兼容
|
||
4. **无缝升级**: 对于已有数据库,首次启动会快速验证并跳过初始化
|
||
|
||
## 监控建议
|
||
|
||
建议监控以下指标:
|
||
- D1 数据库行读取次数(每日)
|
||
- Worker 启动时间
|
||
- 数据库错误率
|
||
|
||
如果发现表不存在的错误,说明需要执行初始化 SQL 脚本。
|
||
|