# 优化历史功能数据库升级指南 ## 📋 升级概述 将优化历史功能从localStorage本地存储升级到腾讯云MySQL数据库,实现跨设备同步、数据安全备份和高级分析功能。 ## 🎯 升级优势 ### 数据安全与可靠性 - ✅ **数据备份**:自动备份到腾讯云,不会因浏览器清理而丢失 - ✅ **跨设备同步**:登录后可在任何设备查看历史记录 - ✅ **数据完整性**:事务保证,确保数据一致性 ### 功能增强 - ✅ **高级搜索**:支持全文搜索和多重筛选 - ✅ **统计分析**:使用数据统计和分析报告 - ✅ **收藏功能**:重要记录可收藏管理 - ✅ **满意度评分**:记录用户对优化结果的满意度 ### 性能优化 - ✅ **分页加载**:大数据量时性能更好 - ✅ **索引优化**:快速查询和检索 - ✅ **缓存策略**:减少数据库压力 ## 🗄️ 数据库设计 ### 核心表结构 #### 1. optimization_history(优化历史表) ```sql - id: 主键ID - user_id: 用户ID - original_text: 原始输入文本 - optimized_text: 优化后文本 - optimization_type: 优化类型 - industry: 行业分类 - profession: 职业分类 - template_id: 使用的模板ID - satisfaction_rating: 满意度评分(1-5) - generation_time: 生成耗时(毫秒) - created_at: 创建时间 ``` #### 2. optimization_tags(标签表) ```sql - id: 主键ID - history_id: 历史记录ID - tag_name: 标签名称 - tag_type: 标签类型 ``` #### 3. optimization_favorites(收藏表) ```sql - id: 主键ID - user_id: 用户ID - history_id: 历史记录ID - favorite_name: 收藏名称 - notes: 备注 ``` #### 4. user_usage_stats(使用统计表) ```sql - id: 主键ID - user_id: 用户ID - date: 统计日期 - generation_count: 生成次数 - total_time_saved: 节省时间(分钟) - avg_rating: 平均评分 ``` ## 🚀 升级步骤 ### 第一步:数据库准备 1. **创建数据库表** ```bash # 执行SQL脚本 mysql -h your_host -u your_username -p your_database < optimization_history_upgrade.sql ``` 2. **配置数据库连接** ```python # 在config.py中配置腾讯云数据库 SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://username:password@host:port/database' ``` ### 第二步:代码部署 1. **安装新模型** ```bash # 将新模型文件复制到项目 cp src/flask_prompt_master/models/optimization_history.py /path/to/project/models/ ``` 2. **注册API路由** ```python # 在app.py中注册蓝图 from src.flask_prompt_master.routes.optimization_history import optimization_history_bp app.register_blueprint(optimization_history_bp) ``` 3. **更新前端代码** ```html ``` ### 第三步:数据迁移 1. **备份localStorage数据** ```javascript // 在浏览器控制台运行 function backupLocalStorage() { const history = JSON.parse(localStorage.getItem('optimization_history') || '[]'); const stats = JSON.parse(localStorage.getItem('usage_stats') || '{}'); const backup = { timestamp: new Date().toISOString(), history: history, stats: stats, count: history.length }; // 下载备份文件 const blob = new Blob([JSON.stringify(backup, null, 2)], {type: 'application/json'}); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `optimization_history_backup_${new Date().toISOString().split('T')[0]}.json`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); console.log(`备份完成!共 ${history.length} 条记录`); return backup; } backupLocalStorage(); ``` 2. **执行数据迁移** ```bash # 运行迁移脚本 python migrate_localStorage_to_database.py ``` ### 第四步:功能测试 1. **基础功能测试** - ✅ 添加历史记录 - ✅ 查看历史记录 - ✅ 搜索和筛选 - ✅ 删除记录 - ✅ 评分功能 2. **高级功能测试** - ✅ 收藏功能 - ✅ 统计分析 - ✅ 数据导出 - ✅ 跨设备同步 ## 🔧 API接口文档 ### 获取历史记录 ```http GET /api/optimization-history?page=1&per_page=20&search=关键词&date_filter=today&type_filter=提示词优化 ``` ### 添加历史记录 ```http POST /api/optimization-history Content-Type: application/json { "original_text": "原始输入", "optimized_text": "优化结果", "optimization_type": "提示词优化", "industry": "科技", "profession": "产品经理", "tags": ["逻辑强化", "场景适配"] } ``` ### 更新评分 ```http PUT /api/optimization-history/{id}/rating Content-Type: application/json { "rating": 5 } ``` ### 删除记录 ```http DELETE /api/optimization-history/{id} ``` ### 获取统计信息 ```http GET /api/optimization-history/stats?days=30 ``` ## 📊 性能优化建议 ### 数据库优化 1. **索引优化** ```sql -- 创建复合索引 CREATE INDEX idx_user_type_created ON optimization_history (user_id, optimization_type, created_at); CREATE INDEX idx_user_rating ON optimization_history (user_id, satisfaction_rating); ``` 2. **分区表**(大数据量场景) ```sql -- 按年份分区 ALTER TABLE optimization_history PARTITION BY RANGE (YEAR(created_at)) ( PARTITION p2024 VALUES LESS THAN (2025), PARTITION p2025 VALUES LESS THAN (2026), PARTITION p_future VALUES LESS THAN MAXVALUE ); ``` ### 应用优化 1. **缓存策略** ```python # 使用Redis缓存热门数据 from flask_caching import Cache cache = Cache(app, config={'CACHE_TYPE': 'redis'}) @cache.memoize(timeout=300) def get_user_stats(user_id, days=30): # 缓存用户统计信息 pass ``` 2. **分页优化** ```python # 使用游标分页替代偏移分页 def get_history_cursor(user_id, cursor=None, limit=20): query = OptimizationHistory.query.filter_by(user_id=user_id) if cursor: query = query.filter(OptimizationHistory.id < cursor) return query.order_by(OptimizationHistory.id.desc()).limit(limit).all() ``` ## 🔒 安全考虑 ### 数据安全 1. **SQL注入防护** ```python # 使用参数化查询 query = OptimizationHistory.query.filter( OptimizationHistory.original_text.contains(search_term) ) ``` 2. **数据验证** ```python # 验证输入数据 def validate_history_data(data): if not data.get('original_text') or len(data['original_text']) > 10000: raise ValueError('原始文本长度不能超过10000字符') if data.get('satisfaction_rating') and not (1 <= data['satisfaction_rating'] <= 5): raise ValueError('评分必须在1-5之间') ``` ### 访问控制 1. **用户权限验证** ```python @login_required def get_optimization_history(): # 确保用户只能访问自己的数据 user_id = current_user.id # ... ``` 2. **API限流** ```python from flask_limiter import Limiter limiter = Limiter(app, key_func=lambda: current_user.id) @limiter.limit("100 per hour") def add_optimization_history(): # 限制每小时最多100次请求 pass ``` ## 📈 监控与维护 ### 性能监控 1. **慢查询监控** ```sql -- 开启慢查询日志 SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 2; ``` 2. **应用监控** ```python # 使用APM工具监控性能 import time from functools import wraps def monitor_performance(func): @wraps(func) def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) execution_time = time.time() - start_time if execution_time > 1.0: # 超过1秒记录 current_app.logger.warning(f"Slow query: {func.__name__} took {execution_time:.2f}s") return result return wrapper ``` ### 数据维护 1. **定期清理** ```python # 清理过期数据 def cleanup_old_history(): cutoff_date = datetime.utcnow() - timedelta(days=365) deleted_count = OptimizationHistory.query.filter( OptimizationHistory.created_at < cutoff_date ).delete() db.session.commit() return deleted_count ``` 2. **数据备份** ```bash # 定期备份数据库 mysqldump -h your_host -u your_username -p your_database > backup_$(date +%Y%m%d).sql ``` ## 🎉 升级完成检查清单 ### 功能验证 - [ ] 历史记录正常显示 - [ ] 搜索和筛选功能正常 - [ ] 添加/删除记录功能正常 - [ ] 评分功能正常 - [ ] 收藏功能正常 - [ ] 统计功能正常 ### 性能验证 - [ ] 页面加载速度正常 - [ ] 大数据量分页正常 - [ ] 搜索响应时间正常 - [ ] 数据库连接稳定 ### 安全验证 - [ ] 用户权限控制正常 - [ ] SQL注入防护有效 - [ ] 数据验证正常 - [ ] API限流正常 ## 📞 技术支持 如果在升级过程中遇到问题,请: 1. **查看日志** ```bash # 查看应用日志 tail -f /path/to/app.log # 查看数据库日志 tail -f /var/log/mysql/error.log ``` 2. **检查配置** ```python # 验证数据库连接 from src.flask_prompt_master.models.optimization_history import OptimizationHistory print(OptimizationHistory.query.count()) ``` 3. **联系技术支持** - 提供详细的错误信息 - 提供相关的日志文件 - 描述复现步骤 --- **升级完成后,用户将享受到更安全、更强大的优化历史功能!** 🚀