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

391 lines
9.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 优化历史功能数据库升级指南
## 📋 升级概述
将优化历史功能从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. **联系技术支持**
- 提供详细的错误信息
- 提供相关的日志文件
- 描述复现步骤
---
**升级完成后,用户将享受到更安全、更强大的优化历史功能!** 🚀