新手报道,公司在新做在线培训考试系统,因以前的系统在考试完成交卷后,总是会卡死,经分析可能是在完成答题交卷过程中会判断分数和录入成绩,同时有很多人(公司800多人)同时向成绩表中录入数据,导致数据库锁死或着说卡死。以下是我新做的培训系统的-R图,求大牛给分析一下,这个设计是否合理,怎么解决交交卷时并发问题?并欢迎大家提出合理意见!
在线培训系统E-R图
备注一下我们要求使用.net+SQL Server编写。
敢问少侠考试是面对全国还是哪里
优化SQL语句,改建索引建索引,调大数据库缓存
关系型数据库一般在CRUD中都会进行加锁操作,可以考虑创建非关系型数据库!
公司800多人 同一秒提交的人有多少? 提交操作如果是员工做完试卷自行点击提交,那并发应该不大啊,甚至说很小(我以前做过几万人在线学习答题系统都不会出现数据库卡或者锁死,而且都是基本架构没有使用缓存、队列等技术);所以我们怀疑代码或者sql存在问题,
你最好重新排查,找到真正的问题点,然后修改这样最简单;但如果并发确实很高,可能需要优化提交试卷流程,比如加入队列方式等方式
数据库啥配置,这么点压力都经受不了。如果代码没优化空间,试试增加数据库机器配置并调优,实在不行可以采用消息中间件异步提交,防止数据库并发操作过多。
第一种弄镜像,第二种使用redis缓存,你将那些学生的成绩,数据操作比较频繁的放在里面,第三种,既然是全国的,可以考虑部署nginx来稍微缓解一下第四种就开始大调整项目我不建议你这么做,但可以使用伪静态页面来稍微缓解压力。第五种不知道你会不会,内容分发网络,不会就算,学起来怪麻烦的。sql优化这些我就不说了 没必要
800人提交,而且不是同时提交,你这个不能算并发吧。一定是代码或者数据库有问题。比如有没有使用数据库连接池,非要觉得并发问题,数据缓存,用队列,一个存好了另外一个再存。但以我的经验来看,绝对方式问题,你这种就一个数据库连接池,一秒钟几次都不到,。数据库不可能后撑不住的。
,先确定,插入数据慢还是查询数据慢,数据表的大小,数据表太大做索引,或者分区表。