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