You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.3 KiB
2.3 KiB
| change | design-doc | base-ref |
|---|---|---|
| analysis-storage-refactor | docs/superpowers/specs/2026-07-04-analysis-storage-refactor-design.md | 82de2f9 |
Analysis Storage Refactor - 实施计划
基于 Design Doc 拆分的可执行任务。 目标:将
futures_analysis.db(14 张表)迁移到 MySQL,并引入 Redis 缓存层,与行情数据存储策略保持一致。
任务总览
| # | 任务 | 依赖 |
|---|---|---|
| T1 | 扩展 StorageManager 通用缓存方法 | - |
| T2 | 创建 analysis_migration.py 迁移脚本 | T1 |
| T3 | 修改 analysis_db.py 支持 MySQL/SQLite 动态切换 | T1 |
| T4 | 在 main.py lifespan 中集成迁移和表初始化 | T2, T3 |
| T5 | 编写测试用例 | T1-T4 |
T1: 扩展 StorageManager 通用缓存方法
文件: app/storage_manager.py
任务:
- 新增
cache_get(key)方法 - 新增
cache_set(key, value, ttl)方法 - 新增
cache_delete(key)方法
验收:
- 方法支持 Redis 命中/未命中
- 缓存 TTL 可配置
- 通用方法不依赖具体业务
T2: 创建 analysis_migration.py 迁移脚本
文件: app/analysis_migration.py
任务:
- 实现
migrate_analysis_sqlite_to_mysql()函数 - 检测 MySQL analysis 表是否已有数据
- 从 SQLite 读取全部数据
- 批量写入 MySQL
- 记录迁移日志
验收:
- 幂等性:MySQL 有数据时跳过迁移
- 迁移失败不影响应用启动
T3: 修改 analysis_db.py 使用 StorageManager
文件: app/analysis_db.py
任务:
- 修改
get_analysis_db()使用 StorageManager - 实现 MySQL 不可用时降级到 SQLite
- 保持 API 接口不变
验收:
- API 调用透明切换存储后端
- 降级时功能正常
T4: 在 main.py lifespan 中集成
文件: app/main.py
任务:
- 在 lifespan 中创建 analysis 表(MySQL)
- 调用迁移函数
- 记录启动日志
验收:
- 启动时自动创建 14 张表
- 自动迁移 SQLite 数据
T5: 编写测试用例
文件: tests/test_analysis_storage.py
任务:
- 测试 Redis 缓存命中场景
- 测试 Redis 缓存未命中回源 MySQL
- 测试 MySQL 不可用降级到 SQLite
- 测试数据迁移完整性
验收:
- 所有测试通过
- 覆盖三级降级场景