一,存储结构设计

定义数据库表名

数据库表名
分析结果 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管理员允许修改题目

日志备份,监控数据

事务与锁机制

小批量数据入库并测试

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐