4.4 KiB
4.4 KiB
SQLite 数据库迁移说明
概述
系统已从 JSON 文件存储迁移到 SQLite 数据库,提供更好的性能、并发支持和数据完整性。
主要变更
1. 新增文件
database.py- SQLite 数据库管理模块test_database.py- 数据库功能测试脚本data/baijiahao.db- SQLite 数据库文件(自动创建)
2. 修改文件
task_queue.py- 使用 SQLite 替代 JSON 文件存储
3. 数据迁移
- 旧数据自动从
data/task_queue.json迁移到数据库 - 迁移成功后会创建备份文件
data/task_queue.json.backup - 原 JSON 文件保留,可安全删除
数据库结构
tasks 表
CREATE TABLE tasks (
task_id TEXT PRIMARY KEY, -- 任务ID
url TEXT NOT NULL, -- 百家号URL
months REAL NOT NULL, -- 获取月数
use_proxy INTEGER NOT NULL, -- 是否使用代理 (0/1)
proxy_api_url TEXT, -- 代理API地址
username TEXT, -- 用户名
status TEXT NOT NULL, -- 任务状态
created_at TEXT NOT NULL, -- 创建时间
started_at TEXT, -- 开始时间
completed_at TEXT, -- 完成时间
progress INTEGER DEFAULT 0, -- 进度 (0-100)
current_step TEXT, -- 当前步骤
total_articles INTEGER DEFAULT 0, -- 总文章数
processed_articles INTEGER DEFAULT 0, -- 已处理文章数
error TEXT, -- 错误信息
result_file TEXT -- 结果文件路径
);
索引
idx_tasks_status- 状态索引(加速状态查询)idx_tasks_username- 用户名索引(加速用户过滤)idx_tasks_created_at- 创建时间索引(加速时间排序)
优势
1. 性能提升
- 索引支持,查询速度更快
- 优化的 SQL 查询,减少内存占用
- 不再需要每次操作都读写整个文件
2. 并发安全
- 线程安全的连接管理
- 数据库级别的事务支持
- 避免文件锁冲突
3. 数据完整性
- 主键约束防止重复
- 事务支持确保数据一致性
- 异常回滚机制
4. 可扩展性
- 易于添加新字段和索引
- 支持复杂查询和统计
- 便于后续功能扩展
使用说明
测试数据库功能
python test_database.py
手动迁移数据
from database import migrate_from_json
# 从 JSON 迁移到数据库
count = migrate_from_json("data/task_queue.json")
print(f"迁移了 {count} 个任务")
直接使用数据库
from database import get_database
db = get_database()
with db.get_connection() as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM tasks")
tasks = cursor.fetchall()
向后兼容
- 原有 API 接口不变
- 无需修改调用代码
- 自动迁移旧数据
- 保留原 JSON 文件
注意事项
- 首次启动:系统会自动创建数据库和迁移数据
- 备份:迁移成功后建议备份
data/baijiahao.db - 清理:确认迁移成功后可删除
data/task_queue.json - 性能:大量任务时数据库性能优势明显
故障排除
数据库锁定
如果遇到 "database is locked" 错误:
- 检查是否有多个进程同时访问
- 重启应用程序
- 增加超时时间(已设置为30秒)
迁移失败
如果迁移失败:
- 检查
data/task_queue.json格式 - 查看日志错误信息
- 手动运行
test_database.py测试
数据丢失
- 检查
data/task_queue.json.backup备份文件 - 从备份恢复后重新迁移
- 使用 SQLite 工具直接查看数据库
性能优化
已实施的优化
- 添加索引加速查询
- 使用事务批量操作
- 连接池复用连接
- Row factory 减少转换
未来优化方向
- 定期清理旧任务
- 数据归档机制
- 分表策略
- 查询缓存
相关命令
查看数据库
# 使用 SQLite 命令行工具
sqlite3 data/baijiahao.db
# 查看表结构
.schema tasks
# 查看所有任务
SELECT * FROM tasks;
# 统计任务数量
SELECT status, COUNT(*) FROM tasks GROUP BY status;
备份数据库
# 简单备份
cp data/baijiahao.db data/baijiahao.db.backup
# 使用 SQLite 工具备份
sqlite3 data/baijiahao.db ".backup data/baijiahao.db.backup"
恢复数据库
# 从备份恢复
cp data/baijiahao.db.backup data/baijiahao.db