基于DeepSeek的代码评测和自动纠错优化系统-数据库物理结构设计与实施
1,将逻辑结构模型转化为高性能可用的物理实现,将高频访问数据与冷数据分离,利用不同存储介质的特性。用户角色权限分离,user用户仅可读,admin管理员允许修改题目。使用行存储,相邻数据连续存放,支持单行的增删改查。利用分区实现快速检测,加速查找并便于维护。小批量数据入库并测试。
·
一,存储结构设计
定义数据库表名
| 数据库表名 | |
| 分析结果 | analysis_results |
| 用户 | users |
| 提交 | submissions |
| 题目 | problem |
| 内容总表 | sqlite-sequence |
| 测试用例 | testcase-results |
1,将逻辑结构模型转化为高性能可用的物理实现,将高频访问数据与冷数据分离,利用不同存储介质的特性
注意到访问表(如submission需要频繁查询分页数据)
// ./cotroller/submission
utils.DB.
Where("user_id = ?", userID).
Order("submit_time desc").
Offset((pageNum - 1) * pageSize).
Limit(pageSize).
Find(&submissions)
故借助不同的读写存储优化查询性能
| 数据类型 | 存储位置 | 表示例) | 说明 |
| 高频读写数据 | SSD(高性能) | submission | 提交记录高频插入和查询,需要低延迟响应 |
| 低频访问数据 | HDD(大容量存储) | user | 归档的日志数据,访问频率低,存储成本优先 |
| 索引文件 | 独立分区 | idx_submission_deleted_at | 索引与数据分离,避免 I/O 竞争 |
2,数据分区策略
利用分区实现快速检测,加速查找并便于维护
problem中有获取该问题的所有提交记录功能
if err := utils.DB.Model(&models.Submission{}).
Where("problem_id = ?", problemID).
Count(&total).
Order("submit_time desc").
Offset((pageInt - 1) * limitInt).
Limit(limitInt).
Find(&submissions).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "查询失败"})
return
}
利用提交时间建立时序分区,优化搜索性能
| 分区类型 | 表 | 分区设计 |
| 范围分区 | 提交表,测试用例表 | 时间序列表,按照提交和更新的时间进行排序 |
| 哈希分区 | 用户信息表 | 数据分布均匀 |

3,存储模型
使用行存储,相邻数据连续存放,支持单行的增删改查
二,实施阶段展望
用户角色权限分离,user用户仅可读,admin管理员允许修改题目
日志备份,监控数据
事务与锁机制
小批量数据入库并测试
更多推荐


所有评论(0)