Files
aitsc/优化历史数据库升级指南.md

391 lines
9.2 KiB
Markdown
Raw Normal View History

2025-10-10 23:39:54 +08:00
# 优化历史功能数据库升级指南
## 📋 升级概述
将优化历史功能从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
<!-- 在generate.html中引入新的JS文件 -->
<script src="{{ url_for('static', filename='js/optimization_history_db.js') }}"></script>
```
### 第三步:数据迁移
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. **联系技术支持**
- 提供详细的错误信息
- 提供相关的日志文件
- 描述复现步骤
---
**升级完成后,用户将享受到更安全、更强大的优化历史功能!** 🚀