9.2 KiB
9.2 KiB
优化历史功能数据库升级指南
📋 升级概述
将优化历史功能从localStorage本地存储升级到腾讯云MySQL数据库,实现跨设备同步、数据安全备份和高级分析功能。
🎯 升级优势
数据安全与可靠性
- ✅ 数据备份:自动备份到腾讯云,不会因浏览器清理而丢失
- ✅ 跨设备同步:登录后可在任何设备查看历史记录
- ✅ 数据完整性:事务保证,确保数据一致性
功能增强
- ✅ 高级搜索:支持全文搜索和多重筛选
- ✅ 统计分析:使用数据统计和分析报告
- ✅ 收藏功能:重要记录可收藏管理
- ✅ 满意度评分:记录用户对优化结果的满意度
性能优化
- ✅ 分页加载:大数据量时性能更好
- ✅ 索引优化:快速查询和检索
- ✅ 缓存策略:减少数据库压力
🗄️ 数据库设计
核心表结构
1. optimization_history(优化历史表)
- 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(标签表)
- id: 主键ID
- history_id: 历史记录ID
- tag_name: 标签名称
- tag_type: 标签类型
3. optimization_favorites(收藏表)
- id: 主键ID
- user_id: 用户ID
- history_id: 历史记录ID
- favorite_name: 收藏名称
- notes: 备注
4. user_usage_stats(使用统计表)
- id: 主键ID
- user_id: 用户ID
- date: 统计日期
- generation_count: 生成次数
- total_time_saved: 节省时间(分钟)
- avg_rating: 平均评分
🚀 升级步骤
第一步:数据库准备
- 创建数据库表
# 执行SQL脚本
mysql -h your_host -u your_username -p your_database < optimization_history_upgrade.sql
- 配置数据库连接
# 在config.py中配置腾讯云数据库
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://username:password@host:port/database'
第二步:代码部署
- 安装新模型
# 将新模型文件复制到项目
cp src/flask_prompt_master/models/optimization_history.py /path/to/project/models/
- 注册API路由
# 在app.py中注册蓝图
from src.flask_prompt_master.routes.optimization_history import optimization_history_bp
app.register_blueprint(optimization_history_bp)
- 更新前端代码
<!-- 在generate.html中引入新的JS文件 -->
<script src="{{ url_for('static', filename='js/optimization_history_db.js') }}"></script>
第三步:数据迁移
- 备份localStorage数据
// 在浏览器控制台运行
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();
- 执行数据迁移
# 运行迁移脚本
python migrate_localStorage_to_database.py
第四步:功能测试
- 基础功能测试
- ✅ 添加历史记录
- ✅ 查看历史记录
- ✅ 搜索和筛选
- ✅ 删除记录
- ✅ 评分功能
- 高级功能测试
- ✅ 收藏功能
- ✅ 统计分析
- ✅ 数据导出
- ✅ 跨设备同步
🔧 API接口文档
获取历史记录
GET /api/optimization-history?page=1&per_page=20&search=关键词&date_filter=today&type_filter=提示词优化
添加历史记录
POST /api/optimization-history
Content-Type: application/json
{
"original_text": "原始输入",
"optimized_text": "优化结果",
"optimization_type": "提示词优化",
"industry": "科技",
"profession": "产品经理",
"tags": ["逻辑强化", "场景适配"]
}
更新评分
PUT /api/optimization-history/{id}/rating
Content-Type: application/json
{
"rating": 5
}
删除记录
DELETE /api/optimization-history/{id}
获取统计信息
GET /api/optimization-history/stats?days=30
📊 性能优化建议
数据库优化
- 索引优化
-- 创建复合索引
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);
- 分区表(大数据量场景)
-- 按年份分区
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
);
应用优化
- 缓存策略
# 使用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
- 分页优化
# 使用游标分页替代偏移分页
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()
🔒 安全考虑
数据安全
- SQL注入防护
# 使用参数化查询
query = OptimizationHistory.query.filter(
OptimizationHistory.original_text.contains(search_term)
)
- 数据验证
# 验证输入数据
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之间')
访问控制
- 用户权限验证
@login_required
def get_optimization_history():
# 确保用户只能访问自己的数据
user_id = current_user.id
# ...
- API限流
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
📈 监控与维护
性能监控
- 慢查询监控
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
- 应用监控
# 使用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
数据维护
- 定期清理
# 清理过期数据
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
- 数据备份
# 定期备份数据库
mysqldump -h your_host -u your_username -p your_database > backup_$(date +%Y%m%d).sql
🎉 升级完成检查清单
功能验证
- 历史记录正常显示
- 搜索和筛选功能正常
- 添加/删除记录功能正常
- 评分功能正常
- 收藏功能正常
- 统计功能正常
性能验证
- 页面加载速度正常
- 大数据量分页正常
- 搜索响应时间正常
- 数据库连接稳定
安全验证
- 用户权限控制正常
- SQL注入防护有效
- 数据验证正常
- API限流正常
📞 技术支持
如果在升级过程中遇到问题,请:
- 查看日志
# 查看应用日志
tail -f /path/to/app.log
# 查看数据库日志
tail -f /var/log/mysql/error.log
- 检查配置
# 验证数据库连接
from src.flask_prompt_master.models.optimization_history import OptimizationHistory
print(OptimizationHistory.query.count())
- 联系技术支持
- 提供详细的错误信息
- 提供相关的日志文件
- 描述复现步骤
升级完成后,用户将享受到更安全、更强大的优化历史功能! 🚀