Files
aitsc/优化历史数据库升级指南.md
2025-10-10 23:39:54 +08:00

9.2 KiB
Raw Permalink Blame History

优化历史功能数据库升级指南

📋 升级概述

将优化历史功能从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: 平均评分

🚀 升级步骤

第一步:数据库准备

  1. 创建数据库表
# 执行SQL脚本
mysql -h your_host -u your_username -p your_database < optimization_history_upgrade.sql
  1. 配置数据库连接
# 在config.py中配置腾讯云数据库
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://username:password@host:port/database'

第二步:代码部署

  1. 安装新模型
# 将新模型文件复制到项目
cp src/flask_prompt_master/models/optimization_history.py /path/to/project/models/
  1. 注册API路由
# 在app.py中注册蓝图
from src.flask_prompt_master.routes.optimization_history import optimization_history_bp
app.register_blueprint(optimization_history_bp)
  1. 更新前端代码
<!-- 在generate.html中引入新的JS文件 -->
<script src="{{ url_for('static', filename='js/optimization_history_db.js') }}"></script>

第三步:数据迁移

  1. 备份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();
  1. 执行数据迁移
# 运行迁移脚本
python migrate_localStorage_to_database.py

第四步:功能测试

  1. 基础功能测试
  • 添加历史记录
  • 查看历史记录
  • 搜索和筛选
  • 删除记录
  • 评分功能
  1. 高级功能测试
  • 收藏功能
  • 统计分析
  • 数据导出
  • 跨设备同步

🔧 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

📊 性能优化建议

数据库优化

  1. 索引优化
-- 创建复合索引
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);
  1. 分区表(大数据量场景)
-- 按年份分区
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. 缓存策略
# 使用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
  1. 分页优化
# 使用游标分页替代偏移分页
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注入防护
# 使用参数化查询
query = OptimizationHistory.query.filter(
    OptimizationHistory.original_text.contains(search_term)
)
  1. 数据验证
# 验证输入数据
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. 用户权限验证
@login_required
def get_optimization_history():
    # 确保用户只能访问自己的数据
    user_id = current_user.id
    # ...
  1. 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

📈 监控与维护

性能监控

  1. 慢查询监控
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
  1. 应用监控
# 使用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. 定期清理
# 清理过期数据
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
  1. 数据备份
# 定期备份数据库
mysqldump -h your_host -u your_username -p your_database > backup_$(date +%Y%m%d).sql

🎉 升级完成检查清单

功能验证

  • 历史记录正常显示
  • 搜索和筛选功能正常
  • 添加/删除记录功能正常
  • 评分功能正常
  • 收藏功能正常
  • 统计功能正常

性能验证

  • 页面加载速度正常
  • 大数据量分页正常
  • 搜索响应时间正常
  • 数据库连接稳定

安全验证

  • 用户权限控制正常
  • SQL注入防护有效
  • 数据验证正常
  • API限流正常

📞 技术支持

如果在升级过程中遇到问题,请:

  1. 查看日志
# 查看应用日志
tail -f /path/to/app.log

# 查看数据库日志
tail -f /var/log/mysql/error.log
  1. 检查配置
# 验证数据库连接
from src.flask_prompt_master.models.optimization_history import OptimizationHistory
print(OptimizationHistory.query.count())
  1. 联系技术支持
  • 提供详细的错误信息
  • 提供相关的日志文件
  • 描述复现步骤

升级完成后,用户将享受到更安全、更强大的优化历史功能! 🚀