# 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 表 ```sql 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. 可扩展性 - 易于添加新字段和索引 - 支持复杂查询和统计 - 便于后续功能扩展 ## 使用说明 ### 测试数据库功能 ```bash python test_database.py ``` ### 手动迁移数据 ```python from database import migrate_from_json # 从 JSON 迁移到数据库 count = migrate_from_json("data/task_queue.json") print(f"迁移了 {count} 个任务") ``` ### 直接使用数据库 ```python 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 文件 ## 注意事项 1. **首次启动**:系统会自动创建数据库和迁移数据 2. **备份**:迁移成功后建议备份 `data/baijiahao.db` 3. **清理**:确认迁移成功后可删除 `data/task_queue.json` 4. **性能**:大量任务时数据库性能优势明显 ## 故障排除 ### 数据库锁定 如果遇到 "database is locked" 错误: - 检查是否有多个进程同时访问 - 重启应用程序 - 增加超时时间(已设置为30秒) ### 迁移失败 如果迁移失败: - 检查 `data/task_queue.json` 格式 - 查看日志错误信息 - 手动运行 `test_database.py` 测试 ### 数据丢失 - 检查 `data/task_queue.json.backup` 备份文件 - 从备份恢复后重新迁移 - 使用 SQLite 工具直接查看数据库 ## 性能优化 ### 已实施的优化 - 添加索引加速查询 - 使用事务批量操作 - 连接池复用连接 - Row factory 减少转换 ### 未来优化方向 - 定期清理旧任务 - 数据归档机制 - 分表策略 - 查询缓存 ## 相关命令 ### 查看数据库 ```bash # 使用 SQLite 命令行工具 sqlite3 data/baijiahao.db # 查看表结构 .schema tasks # 查看所有任务 SELECT * FROM tasks; # 统计任务数量 SELECT status, COUNT(*) FROM tasks GROUP BY status; ``` ### 备份数据库 ```bash # 简单备份 cp data/baijiahao.db data/baijiahao.db.backup # 使用 SQLite 工具备份 sqlite3 data/baijiahao.db ".backup data/baijiahao.db.backup" ``` ### 恢复数据库 ```bash # 从备份恢复 cp data/baijiahao.db.backup data/baijiahao.db ```